【发布时间】:2013-12-12 19:59:51
【问题描述】:
假设我必须处理 8 位图像像素。我想分配共享内存来存储这些像素值,并在我的内核中使用。
现在的问题是共享内存库中的内存是按 32 位分配的。将存储一个字符(8 位像素值),并按 24 个零的序列填充。这将导致巨大的记忆损失。
那么在共享内存中存储像素值、避免内存浪费的最佳方式是什么?
【问题讨论】:
-
每个银行块存储 4 个像素?
-
@Michael 你能给出一个示例代码来展示你的想法吗?你认为这不会导致银行冲突吗?
-
是的,这将导致银行冲突,除非您将每个线程处理 4 个像素。
-
@Michael 所以你的意思是我将使用一个有 4 个像素成员的结构?你能给出一行代码来证明你的想法并将其作为答案吗?
-
“一个字符 ... 将被存储 24 个零的序列” 不知道你在这里得到什么。这是不正确的。如果您定义
__shared__ char my_chars[32];,则将有一个由 32 个字符组成的序列,占用共享内存中的 8 个连续 32 位位置,没有填充。