LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

cache-misses, cache-references, cpu-cycles, cycles, instructions, ref-cycles

Если запрашивать все сразу то он начинает справа от счётчиков какие-то проценты писать например так

             4 875      cache-misses:u            #   37,084 % of all cache refs      (60,12%)
            13 146      cache-references:u                                            (60,11%)
     1 567 734 432      cpu-cycles:u                                                  (60,11%)
     1 572 908 766      cycles:u                                                      (59,83%)
     3 160 408 445      instructions:u            #    2,01  insn per cycle           (59,83%)
а сами счётчики, особенно первые два, становятся нестабильными даже между двумя одинаковыми запусками.

Запросил отдельно сначала первые два - корреляции нет.

ZEROADD=2 avg=103 | 116 101 100 101 100 101
             3 085      cache-misses:u            #   37,017 % of all cache refs    
             8 334      cache-references:u                                          
ZEROADD=3 avg=106 | 137 100 100 101 100 101
             2 972      cache-misses:u            #   37,248 % of all cache refs    
             7 979      cache-references:u                                          
ZEROADD=4 avg=156 | 186 151 151 150 151 151
             3 170      cache-misses:u            #   38,156 % of all cache refs    
             8 308      cache-references:u                                          
ZEROADD=5 avg=156 | 188 150 151 151 150 151
             3 234      cache-misses:u            #   38,633 % of all cache refs    
             8 371      cache-references:u                                          
ZEROADD=6 avg=156 | 186 150 151 151 150 151
             2 894      cache-misses:u            #   36,071 % of all cache refs    
             8 023      cache-references:u                                          

Затем остальные - там ref-cycles не поддерживается, instructions одинаково, cpu-cycles и cycles меняются ожидаемым образом.

ZEROADD=3 avg=106 | 137 101 101 100 101 100

 Performance counter stats for './test':

     1 573 449 958      cpu-cycles:u                                                
     1 573 449 958      cycles:u                                                    
     3 146 114 645      instructions:u            #    2,00  insn per cycle         
   <not supported>      ref-cycles:u                                                

       0,642713296 seconds time elapsed

       0,642968000 seconds user
       0,000000000 seconds sys


ZEROADD=4 avg=157 | 189 150 151 151 150 151

 Performance counter stats for './test':

     2 359 897 719      cpu-cycles:u                                                
     2 359 897 719      cycles:u                                                    
     3 146 114 728      instructions:u            #    1,33  insn per cycle         
   <not supported>      ref-cycles:u                                                

       0,944384224 seconds time elapsed

       0,940779000 seconds user
       0,004003000 seconds sys

В цикле 4 инструкции

        .byte 0x66,0x66,0x66,0x90
        .byte 0x66,0x66,0x66,0x90
        inc     rcx
        jnz     .bL11
и как я уже выше посчитал - либо 2 такта на цикл, 2 инструкции на такт, либо 3 такта на цикл и получается 1.33 инструкции на такт. Если заменить один 0x66 на ещё один NOP то выходит 2.5 in/cycle и 1.67 in/cycle тоже ожидаемо.

Исходная версия firkax, :

cache-misses, cache-references, cpu-cycles, cycles, instructions, ref-cycles

Если запрашивать все сразу то он начинает справа от счётчиков какие-то проценты писать например так

             4 875      cache-misses:u            #   37,084 % of all cache refs      (60,12%)
            13 146      cache-references:u                                            (60,11%)
     1 567 734 432      cpu-cycles:u                                                  (60,11%)
     1 572 908 766      cycles:u                                                      (59,83%)
     3 160 408 445      instructions:u            #    2,01  insn per cycle           (59,83%)
а сами счётчики, особенно первые два, становятся нестабильными даже между двумя одинаковыми запусками.

Запросил отдельно сначала первые два - корреляции нет. Затем остальные - там ref-cycles не поддерживается, instructions одинаково, cpu-cycles и cycles меняются ожидаемым образом.

ZEROADD=3 avg=106 | 137 101 101 100 101 100

 Performance counter stats for './test':

     1 573 449 958      cpu-cycles:u                                                
     1 573 449 958      cycles:u                                                    
     3 146 114 645      instructions:u            #    2,00  insn per cycle         
   <not supported>      ref-cycles:u                                                

       0,642713296 seconds time elapsed

       0,642968000 seconds user
       0,000000000 seconds sys


ZEROADD=4 avg=157 | 189 150 151 151 150 151

 Performance counter stats for './test':

     2 359 897 719      cpu-cycles:u                                                
     2 359 897 719      cycles:u                                                    
     3 146 114 728      instructions:u            #    1,33  insn per cycle         
   <not supported>      ref-cycles:u                                                

       0,944384224 seconds time elapsed

       0,940779000 seconds user
       0,004003000 seconds sys

В цикле 4 инструкции

        .byte 0x66,0x66,0x66,0x90
        .byte 0x66,0x66,0x66,0x90
        inc     rcx
        jnz     .bL11
и как я уже выше посчитал - либо 2 такта на цикл, 2 инструкции на такт, либо 3 такта на цикл и получается 1.33 инструкции на такт. Если заменить один 0x66 на ещё один NOP то выходит 2.5 in/cycle и 1.67 in/cycle тоже ожидаемо.