cuda - 在这个添加两个数组的程序中,K80 与 Pascal 性能差异的原因是什么?
问题描述
我按照此页面上的示例开始使用 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) 的解释是什么?
如果我在这里遗漏了什么,请告诉我。
感谢您的阅读。
解决方案
推荐阅读
- tensorflow - Tensorflow 分词器:要保留的最大单词数
- c# - 实体类型“AlarmReciever”需要定义主键
- python - BeautifulSoup 的 find 方法返回 None 而不是链接
- html - 带有 toggleClass 的 Cookie 存储
- c++ - 向量定义是什么意思?
- excel - excel vba在列表视图上排序int值
- reactjs - Reactjs 使用默认导出功能动态导入 js 文件
- python - 如何对给定的数据集执行以下转换?
- azure-databricks - SparkR 中的 StringInderxer 和一种热编码
- c# - 使用 Url.Link 在 Web API 中生成链接