gputools R版本3.1.2未知错误Cuda 6.5,GeFource GTX 750 TI

时间:2015-09-21 02:56:53

标签: r gpu

R版本3.1.2(2014-10-31) - “南瓜头盔”版权所有(C)2014 R统计计算平台基础:x86_64-pc-linux-gnu(64位)

当我尝试按照此示例http://dsnotes.com/blog/2015/06/04/installing-cuda-toolkit-and-gputools/

我收到了以下内容:

library(gputools)
> N <- 1e3
> m <- matrix(sample(100,size = N*N, replace = T), nrow = N)
> system.time(dist(m))
   user  system elapsed 
  5.268   0.000   5.251 
> system.time(gpuDist(m))
Error in gpuDist(m) : unknown error
In addition: Warning message:
In gpuDist(m) : distance function : malloc and memcpy
Timing stopped at: 0.208 0.02 0.393 

1 个答案:

答案 0 :(得分:-1)

免责声明 - 这包含一些自我宣传。

我对gputools不是很熟悉,我最初在用R开始进行GPU计算时尝试过它,但我觉得安装起来非常困难,而且我也不喜欢被困在一张NVIDIA显卡(虽然它们是出色的显卡)。如果您没有卡在CUDA列车上,我希望您考虑一下我在github上可以找到的gpuR包裹。该软件包的核心利用ViennaCL库使GPU计算变得非常简单。这也使用了OpenCL后端,使其可以移植到任何GPU卡上。

我刚刚添加了dist方法来计算行方向欧几里德距离矩阵。因此,如果您只需要欧几里德距离,这将是gpuTools的替代方案。包中的所有函数都与base R函数相同(除了应用于我的S4类)。

library(gpuR)

# R matrix
mat <- matrix(rnorm(1e+06), 1000, 1000)

# vclMatrix (from gpuR)
vcl_A <- vclMatrix(mat)

# quick 'benchmark'

# base R
system.time(dist(mat))
user  system elapsed 
4.726   0.000   4.679 

# vclMatrix from gpuR
system.time(dist(vcl_A))
user  system elapsed 
0.092   0.000   0.053 

# check equivalence
res <- as.matrix(dist(mat))
gpu_res <- dist(vcl_A)

all.equal(res, gpu_res[], check.attributes = FALSE)
[1] TRUE

如果您已经在Linux系统上安装了CUDA,那么安装此软件包应该很简单。我的github wiki上有安装说明。

我准备将此软件包提交给CRAN,但我希望有其他用户浏览该软件包,以便我可以继续改进它。

修改

关于原始错误,您可以在834行的distance.cu file中看到该错误源于未能分配CUDA内存。也就是说,您的矩阵大小应该很容易被该卡处理。此外,CUDA版本不应该那么重要,因为软件包发布本身表明它只需要&gt; = 5.0。如评论中所述,您可以尝试重新启动计算机或重新安装/升级CUDA,但我无法为错误本身提供干净的答案。如果您已经开始使用gputools,那么您应该在github page上提交错误报告。