gpt4 book ai didi

memory - 了解 CUDA 中的内存使用情况

转载 作者:行者123 更新时间:2023-12-02 03:56:27 26 4
gpt4 key购买 nike

我有一个 NVIDIA GTX 570 显卡,在 Ubuntu 10.10 系统 上运行 em>Cuda 4.0。

我知道为了性能,我们需要高效地访问内存,巧妙地使用设备上的registershared内存。

但是我不明白如何计算每个线程可用的寄存器数量,或者单个 block 可以使用多少共享内存以及其他针对特定内核配置的简单/重要计算。

我想通过一个明确的例子来理解这一点。顺便说一下,我目前正在尝试编写一个粒子代码,其中一个内核应该如下所示。

每个 block 都是一个1-D线程集合,每个网格是一个1-D block 的集合。

  • block 数:16384
  • 每个 block 的线程数:32(=> 总线程数 32*16384 = 524288)
  • 每个 线程 block 被赋予一个 32 x 32 共享内存的二维整数数组 一起工作。

在一个线程中,我想存储一些double 类型的数字。但我不确定我可以存储多少这样的 double 数字,而不会有任何寄存器溢出到本地内存(在设备上)。谁能告诉对于此内核配置,每个线程可以存储多少个 double 值?

我的每个 block 的共享内存的上述配置是否有效?

关于如何推断这些东西的示例计算将非常具有说明性和帮助性

这是关于我的 GTX 570 的信息:(使用来自 CUDA-SDK 的 deviceQuery)

[deviceQuery] starting...
./deviceQuery Starting...

CUDA Device Query (Runtime API) version (CUDART static linking)

Found 1 CUDA Capable device(s)

Device 0: "GeForce GTX 570"
CUDA Driver Version / Runtime Version 4.0 / 4.0
CUDA Capability Major/Minor version number: 2.0
Total amount of global memory: 1279 MBytes (1341325312 bytes)
(15) Multiprocessors x (32) CUDA Cores/MP: 480 CUDA Cores
GPU Clock Speed: 1.46 GHz
Memory Clock rate: 1900.00 Mhz
Memory Bus Width: 320-bit
L2 Cache Size: 655360 bytes
Max Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536,65535), 3D=(2048,2048,2048)
Max Layered Texture Size (dim) x layers 1D=(16384) x 2048, 2D=(16384,16384) x 2048
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 32768
Warp size: 32
Maximum number of threads per block: 1024
Maximum sizes of each dimension of a block: 1024 x 1024 x 64
Maximum sizes of each dimension of a grid: 65535 x 65535 x 65535
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent copy and execution: Yes with 1 copy engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Concurrent kernel execution: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support enabled: No
Device is using TCC driver mode: No
Device supports Unified Addressing (UVA): Yes
Device PCI Bus ID / PCI location ID: 2 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 4.0, CUDA Runtime Version = 4.0, NumDevs = 1, Device = GeForce GTX 570
[deviceQuery] test results...
PASSED

Press ENTER to exit...

最佳答案

所以,内核配置有点复杂。你应该使用 CUDA OCCUPANCY CALCULATOR .另一方面,你必须研究扭曲是如何工作的。一旦一个 block 被分配给一个 SM,它就会被进一步划分为 32 个线程单元,称为 warp。可以说,warp 是 SM 中的一个线程调度单元。对于给定的 block 大小和分配给每个 SM 的给定 block 数,我们可以计算驻留在 SM 中的扭曲数。在你的例子中,一个 warp 包含 32 个线程,所以如果你有一个包含 256 个线程的 block ,那么你有 8 个 warp。现在选择正确的内核设置取决于您的数据和操作,请记住您必须完全占用一个 SM,即:您必须在每个 SM 中获得完整的线程容量以及用于调度长延迟操作的最大 warp 数量.另一件重要的事情是不要超过每个 block 的最大线程数限制,在您的情况下为 1024。

关于memory - 了解 CUDA 中的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12380138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com