Re[26]: За счет чего выстреливают языки?
От: alex_public  
Дата: 17.07.15 11:30
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

_>>Вот как раз такой тупой код в лоб gcc и генерирует:

BZ>ну извини, это называется смотришь в книгу — видишь фигу замени вот это
_>> vpmaskmovd -32(%rdx), %ymm2, %ymm0
_>> vpaddd %ymm0, %ymm1, %ymm1
BZ>на vpaddd -32(%rdx), %ymm1, %ymm1. и это убери
_>> vpandn %ymm3, %ymm2, %ymm2

Для таких очевидных правок не требуется даже в ассемблер лезть — достаточно убрать if из C++ кода. В итоге сгенерируется такое:
.L33:
    vmovdqu    (%r10,%rax), %ymm0
    vpaddd    (%r14,%rax), %ymm0, %ymm0
    addl    $1, %edx
    vpaddd    0(%r13,%rax), %ymm0, %ymm0
    vpaddd    (%r12,%rax), %ymm0, %ymm0
    vpaddd    0(%rbp,%rax), %ymm0, %ymm0
    vpaddd    (%rdi,%rax), %ymm0, %ymm0
    vpaddd    (%rsi,%rax), %ymm0, %ymm0
    vpaddd    (%rbx,%rax), %ymm0, %ymm0
    vpsrad    $3, %ymm0, %ymm0
    vmovdqu    %ymm0, (%r11,%rax)
    addq    $32, %rax
    cmpl    %edx, %ecx
    ja    .L33


Только вот оно будет всего лишь процентов на 10 быстрее, т.е. данная правка к нашей проблеме отношения не имеет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.