Как часть более крупного кода, у меня есть решатель CUDA RK4, который параллельно интегрирует большое количество ODE (может быть 1000+). Одним из шагов этой операции является вычисление «xdot», которое отличается для каждого уравнения (или элемента данных). На данный момент у меня есть настройка ветвления с переключением для вычисления значения для каждого элемента данных в ядре. Все разные потоки используют одни и те же 3-6 элементов данных для вычисления своих выходных данных, но по-разному. Например, для потока 1 это может быть
xdot = данные[0]*данные[0] + данные[1];
в то время как для потока 2 это может быть,
xdot = -2*данные[0] + данные[2];
и так далее. Итак, если у меня есть сто элементов данных, путь выполнения для каждого из них разный.
Есть ли способ избежать/уменьшить штраф за расхождение потоков в таком сценарии? Поможет ли запуск только одного потока на блок?