【发布时间】:2022-02-19 03:33:50
【问题描述】:
使用this question 作为基础,我实现了一个具有全局状态的伪随机数生成器:
__global uint global_random_state;
void set_random_seed(uint seed){
global_random_state = seed;
}
uint get_random_number(uint range){
uint seed = global_random_state + get_global_id(0);
uint t = seed ^ (seed << 11);
uint result = seed ^ (seed >> 19) ^ (t ^ (t >> 8));
global_random_state = result; /* race condition? */
return result % range;
}
由于这些函数将在多个线程中使用,因此在写入 global_random_state 时会出现竞争条件。
这实际上可能会帮助系统变得更加不可预测,所以这似乎是一件好事,但我想知道这是否有任何可能不会立即浮出水面的后果。 GPU 内部是否有任何副作用,可能会在稍后运行内核时导致问题?
【问题讨论】:
标签: random opencl race-condition