我目前正在尝试构建可与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中执行它实际上给了我错误,这是一个常见的段错误。

c&#43;&#43; - 从Rcpp包中调用CUDA API函数会导致segfault-LMLPHP

最佳答案

谢谢@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/

10-10 09:13