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

_>>Для начала можно просто скопировать выданный им код, а не придумывать свой)

BZ>вот уж проблема. сложение, сдвиг, сравнение и блендинг. если тебе непонятно это описание на русском, то ты не поймёшь его и на любом другом языке

Вот как раз такой тупой код в лоб gcc и генерирует:
  Скрытый текст
.L36:
    vmovdqa    0(%rbp), %ymm2
    addl    $1, %ecx
    addq    $32, %rbp
    addq    $32, %rdi
    addq    $32, %rdx
    addq    $32, %rsi
    addq    $32, %rbx
    vpcmpeqd    %ymm4, %ymm2, %ymm2
    addq    $32, %r11
    addq    $32, %r10
    addq    $32, %r9
    addq    $32, %r8
    vpandn    %ymm3, %ymm2, %ymm2
    vpmaskmovd    -32(%rdx), %ymm2, %ymm0
    vpmaskmovd    -32(%rdi), %ymm2, %ymm1
    vpaddd    %ymm0, %ymm1, %ymm1
    vpmaskmovd    -32(%rsi), %ymm2, %ymm0
    vpaddd    %ymm0, %ymm1, %ymm1
    vpmaskmovd    -32(%rbx), %ymm2, %ymm0
    vpaddd    %ymm0, %ymm1, %ymm1
    vpmaskmovd    -32(%r11), %ymm2, %ymm0
    vpaddd    %ymm0, %ymm1, %ymm1
    vpmaskmovd    -32(%r10), %ymm2, %ymm0
    vpaddd    %ymm0, %ymm1, %ymm1
    vpmaskmovd    -32(%r9), %ymm2, %ymm0
    vpaddd    %ymm0, %ymm1, %ymm1
    vpmaskmovd    -32(%r8), %ymm2, %ymm0
    vpaddd    %ymm0, %ymm1, %ymm0
    vpsrad    $3, %ymm0, %ymm0
    vpmaskmovd    %ymm0, %ymm2, (%rax)
    addq    $32, %rax
    cmpl    %ecx, %r13d
    ja    .L36

И именно он работает заметно медленнее теоретического максимума для данного процессора.

BZ>кстати, а этот код вообще корректен? мне показалось что там rgb и тогда старшие биты одних каналов перемешиваются с младшими битами других. к примеру (0x0100+0x0000)/2 = 0x0080


Это не сглаживание картинки (видно же уже по количеству применений) — это разновидность клеточного автомата. )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.