从R - .C vs .Call调用CUDA编译.dll

时间:2016-04-28 17:11:50

标签: c++ c r cuda

通过关注this NVidia blog entry,我在Windows 7 x64 dll下创建了一个CUDA函数。该功能定义如下:

shared_ptr

我可以使用以下内容从R(v3.2.3 64bit)中成功调用此函数:

extern "C" __declspec(dllexport) void gvectorAdd(double *A, double *B, double *C, int *n)

我认为我应该使用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]] 代替.Call。但是,当我在上面的代码中用.C替换.C(...)时,R会话崩溃。

有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

您应该更喜欢使用.Call,但.C.Call接口不同 - .Call期望所有参数都使用SEXP。有关更多详细信息,请参阅https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Interface-functions-_002eCall-and-_002eExternal

换句话说,如果您想转移到gvectorAdd界面,则需要更改.Call功能。