我按照此页面上的示例开始使用 CUDA 编程。它使用添加两个具有一百万个元素的数组来说明不同的执行配置。
我使用 Tesla P100(Pascal 架构)通过 Google Colaboratory 运行代码。但是文章使用的是K80。以下是nvprof关于在这两个 GPU 中执行相同代码的指标。
+--------------------+-------------------------+----------+
| GPU | Execution configuration | Time |
+--------------------+-------------------------+----------+
| K80 | <<<1, 256>>> | 2.7107ms |
+--------------------+-------------------------+----------+
| Tesla-P100(Pascal) | <<<1, 256>>> | 4.4293ms |
+--------------------+-------------------------+----------+
| K80 | <<<4096, 256>>> | 94.015us |
+--------------------+-------------------------+----------+
| Tesla-P100(Pascal) | <<<4096, 256>>> | 3.6076ms |
+--------------------+-------------------------+----------+
读完这篇文章后,我假设 Pascal 架构会胜过 K80。但如上所示,有两个观察结果:
- K80 在单块性能方面比 Pascal 更快
- 在 K80 上使用 4096 块而不是 1 块会产生显着的性能提升(~28 倍),但在 Pascal 的情况下看不到(~1.2 倍)
这是预期的吗?另外,观察 (2) 的解释是什么?
如果我在这里遗漏了什么,请告诉我。
感谢您的阅读。