gpt4 book ai didi

arrays - CUDA:固定大小的数组存储在哪个内存空间?

转载 作者:行者123 更新时间:2023-12-02 04:40:23 26 4
gpt4 key购买 nike

当在内核中设置固定大小的数组时,如:

int my_array[100];

数组最终位于哪个内存空间?

特别是,我想知道这样的数组是否可以存储在 >= 2.0 设备上的寄存器文件或共享内存中,如果可以,要求是什么。

最佳答案

对于费米(可能还有更早的架构),要将数组存储在寄存器文件中,必须满足以下条件:

  1. 数组仅使用常量进行索引
  2. 有可用的寄存器
  3. 希望编译器也能进行一些分析以确定对整体性能的影响

(1) 的原因是寄存器索引直接在 SASS 指令内编码。无法间接寻址寄存器。

限制(2)寄存器数量的主要因素是:

  • SASS 指令仅包含 6 位用于寄存器索引,这将内核中可以使用的寄存器数量限制为 64 个。实际数量是 63,因此保留了一个用于某些用途。
  • SM 有一个寄存器 block ,由所有同时运行的线程共享。
  • 还需要寄存器来保存变量,因此编译器必须平衡寄存器的使用以获得最佳整体性能。

(1) 的一个潜在解决方法是循环展开。如果循环使用循环计数器作为数组的索引,则展开循环(使用 #pragma unroll 或手动)会导致数组索引变为常量,因为现在每个数组都有一个单独的 SASS 指令访问。

部分基于 NVIDIA 演示:Local Memory and Register Spilling 。该文档还详细介绍了变量和数组的位置如何影响性能。

关于arrays - CUDA:固定大小的数组存储在哪个内存空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10952433/

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