我正在嘗試通過使用優化一些C ++(RK4)__builtin_prefetch我不知道如何預取整個結構。我不知道const void *addr讀了多少書。我希望有下一個值from和to加載。for (int i = from; i < to; i++){ double kv = myLinks[i].kv; particle* from = con[i].Pfrom; particle* to = con[i].Pto; //Prefetch values at con[i++].Pfrom & con[i].Pto; double pos = to->px- from->px; double delta = from->r + to->r - pos; double k1 = axcel(kv, delta, from->mass) * dt; //axcel is an inlined function double k2 = axcel(kv, delta + 0.5 * k1, from->mass) * dt; double k3 = axcel(kv, delta + 0.5 * k2, from->mass) * dt; double k4 = axcel(kv, delta + k3, from->mass) * dt; #define likely(x) __builtin_expect((x),1) if (likely(!from->bc)) { from->x += (( k1 + 2 * k2 + 2 * k3 + k4) / 6); }}鏈接:http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/
2 回答

慕村9548890
TA貢獻1884條經驗 獲得超4個贊
它讀取高速緩存行。高速緩存行的大小可能有所不同,但是在現代CPU上最有可能為64字節。如果您需要讀取多條緩存行,請簽出prefetch_range
- 2 回答
- 0 關注
- 504 瀏覽
添加回答
舉報
0/150
提交
取消