【发布时间】:2011-09-19 14:04:12
【问题描述】:
对于我正在编写的教程,我正在寻找一个“现实”且简单的死锁示例,该示例是由于对 SIMT / SIMD 的无知而导致的。
我想出了这个sn-p,这似乎是一个很好的例子。
我们将不胜感激。
…
int x = threadID / 2;
if (threadID > x) {
value[threadID] = 42;
barrier();
}
else {
value2[threadID/2] = 13
barrier();
}
result = value[threadID/2] + value2[threadID/2];
我知道,它既不是正确的 CUDA C 也不是 OpenCL C。
【问题讨论】:
-
作为一个例子似乎太复杂了,而对于一个“现实”的例子来说却相当简单。我会在条件中只使用
get_local_id(0) > constant
,并将“业务代码”(赋值)替换为cmets/* do some stuff */
和/* do another stuff */
。不过,我认为 StackOverflow 不是讨论的最佳场所,它是提问和回答的场所。
标签: synchronization cuda parallel-processing opencl simd