cuda内存带宽计算
cuda memory bandwidth calculation
我有几个与cuda编程和GPU架构相关的问题想请教:
1.GivenGPU的显存带宽为144Gb/s,PCIe总线带宽为2.25Gb/s,传输一个100,000,000个double的数组需要多少毫秒到 GPU?
2.GivenGPU全局内存的大小是3Gb,你能处理的最大数组大小是多少?如果您必须处理更长的数组,您如何更改程序来完成此操作?
我不知道这个怎么算,谁能帮帮我,谢谢
PCIE 总线将成为这里的限制因素。只需将总数据传输大小(以字节为单位)除以速度(以 bytes/sec 为单位)即可得到持续时间(以秒为单位)。 2.25 Gb/s 看起来不像我所知道的 PCIE 的典型传输速度,但您的系统可能就是这种情况。现代系统通常可以达到 ~6GB/s(对于 PCIE Gen2 x16 link)或~11GB/s(对于 PCIE Gen3 x16 link)的速度。您可以使用 bandwidthTest
CUDA 示例代码测量您的传输速度(可能)。请注意,要在您的应用程序中获得峰值传输吞吐量,通常需要传输 to/from a pinned allocation(<-- 提示,单击并阅读)。
如果 GPU 总共有 3GB 内存,其中一些将被 CUDA 和其他系统开销用完。可以使用 nvidia-smi
实用程序或 cudaMemGetInfo()
runtime API call 来 估计 剩余的 "free" 数量。可用内存大约是可能的总数据存储量的 "upper bound"。您实际可以分配的金额将比这少一些。如果您确定或估计了您可以分配的数量,则将该数量(以字节为单位)除以您要存储的数据元素的大小。例如 double
数量占用 8 个字节的存储空间。 C 库 sizeof()
函数可用于发现这一点。将可用内存大小除以元素大小后,您将得到可以存储在该内存量中的元素总数。实际可行的数量会比估计的少一些。
我有几个与cuda编程和GPU架构相关的问题想请教:
1.GivenGPU的显存带宽为144Gb/s,PCIe总线带宽为2.25Gb/s,传输一个100,000,000个double的数组需要多少毫秒到 GPU?
2.GivenGPU全局内存的大小是3Gb,你能处理的最大数组大小是多少?如果您必须处理更长的数组,您如何更改程序来完成此操作?
我不知道这个怎么算,谁能帮帮我,谢谢
PCIE 总线将成为这里的限制因素。只需将总数据传输大小(以字节为单位)除以速度(以 bytes/sec 为单位)即可得到持续时间(以秒为单位)。 2.25 Gb/s 看起来不像我所知道的 PCIE 的典型传输速度,但您的系统可能就是这种情况。现代系统通常可以达到 ~6GB/s(对于 PCIE Gen2 x16 link)或~11GB/s(对于 PCIE Gen3 x16 link)的速度。您可以使用
bandwidthTest
CUDA 示例代码测量您的传输速度(可能)。请注意,要在您的应用程序中获得峰值传输吞吐量,通常需要传输 to/from a pinned allocation(<-- 提示,单击并阅读)。如果 GPU 总共有 3GB 内存,其中一些将被 CUDA 和其他系统开销用完。可以使用
nvidia-smi
实用程序或cudaMemGetInfo()
runtime API call 来 估计 剩余的 "free" 数量。可用内存大约是可能的总数据存储量的 "upper bound"。您实际可以分配的金额将比这少一些。如果您确定或估计了您可以分配的数量,则将该数量(以字节为单位)除以您要存储的数据元素的大小。例如double
数量占用 8 个字节的存储空间。 C 库sizeof()
函数可用于发现这一点。将可用内存大小除以元素大小后,您将得到可以存储在该内存量中的元素总数。实际可行的数量会比估计的少一些。