C++ 从R-.C调用CUDA编译的.dll与调用

C++ 从R-.C调用CUDA编译的.dll与调用,c++,c,r,cuda,C++,C,R,Cuda,通过以下操作,我在Windows7x64DLL下创建了一个CUDA函数。该函数定义如下: extern "C" __declspec(dllexport) void gvectorAdd(double *A, double *B, double *C, int *n) 我可以使用以下命令从R(v3.2.3 64位)中成功调用此函数: a <- c(1,2,3,4) b <- c(5,6,7,8) c <- c(0,0,0,0) n <- length(c) path.

通过以下操作,我在Windows7x64DLL下创建了一个CUDA函数。该函数定义如下:

extern "C" __declspec(dllexport) void gvectorAdd(double *A, double *B, double *C, int *n)
我可以使用以下命令从R(v3.2.3 64位)中成功调用此函数:

a <- c(1,2,3,4)
b <- c(5,6,7,8)
c <- c(0,0,0,0)
n <- length(c)

path.dll <- "cuda_r_1.dll"
dyn.load(path.dll)

c <- .C("gvectorAdd", 
        as.numeric(a), 
        as.numeric(b), 
        as.numeric(c), 
        as.integer(n),
        PACKAGE="cuda_r_1"
      )[[3]]

a您应该更喜欢使用
.Call
,但是
.C
.Call
接口是不同的--
。Call
要求所有参数都使用SEXPs。有关更多详细信息,请参阅


换句话说,如果您想移动到
.Call
界面,您需要更改
gvectorAdd
函数。

您应该更喜欢使用
.Call
,但是
.C
.Call
界面是不同的--
。Call
需要
SEXP
来处理所有参数。有关更多详细信息,请参阅。换句话说,如果要移动到
.Call
界面,则需要更改
gvectorAdd
函数。@KevinUshey:如果要将其作为一个界面添加,这听起来是一个非常好的答案。