[R-pkg-devel] R, BLAS, and FCLEN (solved)

Göran Broström gor@n@bro@trom @end|ng |rom umu@@e
Fri Sep 13 00:07:15 CEST 2019



On 2019-09-12 09:13, Martin Maechler wrote:
>>>>>> Göran Broström
>>>>>>      on Wed, 11 Sep 2019 13:36:40 +0200 writes:
> 
>      > A followup question: Is it possible to call a BLAS/LAPACK subroutine,
>      > where one parameter is character, from FORTRAN (77) code called by
>      > .Fortran? (No problem "in the past".)
> 
> [as there wasn't a reply till now : ]
> 
> Yes, that should continue to be possible.
> 
>      > And if yes, how?
> 
> I'm sorry I don't know (and currently lack the time to try to find out)...

I solved it by writing a C wrapper (for the BLAS subroutine dgemv) cdgemv:

#define USE_FC_LEN_T
#include <Rconfig.h>
#include <R_ext/BLAS.h>
#ifndef FCONE
# define FCONE
#endif
#include <R.h>
#include "cdgemv.h"

void F77_SUB(cdgemv)(const int *trans, const int *m, const int *n,
		     const double *alpha, const double *a,
                      const int *lda,
		     const double *x, const int *incx,
                      const double *beta,
		     double *y, const int *incy){
    char trams;

    if (*trans == 1){
       trams = 'N';
       F77_CALL(dgemv)(&trams, m, n, alpha, a, lda, x, incx, beta, y,
                       incy FCONE);
    }else
       Rprintf("trans has wrong value\n");
    }
}

which I call from Fortran. Curiously, a Fortran wrapper also seems to work.

G,
> 
> Martin
> 
>      >   Documentation describes calls from C to Fortran and
>      > vice versa, but not this situation (AFAICS).
> 
>      > Yes, I know that .Fortran is not well seen these days, but my fortran
>      > code is ancient, from the before-R era, and I would like to leave it as-is.
> 
>      > G,
> 
>      > Den 2019-09-01 kl. 21:46, skrev Göran Broström:
>      >>
>      >>
>      >> On 2019-08-31 18:47, Göran Broström wrote:
>      >>> I'm having difficulties updating my package eha: When I run standard
>      >>> checks 'at home' everything is fine, but 'CRAN-submissions' reports
>      >>> (among other things):
>      >>>
>      >>> geomsup.f:324:9: warning: type of ‘dgemv’ does not match original
>      >>> declaration [-Wlto-type-mismatch]
>      >>>    324 |      &     one, score, ione)
>      >>>        |         ^
>      >>> /home/tmp/R-d-gcc-LTO/include/R_ext/BLAS.h:107:1: note: type mismatch
>      >>> in parameter 12
>      >>>    107 | F77_NAME(dgemv)(const char *trans, const int *m, const int *n,
>      >>>        | ^
>      >>>
>      >>> This is odd since the LAPACK subroutine dgemv takes only 11
>      >>> parameters. However, in include/R_ext/BLAS.h we have
>      >>>
>      >>> F77_NAME(dgemv)(const char *trans, const int *m, const int *n,
>      >>>          const double *alpha, const double *a, const int *lda,
>      >>>          const double *x, const int *incx, const double *beta,
>      >>>          double *y, const int *incy FCLEN);
>      >>>
>      >>> with a 12th parameter FCLEN?? How am I supposed to fix this, and what
>      >>> the ... is FCLEN? googling leads to nothing useful (for me). It seems
>      >>> as if R is redefining some standard LAPACK routines.
>      >>>
>      >>> Also a note I do not understand (in this context):
>      >>>
>      >>> note: type ‘void’ should match type ‘long int’
>      >>>
>      >>> Any help is much appreciated.
>      >>>
>      >>> Best, Göran
>      >>>
>      >>> PS. How can I trigger these Warnings 'at home'?
>      >>
>      >> See https://www.stats.ox.ac.uk/pub/bdr/LTO/README.txt (thanks to Uwe
>      >> Ligges).
>      >>
>      >> Another relevant document seems to be (2019-05-15):
>      >>
>      >> https://developer.r-project.org/Blog/public/2019/05/15/gfortran-issues-with-lapack/index.html
>      >>
>      >>
>      >> First sentence:
>      >> "Recent version of the GNU Fortran compiler (7, 8, 9) include
>      >> optimizations that break interoperability between C and Fortran code
>      >> with BLAS/LAPACK."
>      >>
>      >> And later:
>      >> "For the time being, everyone should use -fno-optimize-sibling-calls
>      >> with GFortran version 7 and newer."
>      >>
>      >> G,
>      >>
>      >>> ______________________________________________
>      >>> R-package-devel using r-project.org mailing list
>      >>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>      >>
>      >> ______________________________________________
>      >> R-package-devel using r-project.org mailing list
>      >> https://stat.ethz.ch/mailman/listinfo/r-package-devel
> 
>      > ______________________________________________
>      > R-package-devel using r-project.org mailing list
>      > https://stat.ethz.ch/mailman/listinfo/r-package-devel
>



More information about the R-package-devel mailing list