库达内存带宽计算
cuda memory bandwidth calculation
我有几个与cuda编程和GPU架构相关的问题要问:
1.假设GPU的内存带宽为144 Gb/s,PCIe总线带宽为2.25 Gb/s,那么将具有100,000,000双精度的阵列传输到GPU需要多少毫秒?
2.假设 GPU 全局内存的大小为 3Gb,您可以处理的最大数组大小是多少? 如果必须处理更长的数组,如何更改程序来实现此目的?
我不知道如何计算这个,谁可以帮助我,谢谢
-
PCIE 总线将是这里的限制因素。 只需将总数据传输大小(以字节为单位)除以速度(以字节/秒为单位)即可获得持续时间(以秒为单位)。 据我所知,2.25 Gb/s 看起来不像 PCIE 的典型传输速度,但在您的系统上可能是这种情况。 现代系统通常可以达到~6GB/s(对于PCIE Gen2 x16链路)或~11GB/s(对于PCIE Gen3 x16链路)的速度。 您可以使用
bandwidthTest
CUDA 示例代码测量传输速度(可能)。 请注意,若要在应用程序中获取峰值传输吞吐量,通常需要在固定分配之间传输(<- 提示、单击并读取)。 -
如果 GPU 总共有 3GB 内存,其中一些将被 CUDA 和其他系统开销用完。剩余的"可用"金额可以使用实用程序或
cudaMemGetInfo()
运行时 API 调用来估算nvidia-smi
。 可用内存大约是可能的总数据存储的"上限"。 您实际可以分配的金额将比这少一些金额。 如果确定或估计可以分配的数量,请将此数量(以字节为单位)除以要存储的数据元素的大小。 例如,double
数量占用 8 字节的存储空间。 C 库sizeof()
函数可用于发现这一点。 将可用内存大小除以元素大小后,您将得到可以存储在该内存量的元素总数。 实际可行的数额将略低于估计数给出的数额。
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- 类似枚举的计算常量
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 计算缩放多边形的比例,得到给定的多边形面积
- 库达内存带宽计算
- 怪异的结果从NVPROF输出计算内存带宽
- 减少 GPU 和 CPU 之间的带宽(先发送原始数据或预先计算)