for (k = 0; k < max; k++)
A[B[k]] *= C[k];
这段代码中A数组是一段包含m个元素的数组,B数组是一段包含max(max远大于m)个元素的数组,C同样是一段包含max个元素的数组。且B数组中所有元素的值都取在0-m之间。
因为这段代码包含着数据依赖性问题,所以不能直接在CUDA上并行,否则取值会有冲突与覆盖的情况。
由于需要用CUDA并行优化某个程序,类似这样的代码卡在其中,使得并行化受阻,目前只能通过将这段代码转移到CPU执行,执行完后再将结果转回GPU,由于来回传输数据,所以影响了性能。
那么问题来了,可以用什么方式让这段代码实现并行化,希望大家能给小生一些提示与帮助,在下不胜感激!