Почему локальное хранилище потоков такое медленное?
Местные жители темы в 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
Почему локальное хранилище потоков такое медленное?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.