Почему локальное хранилище потоков такое медленное?

Местные жители темы в D действительно thread-local-storage быстрые. Вот мои тесты.

64-разрядная speed версия Ubuntu, core i5, dmd cross-threading v2.052 Параметры компилятора: dmd efficiency -O -release -inline -m64

// this loop takes 0m0.630s
void main(){
    int a; // register allocated
    for( int i=1000*1000*1000; i>0; i-- ){
        a+=9;
    }
}

// this loop takes 0m1.875s
int a; // thread local in D, not static
void main(){
    for( int i=1000*1000*1000; i>0; i-- ){
        a+=9;
    }
}

Таким multithreading образом, мы теряем всего efficiency 1,2 секунды одного из ядер cross-threading ЦП на 1000 * 1000 * 1000 d2 локальных обращений к потоку. Доступ efficiency к локальным элементам потока thread осуществляется с помощью multithreading регистра% fs, поэтому задействована thread-local-storage всего пара команд процессора:

Дизассемблирование performance с помощью objdump -d:

- this is local variable in %ecx register (loop counter in %eax):
   8:   31 c9                   xor    %ecx,%ecx
   a:   b8 00 ca 9a 3b          mov    $0x3b9aca00,%eax
   f:   83 c1 09                add    $0x9,%ecx
  12:   ff c8                   dec    %eax
  14:   85 c0                   test   %eax,%eax
  16:   75 f7                   jne    f <_Dmain+0xf>

- this is thread local, %fs register is used for indirection, %edx is loop counter:
   6:   ba 00 ca 9a 3b          mov    $0x3b9aca00,%edx
   b:   64 48 8b 04 25 00 00    mov    %fs:0x0,%rax
  12:   00 00 
  14:   48 8b 0d 00 00 00 00    mov    0x0(%rip),%rcx        # 1b <_Dmain+0x1b>
  1b:   83 04 08 09             addl   $0x9,(%rax,%rcx,1)
  1f:   ff ca                   dec    %edx
  21:   85 d2                   test   %edx,%edx
  23:   75 e6                   jne    b <_Dmain+0xb>

Может performance-tuning быть, компилятор мог бы быть cross-threading еще умнее и кэшировать поток performance локально перед циклом в регистр и speed в конце вернуть его в локальный performance-tuning поток (интересно сравнить thread с компилятором gdc), но и fast сейчас дела идут очень хорошо speed ИМХО.

multithreading

performance

d

thread-local-storage

2022-08-30T09:37:10+00:00