我尝试使用cupy在GPU上执行任务-以下是代码:
# on CPU
x_cpu = np.array([1, 2, 3])
%timeit l2_cpu = np.linalg.norm(x_cpu)
# on GPU
x_gpu = cp.array([1, 2, 3])
%timeit l2_gpu = cp.linalg.norm(x_gpu)
以下是输出:
4 µs ± 18 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
48.7 µs ± 86.4 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each) ```
我的问题是——在我的情况下,为什么丘比的工作速度比努比慢?我原以为丘比会比努比工作得快。我做错了什么,也许有人可以建议我如何修复它
> nvidia-smi
Wed Sep 15 22:11:36 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.57.02 Driver Version: 470.57.02 CUDA Version: 11.4 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:01:00.0 Off | N/A |
| 41% 33C P8 1W / 260W | 184MiB / 11019MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 627367 C ...conda3/envs/t1/bin/python 181MiB |
+-----------------------------------------------------------------------------+
此外,我使用puthon3.8,并安装了:
我还使用了1023272项的数组-结果如下:
此外,我使用nvidia smi检查了GPU的利用率,我可以确认——GPU参与了计算
您正在通过cupy测试测量4-8 GB/s的数据复制性能。范数是标准化的,所以它很可能是一个简短的缩减,以找到矩阵中的最大元素,并将所有元素除以该值。这使得通过pcie传输的每个字节的计算量很小
如果您真的想比较计算性能,可以执行矩阵乘法之类的操作,并使用足够大的矩阵大小,如2048x2048 x 2048x2048
在您当前的测试中,numpy受到ram带宽的限制,而cupy受到pcie带宽的限制。您可以为cuda打开一个分析器,查看内核的精确计算时间并使用它(应该已经比cpu快了)
在第一个测试中,只有3个元素,所以第一个测试numpy结果可能是python的函数调用开销。然后,cupy结果必须是内核启动开销和python函数开销,以及调用数据复制函数的额外开销。即使只是在cuda中启动内核,空内核函数也要花费10-20微秒
相关问题 更多 >
编程相关推荐