从 Rcpp 包调用 CUDA API 函数导致段错误

Calling CUDA API functions from Rcpp package causes segfault

我目前正在尝试构建一个与 CUDA 一起工作的 R-Package。 虽然创建包的传统方法可行,但与包的 gputools package, I wanted to try Rcpp 非常相似,因为它在 return 值方面看起来更干净和方便。

包安装到目前为止运行良好,但问题是 第一次调用 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,产生上述错误的错误确实只是声明了一个从未被 returned 的 return 类型。

所以不用

// [[Rcpp::export]]
Rcpp::NumericMatrix cudaTest()
{
  testMalloc();
}

应该是

// [[Rcpp::export]]
void cudaTest()
{
  testMalloc();
}

(虽然这是一个相当简单的问题,但在我原来相当大的项目中,错误与不同的设置相同。我认为 cudaMalloc 是问题所在,因为我只能按照自己的方式进行调试通过 with printf 语句,在引入错误部分时完全省略了。在这个较大的项目中,错误是围绕 CUDA 内核启动的包装器,后来被简单地删除了。)