我目前正在尝试构建一个与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中执行它实际上给了我错误,这是一个常见的段错误。
答案 0 :(得分:1)
谢谢@RalfStubner,产生上述错误的错误确实只是从未返回的返回类型的声明。
所以而不是
// [[Rcpp::export]]
Rcpp::NumericMatrix cudaTest()
{
testMalloc();
}
它应该是
// [[Rcpp::export]]
void cudaTest()
{
testMalloc();
}
(虽然这是一个相当简单的问题,在我原来相当大的项目中,错误与不同的设置相同。我认为cudaMalloc
是问题所在,因为我只能调试我的方式printf
语句,在引入错误部分时被完全省略。在这个较大的项目中,错误是CUDA内核启动的包装,之后就被删除了。)