如何解决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 举报,一经查实,本站将立刻删除。