【发布时间】:2013-05-19 11:38:18
【问题描述】:
我有一个提供给内核的输入数组。每个线程处理数组的一个值,并根据规则更改该值或根本不更改它。
我想很快找出输入内存中是否有任何变化,如果有,我想很快找到发生变化的位置(输入数组的索引)。
我想使用类似位数组的东西。位的总数将等于线程的总数。每个线程只会操作一个位,因此最初这些位将设置为假,如果一个线程更改相应的输入值,该位将变为真。
为了更清楚,假设我们有一个名为A的输入数组
1 9 3 9 4 5
位数组如下
0 0 0 0 0 0
所以我们将有 6 个线程处理输入数组。假设最终的输入数组是
1 9 3 9 2 5
所以最终的位数组将是:
0 0 0 0 1 0
我不想使用 bool 的数组,因为每个值都将占用 1 个字节的内存,因为我只想使用位来工作。
有没有可能实现这样的目标?
我想创建一个char 数组,其中数组的每个值都有 8 位。但是,如果两个线程想要更改数组第一个字符的不同位怎么办?即使位内的更改将在不同的位置,他们也必须以原子方式执行操作。所以使用原子操作可能会破坏并行性,在这种情况下不需要使用原子操作,它没有任何意义,但由于使用字符数组而不是更专业的东西的限制,必须使用像std::bitset
提前谢谢你。
【问题讨论】:
-
这个问题和你的很像:stackoverflow.com/questions/11042816/…
-
谢谢我阅读了问题和答案,但是它没有说明我如何使用位数组或者在 CUDA 中是否有类似
std::bitset的内容。使用bool的数组对我来说不是一个好主意,因为我不能在 GPU 中使用太多内存。