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

BZ>гм. судя по тому что у тебя программа ускорилась от уменьшения размера данных — ты таки упирался в скорость ОЗУ. и никакой компилятор тебе скорость озу быстрее бы не сделал и соответственно твою программу бы не ускорил. а вот с уменьшенным размером данных ты упираешься в тупость компилятора. коэффициент тупости равен частоте твоего процессора, делённой на 1.3 ГГц


Только вот фокус в том, что если мы заменим приведённый алгоритм на что-то вроде a[x]=b[x]+c[x]; при том же объёме данных, то как раз получим то самое ускорение в 6 раз от векторизации. ))) Хотя великим теоретикам микроархитектур такое наверное сложно предвидеть. )))

_>>Предложишь вариант? )

BZ>лень. попробуй сам — там должна быть куча add_epi32. ещё cmp+blend для if, но их для начала можешь опустить. а остаток строки можешь вовсе не обрабатывать — для тестов скорости это мелочь

Почему-то я не сомневался именно в таком ответе. )

Кстати, gcc и clang сейчас поддерживают гораздо более удобную векторизацию через перегрузку операторов для __attribute__ ((vector_size(32))). Но здесь все эти варианты не пройдут — нужен чистый ассемблер.

Хотя в начале было бы ещё интересно посмотреть на результат icc для этого кода, вдруг он достаточно умный...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.