|    | 
     これは実に難しい問題です... 
 
ライダーさんが C 言語の心得があるかはわかりませんが、こんな感じのコードになっています。 
 
Memory Read 
------------------------------------------------------------ 
    DWORD *memory = new DWORD[MemSize / 4]; 
    DWORD LoopLimit = MemSize / 4; 
    DWORD count = 0; 
    for(;FlagLoop;){ 
        _asm{ 
            ALIGN 4 
            mov ebx,memory 
            mov ecx,LoopLimit 
            test ecx,ecx 
            jz exit 
iter: 
            mov eax, DWORD PTR [ebx+ecx*4-4] ;; U-1 
            dec ecx ;; V-1 
            jnz iter ;; U-2 
            add    count,1 
        } 
    } 
    delete [] memory; 
-------------------------------------------- 
 
大体ですけど。FlagLoop は外部のスレッドが一定時間経過後変更します。 
 
もっと良いコードがあるような気がしないでもないのですが... 
 
あと、Cache 測定は 
 
    _asm cld; 
    for(;FlagLoop;){ 
        _asm{ 
            ALIGN 8 
            add    count,1 
            mov    edi,memory    ;測定用配列ポインタ 
            mov    ecx,LoopLimit    ;転送回数 
            rep    stosd; 
        } 
    } 
 
って感じです。ASM がわからない方にはなんとことかサッパリかもしれませんが。 
 
結局のところどのようなコードで測定するかが非常に重要になってくるわけです。ただ、AMD の CPU は TwinBank にしても CPU 自体は DDR なので DDR266 とそれだけでマッチするわけで、オンボードビデオとかやらない場合はあんまり効果はないのかも知れません...(当然未確認発言です) 
 
他のベンチも色々試してみて結果を教えていただけると大変参考になります。 
 | 
     
    
   |