作为更大代码的一部分,我有一个 CUDA RK4 求解器,它并行集成了大量 ODE(可以是 1000+)。此操作的一个步骤是计算“xdot”,每个方程(或数据元素)都不同。到目前为止,我有一个 switch-case 分支设置来计算内核中每个数据元素的值。所有不同的线程都使用相同的 3-6 个数据元素来计算它们的输出,但方式不同。例如,对于线程 1,它可能是
xdot = 数据[0]*数据[0] + 数据[1];
而对于线程 2 可能是,
xdot = -2*数据[0] + 数据[2];
等等。因此,如果我有一百个数据元素,每个数据元素的执行路径都不同。
在这种情况下,有什么方法可以避免/减少线程发散惩罚?每个块只运行一个线程会有帮助吗?