From: Dominick Samperi <djsamperi_at_gmail.com>

Date: Mon, 05 Mar 2012 19:21:01 -0500

zy[1].r = 2.0; zy[0].i = 0.0;

zy[2].r = 3.0; zy[0].i = 0.0;

R-devel_at_r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue 06 Mar 2012 - 00:22:42 GMT

Date: Mon, 05 Mar 2012 19:21:01 -0500

Hello,

I am trying to call the BLAS Level1 function zdotc from R via a .C call like this:

#include "R.h"

*#include "R_ext/BLAS.h"
*

void testzdotc() {

Rcomplex zx[3], zy[3], ret_val;

zx[0].r = 1.0; zx[0].i = 0.0; zx[1].r = 2.0; zx[0].i = 0.0; zx[2].r = 3.0; zx[0].i = 0.0; zy[0].r = 1.0; zy[0].i = 0.0;

zy[1].r = 2.0; zy[0].i = 0.0;

zy[2].r = 3.0; zy[0].i = 0.0;

int n=3, incx=1, incy=1;

F77_CALL(zdotc)(&ret_val, &n, zx, &incx, zy, &incy);
Rprintf("ret_val = %f, %f\n", ret_val.r, ret_val.i);
}

This does not work. When I run '.C('testzdotc')' there is typically a delay for a second or so, then I get: 0.0, 0.0 instead of the correct ans: 14.0, 0.0.

Section 5.2 of the R manual (on Extending R) says that only FORTRAN subroutines can be called (not functions), probably because of the non-standard way the compilers map FORTRAN function names to symbols in the DLL.

This is consistent with the interface prototype for the BLAS routine zdotc contained in <R>/include/R_ext/BLAS.h, namely,

F77_NAME(zdotc)(Rcomplex * ret_val, int *n,

Rcomplex *zx, int *incx, Rcomplex *zy, int *incy);

But this seems to BOTH return a result, and pass the result as the first argument?

On the other hand, this is not consistent with the standard FORTRAN definition for zdotc that is contained in <R>/src/extra/blas/cmplxblas.f, where the first argument is n, not ret_val. Consequently, it is not clear where the wrapper is defined that is called via the prototype.

My search is complicated by the fact that the libraries libR.so, libRblas.so, libRlapack.so are stripped.

When I install the standard (FORTRAN-based) BLAS on my system (Fedora 16), I find that zdotc is defined in the traditional way (without adjustment to the first argument). This is probably irrelevant because R does not use it in my configuration.

I found some documentation on Intel FORTRAN that seems to suggest that the first argument on the C side is always the same as (a pointer to) the FORTRAN function return value, but this is not so if I use the standard definition of zdotc.f with gfortran.

Any ideas?

Thanks,

Dominick

R-devel_at_r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue 06 Mar 2012 - 00:22:42 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

*
Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.
Archive generated by hypermail 2.2.0, at Tue 06 Mar 2012 - 12:00:25 GMT.
*

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel.
Please read the posting
guide before posting to the list.
*