[patch, fortran] Inline BLAS calls to support conjg(transpose(a))
Paul Richard Thomas
paul.richard.thomas@gmail.com
Tue Sep 18 18:20:00 GMT 2018
Hi Thomas,
This fine, except for one niggle. Rather than having the blas source
in each testcase, why don't you put all the functions in a blas file
and use the dg-additional-sources mechanism?
Cheers
Paul
On 18 September 2018 at 18:46, Thomas Koenig <tkoenig@netcologne.de> wrote:
> Hello world,
>
> this patch generates direct calls to *GEMM when -fexternal-blas is
> specified. This allows to handle arguments to conjugate and transposed
> elements, which is quite a common use case.
>
> While looking at the code, I found that the inline limit checks were not
> correctly handled for cases except for A2B2. This is also fixed.
>
> In order to check all cases at runtime, I simply copied the reference
> BLAS routines to the test cases, why they are *.f instead of *.f90.
>
> Regarding the bounds checking: I added three new test cases, but
> as for checking everything, that would be a bit too much. The code
> is clear enough that I think the other cases should be OK.
>
> OK for trunk?
>
> Regards
>
> Thomas
>
> 2018-09-18 Thomas Koenig <tkoenig@gcc.gnu.org>
>
> PR fortran/29550
> * gfortran.h (gfc_expr): Add external_blas flag.
> * frontend-passes.c (matrix_case): Add case A2TB2T.
> (optimize_namespace): Handle flag_external_blas by
> calling call_external_blas.
> (get_array_inq_function): Add argument okind. If
> it is nonzero, use it as the kind of argument
> to be used.
> (inline_limit_check): Remove m_case argument, add
> limit argument instead. Remove assert about m_case.
> Set the limit for inlining from the limit argument.
> (matmul_lhs_realloc): Handle case A2TB2T.
> (inline_matmul_assign): Handle inline limit for other cases with
> two rank-two matrices. Remove no-op calls to inline_limit_check.
> (call_external_blas): New function.
> * trans-intrinsic.c (gfc_conv_intrinsic_funcall): Do not add
> argument to external BLAS if external_blas is already set.
>
> 2018-09-18 Thomas Koenig <tkoenig@gcc.gnu.org>
>
> PR fortran/29550
> * gfortran.dg/inline_matmul_13.f90: Adjust count for
> _gfortran_matmul.
> * gfortran.dg/inline_matmul_16.f90: Likewise.
> * gfortran.dg/promotion_2.f90: Add -fblas-matmul-limit=1. Scan
> for dgemm instead of dgemm_. Add call to random_number to make
> standard conforming.
> * gfortran.dg/matmul_blas_1.f90: New test.
> * gfortran.dg/matmul_bounds_14.f: New test.
> * gfortran.dg/matmul_bounds_15.f: New test.
> * gfortran.dg/matmul_bounds_16.f: New test.
--
"If you can't explain it simply, you don't understand it well enough"
- Albert Einstein
More information about the Fortran
mailing list