作爲更大代碼的一部分,我有一個CUDA RK4求解器,它可以並行地集成大量ODE(可以是1000+)。這個操作的一個步驟是計算'xdot',它對於每個方程(或數據元素)是不同的。到目前爲止,我有一個switch-case分支設置來計算內核中每個數據元素的值。所有不同的線程使用相同的3-6個數據元素來計算它們的輸出,但以不同的方式。例如,對於線程1,它可能是爲MISD類型操作避免CUDA線程發散
xdot = data [0] * data [0] + data [1];
而螺紋2也可以是,
XDOT = -2 *數據[0] +數據[2];
等等。 所以如果我有一百個數據元素,每個人的執行路徑是不同的。
在這種情況下,是否有任何方法可以避免/減少線索分歧懲罰? 每塊只運行一個線程會有幫助嗎?
謝謝!我會研究這一點。至於使用其他體系結構,這只是問題的一部分。其餘部分在本質上是高度平行的,並且使用CUDA可以很好地擴展。我試圖看看在這個特定部分是否有任何優化的機會。 –