我正在关注并行计算的udacity系列,该系列是在nvidia的网站上找到的,用于学习cuda,第一个程序是计算非常有效的结果。
这段代码只是计算数字的立方体,但程序产生的输出是:
#include <stdio.h>
__global__ void cube(float * d_out, float * d_in){
int idx = threadIdx.x;
float f = d_in[idx];
d_out[idx] = f * f * f;
}
int main(int argc, char ** argv) {
const int ARRAY_SIZE = 64;
const int ARRAY_BYTES = ARRAY_SIZE * sizeof(float);
// generate the input array on the host
float h_in[ARRAY_SIZE];
for (int i = 0; i < ARRAY_SIZE; i++) {
h_in[i] = float(i);
}
float h_out[ARRAY_SIZE];
// declare GPU memory pointers
float * d_in;
float * d_out;
// allocate GPU memory
cudaMalloc((void**) &d_in, ARRAY_BYTES);
cudaMalloc((void**) &d_out, ARRAY_BYTES);
// transfer the array to the GPU
cudaMemcpy(d_in, h_in, ARRAY_BYTES, cudaMemcpyHostToDevice);
// launch the kernel
cube<<<1, ARRAY_SIZE>>>(d_out, d_in);
// copy back the result array to the CPU
cudaMemcpy(h_out, d_out, ARRAY_BYTES, cudaMemcpyDeviceToHost);
// print out the resulting array
for (int i =0; i < ARRAY_SIZE; i++) {
printf("%f", h_out[i]);
printf(((i % 4) != 3) ? "\t" : "\n");
}
cudaFree(d_in);
cudaFree(d_out);
return 0;
}
0.000000 0.000000 0.000000 0.000000
-13140721427756115471762456576.000000 0.000000 0.000006 0.000000
0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000003 0.000000
0.000000 0.000000 -13140721427756115471762456576.000000 0.000000
0.000000 0.000000 0.000006 0.000000
0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000003 0.000000
0.000000 0.000000 -13140721427756115471762456576.000000 0.000000
0.000000 0.000000 0.000000 0.000000
0.000006 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000
0.000006 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000
-13141061438142882086217842688.000000 0.000000 0.000000 0.000000
uname -a
生成
Linux ubuntu14 3.19.0-43-generic #49~14.04.1-Ubuntu SMP Thu Dec 31 15:44:49 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
nvcc --version
产生
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2013 NVIDIA Corporation
Built on Wed_Jul_17_18:36:13_PDT_2013
Cuda compilation tools, release 5.5, V5.5.0
我从apt-get安装了这个,我正在运行gtx 980 ti
我注意到在nvidia cuda下载网站上有一件事,kernal 3.19没有明确提到在ubuntu 14.04上受支持,这可能只是一个内核问题吗?如果没有正确方向的任何点被欣赏。
答案 0 :(得分:4)
问题中的代码是完全正确的,但OP为他/她的GPU型号(带有GTX 980Ti的CUDA 5.5)安装了不受支持的CUDA版本。升级到支持的版本消除了这个问题。
[注意:这个答案已经从评论中汇总并添加为社区wiki条目,以便从CUDA标签的未答复列表中获取问题]