我已经做了很多工作但我不确定一切是否顺利。
nvidia-smi
Sun May 21 11:29:57 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.39 Driver Version: 375.39 |
|-------------------------------+----------------------+----------------------+
| 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 GT 730 Off | 0000:01:00.0 N/A | N/A |
| 40% 39C P8 N/A / N/A | 295MiB / 1984MiB | N/A Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 Not Supported |
+-----------------------------------------------------------------------------+
然后
nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Tue_Aug_11_14:27:32_CDT_2015
Cuda compilation tools, release 7.5, V7.5.17
最后
which nvcc
/usr/bin/nvcc
但是我的安装目录是
ldconfig -p | grep cuda
libnvrtc.so.8.0 (libc6,x86-64) => /usr/local/cuda-8.0/targets/x86_64-linux/lib/libnvrtc.so.8.0
libnvrtc.so (libc6,x86-64) => /usr/local/cuda-8.0/targets/x86_64-linux/lib/libnvrtc.so
libnvrtc-builtins.so.8.0 (libc6,x86-64) => /usr/local/cuda-8.0/targets/x86_64-linux/lib/libnvrtc-builtins.so.8.0
libnvrtc-builtins.so (libc6,x86-64) => /usr/local/cuda-8.0/targets/x86_64-linux/lib/libnvrtc-builtins.so
这样可以吗?为什么 nvcc 指向其他目录?
答案1
这个可以吗?
是的,一切都正如预期的那样。
为什么 nvcc 指向其他目录?
nvcc
位于可执行文件的典型文件夹中,而其他的是 CUDA“驱动程序”。这主要是 Nvidia 的决定,但它是有道理的。
答案2
编译并运行 CUDA hello world
对于“某些东西是否安装正确”的问题,最好的答案往往是:“试着将它用于任何你想用它做的事情,看看它是否会爆炸,以及它是否像你期望的那样快”。
如果“爆炸”部分失败,您可能想尝试让 hello world 工作:
主程序库
#include <cassert>
#define N 3
__global__ void inc(int *a) {
int i = blockIdx.x;
if (i<N) {
a[i]++;
}
}
int main() {
int ha[N], *da;
cudaMalloc((void **)&da, N*sizeof(int));
for (int i = 0; i<N; ++i) {
ha[i] = i;
}
cudaMemcpy(da, ha, N*sizeof(int), cudaMemcpyHostToDevice);
inc<<<N, 1>>>(da);
cudaMemcpy(ha, da, N*sizeof(int), cudaMemcpyDeviceToHost);
for (int i = 0; i < N; ++i) {
assert(ha[i] == i + 1);
}
cudaFree(da);
return 0;
}
并编译并运行:
nvcc -o main.out main.cu
./main.out
并且断言在我正常工作的设置上没有失败。
如果失败了,请查看如何安装问题:
运行一些 CPU 与 GPU 基准测试
一个更有趣的性能检查是采用一个经过良好优化的程序,它只执行一次GPU 加速算法可以是 CPU 也可以是 GPU,然后同时运行两者以查看 GPU 版本是否更快。
TODO 在这里提出并测试一个,例如矩阵乘法岩浆 (GPU)和 LAPACKE (CPU)。它们可能公开相同的 C API,因此可以轻松比较结果。
然后,您还可以nvidia-settings
在运行时打开以查看 GPU 是否实际上仅在 GPU 版本中使用:如何检查 Ubuntu 是否正在使用我的 NVIDIA 显卡?