LINUX.ORG.RU

Вопрос по simd sse коду

 


0

1

Привет. Есть код поворота векторов. Первый вариант с SIMD SSE инструкциями, второй — нет.

http://pastebin.com/KwJwcEMr

http://pastebin.com/5fxvDaZW

И вот программа для тестирования (жрет 6Gb RAM).

http://pastebin.com/41ZtsdbE

Прикол в том, что SSE версия работает быстрее обычной, но если убрать #if/#endif, т.е. записывать в вектор каждый раз, прежде чем его вращать, получим непропорциональный рост времени выполнения в SSE версии, так что она оказывается даже медленнее, чем обычная. Это так для моего процессора AMD FX-6300 и для многих Intel процессоров, но SSE версия всё же быстрей на атомах.

В чём тут может быть проблема? Кеш вроде не причём, я ещё понял бы, если бы я в многопоточной программе писал в общую память. pmcstat(8) вроде тоже ничего по кешу не говорит.

mashina — вроде был толковый спец

ноль пишется СИ инструкцией, далее читается ассемблером - тут похоже затык, а без интринсиков код оптимизируется в обнуление в регистре без зависимости от записи в память.

anonymous
()

Прикол в том, что SSE версия работает быстрее обычной

Твой куллбенч ничего не бенчит.

В чём тут может быть проблема?

Проблема в отсутствии понимания того, что делаешь.

я ещё понял бы, если бы я в многопоточной программе писал в общую память

И ничего бы не было.

Основная проблема в том, что твоя sse-версия нихрена не быстрее обычной. 3умножение + 3сложения поменяны на 3шафла + 2умножение + 1сложение, ну там -цикл в самом ратейре, но конпелятор это может векторизовать.

И того, если разница будет, то она будет < x2.

Ну и бенчмарк всем бенчмаркам бенчмарк.

registrant27492
()

Ах да - по поводу отсутствия понимания - нахрена вы всегда пытаетесь «векторизовать» одну операцию, если самая логика симдов подразумевает иное?

registrant27492
()
Ответ на: комментарий от registrant27492

Yep

Согласен с registrant27492.

Проблема в отсутствии понимания того, что делаешь.

Основная проблема в том, что твоя sse-версия нихрена не быстрее обычной. 3умножение + 3сложения поменяны на 3шафла + 2умножение + 1сложение, ну там -цикл в самом ратейре, но конпелятор это может векторизовать.

Топик стартер, читай здесь, со страницы 38. https://deplinenoise.files.wordpress.com/2015/03/gdc2015_afredriksson_simd.pdf

CyberK
()
Ответ на: Yep от CyberK

Я ж ясно написал, что она быстрее в некотором случае. Просто вы на ЛОРе не умеете читать

anonymous
()
Ответ на: комментарий от anonymous

Она должна быть быстрее всегда. Она должна быть быстрее в 4раза(на самом деле больше). Все твои выводы основанные на неправильных бенчмарках.

Она «быстрее» лишь из-за общей ущербности твоего кода ну и конпелятора. Записывайся в школу скилла - уже к утру ты сможешь делать это в 10раз быстрее. Ну если способен конечно.

registrant27492
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.