1
我想使用OpenMP和CUDA來實現重疊的內核執行。所有內核調用都是異步的,但我在啓動之間只有很少的代碼,因此各個OpenMP線程在嘗試啓動另一個內核時會阻塞,或者執行一個內存拷貝(在調用之後我並不總是有內存拷貝)異步內存複製不一定是解決方案)。我想要一種方式向OpenMP schedular發信號以切換到另一個OpenMP線程。這在OpenMP中可能嗎?OpenMP中其他線程/任務的收益
例子:
int main() {
#pragma omp parallel for
for(int i=0;i<10;i++) {
for(int j=0;j<10;j++) {
//call kernel here
// ----> Would like to signal to continue with other
// threads as next call will block
//copy data from kernel
}
}
}
感謝您的建議。然而,所提供的代碼是我正在做的這類工作的一個非常人爲的例子。實際的代碼不僅僅是爲了循環而堆疊的。你可否詳細說明切換?這僅僅在線程級別上(因此只限於OpenMP線程數),還是更像是「工作」級別。不確定是否讓我自己清楚:我對OpenMP的實現並不瞭解很多 – flipchart
我在操作系統線程級別討論,因爲您詢問了切換到另一個OpenMP線程和OpenMP線程(大概)是否對應本地操作系統線程。如果你現在說你有比線程更多的OpenMP任務,請看看OMP的'taskyield'和'taskwait'指令。然而,這種方法並不是最優的:收益可能會「迴歸」太快,並且您仍然在等待內核完成時浪費CPU時間,或者它可能需要很長時間,並且由於不快速提交新內核而浪費GPU時間足夠。 – Wyzard
太棒了!正是我在找的東西。我會試一試。謝謝你的努力! – flipchart