Используя Accelerate Framework из OSX, вы получаете доступ к 4-сторонней функциональности SIMD, где вы можете работать с векторными числами, векторными целочисленными значениями и векторными числами. Это дает вам 4-х стороннее деление, например а также 4-х сторонний грех, cos, tan и т. д.
Для векторного типа с плавающей точкой из 4 чисел, фреймворк обеспечивает vFloat .
Для векторного bool из 4 bools, структура предоставляет vBool32 .
Я пытаюсь выполнить 4-х стороннюю SIMD-версию этой строки кода:
float a = ...;
float b = ...;
bool condition = ...;
float selected = condition ? a : b;
На процессоре Cell, например, вы бы использовали встроенный spu_sel (val1, val2, условный).
Я попытался записать 4-х сторонний выбор как:
vFloat a = { ... };
vFloat b = { ... };
vBool32 condition = { ... };
vFloat selected = condition ? a : b;
... который не принимается компилятором LLVM, как '?' Оператор не принимает vBool32.
Кроме того, на упомянутой выше веб-странице нет оператора с именем vsel или vself или чего-то подобного. Есть ли вообще возможность выбора с плавающей запятой в этой структуре? И если да, то как получить к нему доступ?