2010年12月29日 星期三

找到原因了...,原因有點囧就是了。

那就是 Shady 的測試主程式中的此段程式:

    for(i = 32, j = 0; i > 0; i--, j += 128) {
        __dcbf(d + j);    /* 就是當中的 d+j,Shady 寫成 s+j 了。*/
    }

因為 Shady 的測試程式一開始就是為 memcpy 類型的函式撰寫的,
所以會配置二個記憶體空間,
一個為來源 s、一個為目的 d,
故一直以來 Shady 都如上面程式解說般,
目的記憶體 d 都未從 cache 中消除,
而 memset 類型的函式就一直使用 d 而未更正,
因此 d 一直堵塞住 cache 而 Shady 卻不自知。
現在更正之後,
16KB 記憶體空間的測試就正常了,
但 setmem 的成績還不怎麼理想,
因為它還有至少 30 tick 的空間可以改善,
所以 Shady 下次放出的組語函式有可能是 setmem 修正版或 memcpy 的組語版,
也有可能二者同時釋放,
但不久之後 Shady 會比較忙,
所以釋放的頻率會比現在更低上很多,
因此請大家多體諒。

沒有留言:

張貼留言