我目前正在尝试构建可与CUDA一起使用的R-Package。
尽管创建包的传统方法可以工作,就像gputools包一样,但我还是想为该包尝试Rcpp,因为关于返回值,它看起来更加干净方便。
到目前为止,该软件包的安装效果良好,但是问题在于,CUDA API函数(例如,类似于cudaMalloc()
)的首次调用使我的RStudio崩溃了。
我创建了一个minimal example来说明我的情况。
就这么简单#include <Rcpp.h>
#include "cudaTest.h"
using namespace Rcpp;
// [[Rcpp::export]]
Rcpp::NumericMatrix cudaTest()
{
testMalloc();
}
和#include <cudaTest.h>
#include "cuda_runtime.h"
#include <cuda.h>
void testMalloc()
{
size_t
fbytes = sizeof(double);
double
*d_mat;
cudaMalloc((void**)&d_mat, 200*50*fbytes);
cudaFree(d_mat);
}
关于我在做什么错的任何想法吗?这样支持集成吗?
编辑:
在命令行(R CMD INSTALL
)上安装软件包并在R REPL中执行它实际上给了我错误,这是一个常见的段错误。
最佳答案
谢谢@RalfStubner,产生上述错误的错误确实只是从未返回的返回类型的声明。
所以代替
// [[Rcpp::export]]
Rcpp::NumericMatrix cudaTest()
{
testMalloc();
}
应该是
// [[Rcpp::export]]
void cudaTest()
{
testMalloc();
}
(虽然这是一个非常简单的问题,但是在我最初的大型项目中,错误是在不同的设置下是相同的。我认为
cudaMalloc
是问题所在,因为我只能使用printf
语句调试自己的方式,因此完全省略了该语句当引入错误部分时。在这个较大的项目中,错误是CUDA内核启动后的包装,此错误随后被清除。)关于c++ - 从Rcpp包中调用CUDA API函数会导致segfault,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49856810/