首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在CUDA内核中,如何在“本地线程内存”中存储数组?

在CUDA内核中,如何在“本地线程内存”中存储数组?
EN

Stack Overflow用户
提问于 2012-04-24 19:36:38
回答 3查看 39.7K关注 0票数 31

我正在尝试用CUDA开发一个小程序,但由于它很慢,我做了一些测试并搜索了一下。我发现,虽然单变量默认存储在本地线程内存中,但数组通常不是,我想这就是为什么它需要这么多时间来执行的原因。现在我在想:既然本地线程内存至少应该是16KB,而且我的数组就像52个字符一样长,有没有办法(语法请:)将它们存储在本地内存中?

它不应该是这样的吗:

代码语言:javascript
复制
__global__ my_kernel(int a)
{
  __local__ unsigned char p[50];
}
EN

回答 3

Stack Overflow用户

发布于 2012-04-24 19:47:08

你所需要的就是:

代码语言:javascript
复制
__global__ my_kernel(int a)
{
    unsigned char p[50];
    ........
}

如果需要的话,编译器会自动将其溢出到线程本地内存。但请注意,本地内存存储在GPU之外的SDRAM中,其速度与全局内存一样慢。因此,如果你希望这样做可以改善工作表现,你可能会感到失望……

票数 11
EN

Stack Overflow用户

发布于 2012-04-24 21:00:22

您混淆了本地和寄存器内存空间。

单变量和恒定大小的数组自动保存在芯片的寄存器空间中,几乎没有读写成本。

如果您超过了每个多处理器的寄存器数量,它们将存储在本地内存中。

本地内存驻留在全局内存空间中,对于读取和写入操作具有相同的慢速带宽。

代码语言:javascript
复制
#DEFINE P_SIZE = 50

__global__ void kernel()
{
    unsigned char p[P_SIZE];
}
票数 -1
EN

Stack Overflow用户

发布于 2012-04-24 21:31:25

您要查找的关键字是__shared__。共享内存空间无法容纳大型数组,但编译器应将共享内存用于小的固定大小的数组,如本例所示。您可以使用__shared__关键字来确保发生这种情况。如果超过块的最大共享内存量,您将看到编译时错误。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10297067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档