mr.DIMAS
у армовского неона свои интринсики, которые не работают на интеле. Поэтому портируемость к плюсам интринсиков не отнести.
kipar
> Хочешь сказать, _mm_load_ps будет на арме работать?
На ARM'е есть NEON который сильно похож на SIMD и с портированием
проблем куда меньше чем с flat asm.
SSE-to-NEON
TheLightWay
Судя по описанию хидера - это костыль и все равно придется переписывать руками. Насчет простоты этого переписывания - не пробовал, так что поверю эксперту.
kipar
Именно это да, костыль. Просто на эту теме хрен кто что-то внятное покажет поскольку лицензия не даст или NDA.
viennahd
Используй intrinsics функции, те которые с префиксом "_mm_*", __asm не используй - не поддерживается в x64 системах. SSE 4 версии позволяет немного уменьшить необходимость в велосипедах. С многопоточностью аккуратней, т. к. кэш-промахи заставят простаивать процессор. Разделяй массив на несколько смежных частей и используй prefetch, если без асинхронного выполнения никак нельзя. В принципе, на современных процессорах что с префетчом, что без - сильно большой разницы быть не должно. Это надо проверять на конкретной платформе.
https://software.intel.com/sites/landingpage/IntrinsicsGuide/
Лучше, как по мне, использовать OpenCL (или другие подобные языки), если есть возможность.
bykabak
> Чем "интринсики" лучше чистого asm ?
Тем, что ничего не ломают, в основном.
Уберегают от всякой гомосятины с потерянными адресами возврата, потерянным указателем стека и прочими переписанными регистрами с последующей порчей данных в оных.
Алмаз
> Используй intrinsics функции, те которые с префиксом "_mm_*", __asm не
> используй - не поддерживается в x64 системах. SSE 4 версии позволяет немного
> уменьшить необходимость в велосипедах. С многопоточностью аккуратней, т. к.
> кэш-промахи заставят простаивать процессор. Разделяй массив на несколько
> смежных частей и используй prefetch, если без асинхронного выполнения никак
> нельзя. В принципе, на современных процессорах что с префетчом, что без -
> сильно большой разницы быть не должно. Это надо проверять на конкретной
> платформе.
про выравнивание еще забыл, нужно что бы вырванены были по границе 16 байт (в адресе массива последняя шестнадцатиричная цифра должна быть 0)
nonamezerox
Да, точно.
Выравнивание и префетчинг, например на моем цпу коре 2 интел, не дают ничего, или почти ничего. Это я про использование выровненных команд и невыровненных. Напримнр movups, movaps
Я хотел спросить про OpenCL - будет ли float4 и float8 работать как SIMD?
viennahd
> Я хотел спросить про OpenCL - будет ли float4 и float8 работать как SIMD?
От компилятора зависит. Вообще он обычно да, старается по максимуму SIMD использовать.
Плавающая арифметика на PC все параллельная. Где ты другую то найдешь? Она такая еще со времен отдельного сопроцессора для этих команд.
Другое дело, что параллельность использовать с умом надо, не ждать результат сразу после команды, заняться чем-то еще.
Тема в архиве.