0
-----示例代碼-----------OpenACC的和高速緩存耕作
for (body1 = 0; body1 < NBODIES; body1 ++) {
for (body2=0; body2 < NBODIES; body2++) {
OUT[body1] += compute(body1, body2);
}
}
-----阻斷代碼------
for (body2 = 0; body2 < NBODIES; body2 += BLOCK) {
for (body1=0; body1 < NBODIES; body1 ++) {
for (body22=0; body22 < BLOCK; body22 ++) {
OUT[body1] += compute(body1, body2 + body22);
}
}
}
我插入OpenACC指令將代碼卸載到GPU。 但表現正在下降。 我搜索了一些論文,他們得出結論,原因是OpenACC不能利用GPU中的共享內存。但我認爲主要原因是耕作/阻塞阻止了平行。因爲耕耘會帶來數據依賴性。 如果OpenACC不提供或不鼓勵代碼耕種? 如果有一個解決方案或示例,耕耘技術可以改善OpenACC代碼。