A. [踩坑]编译CUDA算子时NVCC报错的解决
在使用BasicSR时需要编译CUDA算子,然而出现报错
查了很多资料,首先是团清basicsr的issue上面有人遇到 同样的问题
他的问题首或简是gcc版本跟torch版本不匹配,但是我看了一下我的gcc版本7.3.1应该是匹配的,试了一下安装7.3.0同样报错。
然后寻找其他的issue,直到看到pytorch有一个issue也是 同样的问题 ,楼里有个人说cuda10.1初始版本10.1.105有问题,需者裤要升级,所以升级了一下cuda版本到10.1.243,问题解决
B. 请教有没有在linux使用cuda的朋友
在安装cuda前,你必须检测自己的显卡是否支持cuda,如何检查自己的显卡型号:
lspci | grep "NVIDIA"查看是否英伟达显卡,或者lspci | grep "VGA"直接查看显卡信息;
在英伟达官方可以查看支持cuda显卡的型号,顺便记得在官方下载你所需的cuda版本。我选择的是最新版的CUDA-7
我的系统版本centos6.5(finall),我下载的是.run文件。
文件下载成功,转到下载目录,首先需要修改.run文件的rwx权限:
chmod 755 cuda_7.0.28_linux.run
还有一些前提工作需要完善
1:确保文本界面:vi /etc/inittab 把最下面一行的:5:改成:3: 然后用esc,:wq保存并且退出。(如果你没有找到,可以INIT3直接进入文本界面)
(2.3.4这种操作是因为台式机双显卡的缘故貌似) 2:拉黑nouveau. 执行以下步骤:vi /etc/modprobe.d/blacklist.conf 在此文件后面添加:blacklist nouveau
3:使用 dracut重新建立 initramfs image file: mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname-r).img.bak
4:重新建立 the initramfs file: dracut -v /boot/initramfs-$(uname -r).img $(uname -r)
(如果不拉黑nouveau会出现两种问题,我在笔记本上出现的问题是安装完成后无法进入图形界面,我在服务器上出现的问题是无法安装,当然,可能还有其他问题,但是我没有遇到#24)
reboot重新启动电脑,然后就可以执行之前的.run 文件了
安装成功以后,你还需要配置nvcc:find -name "nvcc" (找到nvcc所在位置);vi /root/.bashrc(编辑.bashrc文件) ;加入alias nvcc="你查询到的nvcc所在位置";export nvcc;
至此,你就可以使用nvcc编译你的.cu文件了!::nvcc –cuda xxxxx.cu
C. linux中哪些工具可以测试cuda程序,监控gpu内存性能
nvcc 编译代码
nvcc -o squareSum squareSum.cu运行结果:
CUDA initialized.
(GPU) sum:29909398 time:787124792
(CPU) sum:29909398 time:10000
从执行的结胡袭磨果可以看出, GPU 中运行的程序居然要比 CPU 中的消耗的时钟周期还要多得多。这是有原因的。
因为程序之中并没有使用 CUDA 并行执行的优势。
这里分析一下 GPU 运行的性能。
此 GPU 消耗的时钟周期: 787124792 cycles
GeForce G 103M 的 clockRate: 1.6 GHz
所以可以计算出 GPU 上运行时间是: 时钟周期 / clockRate = 0.49195 s
1 M 个 int 型数据有 4M Byte 的数据量,实际使用的 GPU 内存带宽是:数据量 / 运行时间 = 8.13 MB/s
可见这个程序没有很好的发挥 GPU 的性能,使用的内存带宽很小。
没有有效利用 GPU 性能的原因???
在 CUDA 中,一般的数据复制到的显卡内存的部份,称为 global memory。这些内存是没有 cache 的,而且,存取 global memory 所需要的时间(即 latency)是非常长的,通常是数百个 cycles。
由于我们的程序只有一个 thread,所以每次它读取 global memory 的内容,就要等到实际读取到数据、累加到 sum 之后,才能进行下一步。这就是为什么它的表现会这么的差。实际上 GPU 一直在等待上一个数据运行的结束,然后再拷贝一个内存数据,所以使用的时钟周期自然就长了。
由于 global memory 没有 cache,所以要避开巨大的 latency 的方法,就是要利用大量的 threads。假设现在有大量裤斗的 threads 在同时执行,那么当一个 thread 读取内存,开始等待结果的时候,GPU 就可以立刻切换到下一个 thread,并读取下一个内禅扰存位置。因此,理想上当 thread 的数目够多的时候,就可以完全把 global memory 的巨大 latency 隐藏起来了。
D. CUDA与OPENMP连用时,怎么编译
但是在CUDA模板中没有开启openmp支持选项,之前参考了“在 -Xcomplier 后面增加了 "/openmp"选项。”无哗橡雀效果,我乱早的实际语句为(去掉路径)nvcc.exe" -G -gencode=arch=compute_10,code=\"sm_10,compute_10\" -gencode=arch=compute_20,code=\"sm_20,compute_20\" --machine 32 -ccbin "D:\Program Files\如桥Microsoft Visual Studio 9.0\VC\bin" -D_NEXUS_DEBUG -g -Xcompiler "/EHsc /W3 /nologo /Od /Zi /MTd /openmp" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\\include" -maxrregcount=0 --compile -o "Debug/cudaOpenMP.cu.obj" cudaOpenMP.cu
E. cuda helloworld 没有GPU显示,问题出在哪里哪位大神可以告诉我
如果你是第一次使用CUDA,在Linux下可以使用下面的命令来检查CUDA编译器是否安装正确:
$ which nvcc
一般,该指令输出为:
/usr/local/cuda/bin/nvcc
另外,你可能还需要检查下你机器上的GPU型号,可以使用给下面的命令查询:
$ ls -l /dev/nv*
可能的输出为:
crw-rw-rw- 1 root root 195, 0 Jul 3 13:44 /dev/nvidia0
crw-rw-rw- 1 root root 195, 1 Jul 3 13:44 /dev/nvidia1
crw-rw-rw- 1 root root 195, 255 Jul 3 13:44 /dev/nvidiactl
crw-rw---- 1 root root 10, 144 Jul 3 13:39 /dev/nvram
以上输出显示这里有两个GPU显卡安装在机器上。
写一段CUDA程序的基本过程为:
创建源文件,以”.cu”为后缀。
用nvcc编译程序。
命令行运行。
F. 在linux下怎么运行cuda的.cu文件
举个例子:add.cu
编译:nvcc -o add add.cu
运行:./add
G. 编译cuda并运行cuda程序的命令是
在什么操作系统下啊。。。你问的是不是编译cu代码啊,因为CUDA不是开源的。
如果编译自己的代码,是nvcc
运行和执行其它可执行程序一样啊