我正在使用CUDA推力API来并行化串行代码。但是,我一直坚持有效执行部分代码。请为我提供以下代码的高效C ++ CUDA实现。
for(int i=0; i<n; i++)
{
double f_value = func(agents[i].position); //input is thrust::vector
if(f_value < agents[i].best_value)
{
agents[i].best_value = f_value;
agents[i].best_position = agents[i].position;
}
if(f_value < global_best_val)
{
global_best_val = f_value;
global_best_pos = agents[i].position;
}
}
EDIT:我知道第二个if
本质上是argmax,但是第一个if
喜欢根据函数值更新每个位置。我无法弄清楚如何在单个函子中同时实现两者。