gputools R版本3.1.2 Cuda 6.5,GeFource GTX 750 TI存在未知错误 R版本3.1.2(2014-10-31)——“南瓜头盔”版权(C)2014统计计算平台R基础:X86Y-64-PC-LIUX-GNU(64位)

gputools R版本3.1.2 Cuda 6.5,GeFource GTX 750 TI存在未知错误 R版本3.1.2(2014-10-31)——“南瓜头盔”版权(C)2014统计计算平台R基础:X86Y-64-PC-LIUX-GNU(64位),r,gpu,R,Gpu,当我试着效仿这个例子时 我收到了下列文件: 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) :

当我试着效仿这个例子时

我收到了下列文件:

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 
库(gputools)
>N m系统时间(距离(m))
用户系统运行时间
5.268   0.000   5.251 
>系统时间(gpuDist(m))
gpuDist(m)中出错:未知错误
此外:警告信息:
在gpuDist(m)中:距离函数:malloc和memcpy
正时停止于:0.208 0.02 0.393

免责声明-其中包含一些自我宣传

我对
gputools
不是很熟悉,当我第一次使用R开始GPU计算时,我确实尝试过它,但我发现它安装起来非常困难,而且我也不喜欢被NVIDIA卡卡住(尽管它们是很好的卡)。如果你不被困在CUDA列车上,我想让你考虑我的<代码> GPUR <代码>包,你可以在我的上面找到。该包的核心利用该库使GPU计算极其简单。这还利用了OpenCL后端,使其基本上可移植到任何GPU卡

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

库(gpuR)
#R矩阵

mat R版本在这里并不重要(尽管版本3.1.2已经过时)。在这种情况下,您使用的CUDA版本和图形卡的型号将是更重要的信息。我认为你的GPU没有足够的内存来解决这个问题。尝试减少N并重新启动(您可能还需要重新启动计算机,除非您想键入一点CUDA代码来重置/删除图形卡中的内存,这样的错误可能会造成内存混乱)。在任何情况下,我都无法重现/确认错误。你的代码在我的计算机上运行良好(CUDA v7.0,GeForce GTX 760,4GB)。我有一个GeForce GTX 750 TI,使用CUDA 6.5。。。我会在下班回家后再试一次,看看重启是否是唯一的问题。从我发现的情况来看,这个型号有2GB,这可能不足以进行内存密集型dist计算。我注意到gputools在处理内存问题时不擅长错误处理。您是否可以为我的设置推荐其他软件包?或者,为了像在本文中那样使用我的gpu,我是否必须弄清楚如何自己制作一个包装器函数?我真的不明白这是怎么回答这个问题的。@Talonmes OP最初询问如何从
gputools
运行
gpuDist
。在评论中,他询问了一个替代方案。这个答案提供了一个解决方案。谢谢你的建议,我会检查它。现在,你是建议我更新我的cuda版本以更好地分配内存,还是买一个更好的(或第二个)图形卡?最后,我的心并没有放在使用gputools上,但它有一些我想要的功能,已经打包在一个包中,比如hclust、lm和cor。我正在尝试进入化学计量学,并且很想利用我的8核和gpu来处理光谱。@Steveburnett我会尝试一个简单的CUDA程序来测试你的安装。某个地方可能有安装错误。如果可以,请检查您的卡支持的最新版本的CUDA。首先主要检查一个独立的CUDA程序是否有效,并更新您的问题。
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