首页 > 解决方案 > 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, 0, &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,1), grid=(1,1))
print(d)

错误:

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

compile_plain 中的 2 帧 /usr/local/lib/python3.7/dist-packages/pycuda/compiler.py(源,选项,保持,nvcc,cache_dir,目标)153 cmdline,154 stdout=stdout.decode(“utf- 8", "替换"), --> 155 标准错误=stderr.decode("utf-8", "替换"), 156) 157

CompileError:/tmp/tmprygdeq52/kernel.cu 的 nvcc 编译失败 [命令: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):错误:此声明可能没有外部“C”链接

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

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

……………………

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

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

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

标签: pythonc++randomcudapycuda

解决方案


推荐阅读