PyCUDA 中的随机数生成

问题描述

我正在尝试使用 pycuda 生成随机数,没有随机数生成代码的代码工作正常。任何帮助将不胜感激。

from pycuda.compiler import SourceModule

code="""
#include <stdio.h>
#include <curand.h>
#include <curand_kernel.h>


__global__ void testrand2(unsigned long seed,float *a){
    int idx = threadIdx.x + blockIdx.x * blockDim.x;
    curandState state;
    curand_init(seed,idx,&state);
    a[idx] = curand_uniform(&state);
}
__global__ void test(float *arr)
{
  dim3 threadsPerBlock(256,1,1);
  dim3 numBlocks(1,1);
  
  testrand2<<<threadsPerBlock,numBlocks>>>(1,arr);
}
"""

mod = SourceModule(code)
test = mod.get_function("test")

d = np.zeros(256,dtype=np.float32)

test (drv.InOut(d),block=(1,1),grid=(1,1))
print(d)

错误:

----------------------------------------------- ---------------------------- CompileError Traceback(最近一次调用 最后) 在 () 22""" 23 ---> 24 mod = SourceModule(代码) 25 test = mod.get_function("test") 26 print("main_Correlation Called")

2 帧 /usr/local/lib/python3.7/dist-packages/pycuda/compiler.py 中 compile_plain(源,选项,保留,nvcc,cache_dir,目标) 153 命令行, 第 154 章 --> 155 stderr=stderr.decode("utf-8","replace"),156) 157

CompileError: nvcc 编译 /tmp/tmprygdeq52/kernel.cu 失败 [命令:nvcc --cubin -arch sm_75 -I/usr/local/lib/python3.7/dist-packages/pycuda/cuda kernel.cu] [stderr: /usr/local/cuda/bin/../targets/x86_64-linux/include/curand_kernel.h(507): 错误:此声明可能没有 extern "C" 链接

/usr/local/cuda/bin/../targets/x86_64-linux/include/curand_kernel.h(527): 错误:此声明可能没有 extern "C" 链接

/usr/local/cuda/bin/../targets/x86_64-linux/include/curand_kernel.h(583): 错误:此声明可能没有 extern "C" 链接

………… ……

/usr/local/cuda/bin/../targets/x86_64-linux/include/curand_discrete2.h(86): 错误:此声明可能没有 extern "C" 链接

kernel.cu(19):错误:从设备全局启动内核 函数需要单独的编译模式

在编译“kernel.cu”时检测到 31 个错误。 ]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...