1. 程式人生 > 其它 >How BogoMips is calculated in linux kernel?

How BogoMips is calculated in linux kernel?

How BogoMips is calculated in linux kernel? - Stack Overflow

/*
 *                Standalone BogoMips program
 *
 * Based on code Linux kernel code in init/main.c and
 * include/linux/delay.h
 *
 * For more information on interpreting the results, see the BogoMIPS
 * Mini-HOWTO document.
 *
 * version: 1.3 
 *  author: Jeff Tranter ([email protected])
 
*/ #include <stdio.h> #include <time.h> #ifdef CLASSIC_BOGOMIPS /* the original code from the Linux kernel */ static __inline__ void delay(int loops) { __asm__(".align 2,0x90\n1:\tdecl %0\n\tjns 1b": :"a" (loops):"ax"); } #endif #ifdef QNX_BOGOMIPS /* version for QNX C compiler */ void delay(int
loops); #pragma aux delay = \ "l1:" \ "dec eax" \ "jns l1" \ parm nomemory [eax] modify exact nomemory [eax]; #endif #ifdef PORTABLE_BOGOMIPS /* portable version */ static void delay(int loops) { long i; for (i = loops; i >= 0 ; i--) ; } #endif int main(void
) { unsigned long loops_per_sec = 1; unsigned long ticks; printf("Calibrating delay loop.. "); fflush(stdout); while ((loops_per_sec <<= 1)) { ticks = clock(); delay(loops_per_sec); ticks = clock() - ticks; if (ticks >= CLOCKS_PER_SEC) { loops_per_sec = (loops_per_sec / ticks) * CLOCKS_PER_SEC; printf("ok - %lu.%02lu BogoMips\n", loops_per_sec/500000, (loops_per_sec/5000) % 100 ); return 0; } } printf("failed\n"); return -1; }
View Code

BogoMIPS - LinuxMIPS (linux-mips.org)

        .set    noreorder
  loop: bnez    $reg, loop
        subu    $reg, 1
        .set    reorder"

怪不得BogoMIPS上不去,100發射也沒用啊。:-) 所以我之前把人看扁了,說錯了,放厥詞了。

However, 就FritzChess而言,單核效能提升不明顯啊,所以我也不能算是大錯特錯。

.set noreorder prevents the assembler from juggling the code sequence to move useful instructions into the branch delay slot. 還明確規定不許亂序執行。