Cuda hello“U world.cu编译但打印错误”;“你好”;
我为CUDA找到了以下hello world程序:Cuda hello“U world.cu编译但打印错误”;“你好”;,cuda,Cuda,我为CUDA找到了以下hello world程序: #include <stdio.h> #define cudaCheckErrors(msg) \ do { \ cudaError_t __err = cudaGetLastError(); \ if (__err != cudaSuccess) { \ fprintf(stderr, "Fatal error: %s (%s at %s:%d)\n", \
#include <stdio.h>
#define cudaCheckErrors(msg) \
do { \
cudaError_t __err = cudaGetLastError(); \
if (__err != cudaSuccess) { \
fprintf(stderr, "Fatal error: %s (%s at %s:%d)\n", \
msg, cudaGetErrorString(__err), \
__FILE__, __LINE__); \
fprintf(stderr, "*** FAILED - ABORTING\n"); \
exit(1); \
} \
} while (0)
const int N = 16;
const int blocksize = 16;
__global__
void hello(char *a, int *b)
{
a[threadIdx.x] += b[threadIdx.x];
}
int main()
{
char a[N] = "Hello \0\0\0\0\0\0";
int b[N] = {15, 10, 6, 0, -11, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
char *ad;
int *bd;
const int csize = N*sizeof(char);
const int isize = N*sizeof(int);
printf("%s", a);
cudaMalloc( (void**)&ad, csize );
cudaMalloc( (void**)&bd, isize );
cudaCheckErrors("cudaMalloc fail");
cudaMemcpy( ad, a, csize, cudaMemcpyHostToDevice );
cudaMemcpy( bd, b, isize, cudaMemcpyHostToDevice );
cudaCheckErrors("cudaMemcpy H2D fail");
dim3 dimBlock( blocksize, 1 );
dim3 dimGrid( 1, 1 );
hello<<<dimGrid, dimBlock>>>(ad, bd);
cudaCheckErrors("Kernel fail");
cudaMemcpy( a, ad, csize, cudaMemcpyDeviceToHost );
cudaCheckErrors("cudaMemcpy D2H/Kernel fail");
cudaFree( ad );
cudaFree( bd );
printf("%s\n", a);
return EXIT_SUCCESS;
}
我是CUDA新手,我的问题是:1) 引擎盖下面发生了什么事?
2) 我怎样才能修好它
我运行的是Ubuntu 13.04、x86_64、Cuda 5.5,没有root访问权限。
英伟达smi的上部输出为:
+------------------------------------------------------+
| NVIDIA-SMI 337.19 Driver Version: 337.19 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX TIT... Off | 0000:05:00.0 N/A | N/A |
| 26% 37C N/A N/A / N/A | 53MiB / 6143MiB | N/A Default |
+-------------------------------+----------------------+----------------------+
当我运行设备查询时,我得到:
../../bin/x86_64/linux/release/deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
cudaGetDeviceCount returned 30
-> unknown error
Result = FAIL
../../bin/x86_64/linux/release/deviceQueryDrv Starting...
CUDA Device Query (Driver API) statically linked version
cuInit(0) returned 999
-> CUDA_ERROR_UNKNOWN
Result = FAIL
当我运行deviceQueryDrv
时,我得到:
../../bin/x86_64/linux/release/deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
cudaGetDeviceCount returned 30
-> unknown error
Result = FAIL
../../bin/x86_64/linux/release/deviceQueryDrv Starting...
CUDA Device Query (Driver API) statically linked version
cuInit(0) returned 999
-> CUDA_ERROR_UNKNOWN
Result = FAIL
当我跑步时:
#include <cublas_v2.h>
#include <cstdio>
int main()
{
int res;
cublasHandle_t handle;
res = cublasCreate(&handle);
switch(res) {
case CUBLAS_STATUS_SUCCESS:
printf("the initialization succeeded\n");
break;
case CUBLAS_STATUS_NOT_INITIALIZED:
printf("the CUDA Runtime initialization failed\n");
break;
case CUBLAS_STATUS_ALLOC_FAILED:
printf("the resources could not be allocated\n");
break;
}
return 0;
}
#包括
#包括
int main()
{
国际关系;
立方手柄;
res=cublasCreate(&handle);
开关(res){
案例CUBLAS_状态_成功:
printf(“初始化成功\n”);
打破
案例CUBLAS_状态_未初始化:
printf(“CUDA运行时初始化失败\n”);
打破
案例CUBLAS_状态_分配_失败:
printf(“无法分配资源”);
打破
}
返回0;
}
我得到
CUDA运行时初始化失败
我刚才遇到了一个与您完全相同的问题。运行示例返回“未知错误”并打印“Hello Hello”,而cublasCreate返回CUBLAS_STATUS_NOT_INITIALIZED。
我在这里找到了答案:
如果安装了支持CUDA的设备和CUDA驱动程序,但deviceQuery报告没有支持CUDA的设备,这可能意味着/dev/nvidia*文件丢失或具有错误的权限
事实上,我的/dev/nvidia*
文件是root所有的。
我只是跑了
chown user.user /dev/nvidia*
(其中user
是我的本地用户)所有错误都消失了
编辑:后来我在另一台机器上遇到了类似的问题,这个解决方案不起作用,因为
/dev/nvidia
中的一个设备丢失了。我们所做的工作就是以sudo
的形式执行一次示例代码。在那之后,一个额外的设备出现在/dev/nvidia*
中,示例代码在没有sudo的情况下开始工作,程序没有任何问题。问题在于您的机器设置,不幸的是,这些简单的示例没有。使用cuda memcheck
运行您的代码,您会发现您的机器出了问题。运行nvidia smi的结果是什么?你使用的是windows还是linux?安装了什么CUDA版本?使用CUDA memcheck
运行代码的结果是什么,即CUDA memcheck./mycode>?安装了什么CUDA版本?安装了什么CUDA版本?在内核调用之后添加。您使用什么命令行编译代码?运行deviceQuery
示例代码时会发生什么情况?@RobertCrovella您知道一个简单的程序,它带有正确的cuda错误检查,我可以编译并运行吗?如果您可以指向url,最好是添加了错误检查的相同程序。以相同的方式编译/运行。您的linux发行版是32位还是64位?在我的情况下,不需要以root身份拥有所有内容我有:zangetsu@ares~$ls-la/dev/nvidia*crw-rw-1根根目录239,02。6月20日6月20日/dev/nvidia uvm crw rw rw-1根根239,12。6月20日06/dev/nvidia uvm工具crw rw----1根视频195,02。6月19日35/dev/nvidia0 crw rw----1根视频195255 2。6月19日35/dev/nvidiactl