Я использую API-интерфейсы CUDA для распараллеливания последовательного кода.Тем не менее, я застрял на эффективной реализации части моего кода.Пожалуйста, помогите мне с эффективной реализацией 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;
}
}
РЕДАКТИРОВАТЬ: я знаю, что второй if
по сути argmax, но первый if
, как обновление каждой позиции на основе значения функции.Я не могу понять, как реализовать оба в одном функторе.