From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <13426df10806021455o21bcda47s65e51fb2e194a797@mail.gmail.com> Date: Mon, 2 Jun 2008 14:55:42 -0700 From: "ron minnich" To: "Fans of the OS Plan 9 from Bell Labs" <9fans@cse.psu.edu> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_19938_23825663.1212443742111" Subject: [9fans] when is a branch not a branch? Topicbox-Message-UUID: b237c68c-ead3-11e9-9d60-3106f5b1d025 ------=_Part_19938_23825663.1212443742111 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Here's an interesting thing I'm learning about the kind of optimizations that might be in the EU of the newer machines. This started out as a pretty simple 'measure the branch penalty' exercise. Given this program: int b(int i){ return i+1; } main(){ int i; for(i = 0; i < 1000000000; i = b(i)); if (i != 1000000000) printf("Fix me\n"); } The assembly code on newer micros looks like this: .file "sa.c" .text .globl b .type b, @function b: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax addl $1, %eax popl %ebp ret .size b, .-b .section .rodata .LC0: .string "Fix me" .text .globl main .type main, @function main: leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) pushl %ebp movl %esp, %ebp pushl %ecx subl $20, %esp movl $0, -8(%ebp) jmp .L4 .L5: movl -8(%ebp), %eax movl %eax, (%esp) call b movl %eax, -8(%ebp) .L4: cmpl $999999999, -8(%ebp) jle .L5 cmpl $1000000000, -8(%ebp) je .L10 movl $.LC0, (%esp) call puts .L10: addl $20, %esp popl %ecx popl %ebp leal -4(%ecx), %esp ret .size main, .-main .ident "GCC: (GNU) 4.1.2 20070925 (Red Hat 4.1.2-27)" .section .note.GNU-stack,"",@progbits OK, let's modify b: a little as follows; b: #if JMP > 0 jmp bb #if JMP > 1 call b #if JMP > 2 call b #if JMP > 3 call b #endif #endif #endif #endif bb: So, simple: if JMP is 0, no change, if JMP is 1, we do (in essence) br .+2, if JMP is 2, we do br .+7, etc. now I time the run 10 times (I can run longer but it seems good enough to establish behavior). I should get some rough idea of the cost of the branch. Attachment 1 shows this cpu running in 32-bit mode: processor : 0 vendor_id : GenuineIntel cpu family : 15 model : 3 model name : Intel(R) Pentium(R) 4 CPU 3.40GHz stepping : 4 cpu MHz : 3415.468 cache size : 1024 KB the short form: the penalty for the branch is zero. As I say, I can run it until I get getter statistics, but the trend is clear. Note this was an unloaded machine. Well, how about my laptop? The penalty for the branch is negative. Our guess: the very highly dynamic power management is playing tricks with our minds. But we don't know. But the code with the branch is consistently 25% faster. vendor_id : GenuineIntel cpu family : 6 model : 15 model name : Intel(R) Core(TM)2 CPU T7200 @ 2.00GHz stepping : 6 cpu MHz : 1000.000 cache size : 4096 KB how about a 64-bit cpu? cpu family : 15 model : 3 model name : Intel(R) Xeon(TM) CPU 3.40GHz stepping : 4 cpu MHz : 3400.283 cache size : 1024 KB third graph. Here you can see the penalty increased a bit as the size of the jmp increased. Don't try this with 8a. 8a is too damn smart -- it just optimizes the branch out (unless there is a switch to avoid doing that). You need a dumb assembler. ron ------=_Part_19938_23825663.1212443742111 Content-Type: image/gif; name=prism.gif Content-Transfer-Encoding: base64 X-Attachment-Id: f_fgzkg8920 Content-Disposition: attachment; filename=prism.gif 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 uZiM2ZiO+ZhAEggAOw== ------=_Part_19938_23825663.1212443742111 Content-Type: image/gif; name=results.gif Content-Transfer-Encoding: base64 X-Attachment-Id: f_fgzkgsiu1 Content-Disposition: attachment; filename=results.gif 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 kzZ5k29RkO9YlEZ5lEiZlEq5lEw5VoEAADs= ------=_Part_19938_23825663.1212443742111 Content-Type: image/gif; name=runtimes.64bit.gif Content-Transfer-Encoding: base64 X-Attachment-Id: f_fgzlfndy2 Content-Disposition: attachment; filename=runtimes.64bit.gif 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 ------=_Part_19938_23825663.1212443742111--