【发布时间】:2018-04-16 11:59:30
【问题描述】:
我目前正在尝试构建一个适用于 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 中执行它实际上给了我错误,这是一个常见的段错误。
【问题讨论】:
-
您可以使用 Rcpp 和 CUDA 查看其他包;也许gpuR 有帮助。我还发现 ArrayFire 抽象很有帮助,请参阅 this Rcpp Gallery post。
-
我想看看你在 github 上的项目,但它没有构建。它需要外部系统库。可能值得添加一个自述文件以及如何安装它们。
-
@SymbolixAU 我试图创建一个带有依赖项的 README,希望它就足够了。由于我的机器上已经设置了所有内容,因此很难测试是否缺少任何内容。
-
@DirkEddelbuettel 感谢您的意见,但 gpuR 不使用 CUDA 而是使用 OpenCL 来访问 GPU。此外,该项目的目标是保持与 CUDA 本身非常接近以进行基准测试。
-
你能用
gdb运行它来查看段错误发生在哪里吗?顺便说一句,您可能应该使用void cudaTest(),因为该函数不返回任何内容。