我有一个内核,每次执行我都可以将结果写入输出数组。所有这些LowerValues[]
都将被初始化为一个幻数,以查看它是否未被触及。我不在乎 中的哪个值LowerValues[N]
,只要它是有效的。
kernel void HasLower( global int* Values, global int* LowerValues )
{
int ThisIndex = get_global_id(0);
int Max = get_global_size(0);
int ThisValue = Values[Index];
for ( int ThatIndex=ThisIndex+1; ThatIndex<Max; ThatIndex++ )
{
int ThatValue = Values[ThatIndex];
if ( ThatValue < ThisValue )
{
LowerValues[ThisValue] = ThatValue;
}
else if ( ThatValue > ThisValue )
{
LowerValues[ThatValue] = ThisValue;
}
}
}
我的多线程负责人说,使用原子函数来设置值,LowerValues[]
这样当两个线程写入同一内存位置时,内存就不会损坏。
但是....我想知道的是,我需要使用原子函数吗?我不在乎一个执行是否会覆盖另一个,但我不想要损坏的值。这是我需要关注opencl的事情吗?它依赖于驱动程序/设备吗?我找不到与此相关的任何信息,并且到目前为止,当我省略原子时,还没有遇到任何内存损坏。
我可以安全地玩它,但也许需要进行优化。