Мне нужно добавить /mul/sub две переменные __m128
(с плавающей запятой), используя фреймворк Accelerate. Но я не могу найти функцию для этого. Все функции платформы Accelerate принимают тип int__vector__
вместо типа float__vector__
. Я нашел функцию для деления 'vdivf'
, но мне также нужно добавить /mul/sub.
Кто-нибудь может сказать мне, как добавить/mul/sub две переменные __m128
(с плавающей запятой) с помощью фреймворка Accelerate? Что-то вроде этого: _mm_add_ps
, _mm_sub_ps
, _mm_mul_ps
, но с использованием Accelerate framework API.
Добавление двух типов __m128 через Accelerate framework
Ответы (2)
Вам не нужен API для базовой арифметики:
__m128 x, y;
__m128 z = x + y;
__m128 w = x - y;
__m128 t = x * y;
Для этих операций API совершенно не нужен, поэтому у Accelerate его нет.
Тем не менее, если у вас есть существующий код, который использует встроенные функции SSE (_mm_add_ps
и т. д.), и вы действительно пытаетесь внести «минимальные изменения в код», зачем вы вообще что-то меняете? Встроенные функции SSE прекрасно работают и в OS X.
Проблема в том, что Accelerate — это API более высокого уровня, чем встроенные функции SSE2. Встроенные функции SSE сопоставляются с отдельными инструкциями, которые одновременно работают с одним вектором. Accelerate предоставляет API функций более высокого уровня, которые работают с гораздо большей степенью детализации, как правило, с массивами разумного размера. Чтобы портировать существующий код, вы должны просто придерживаться встроенных функций SSE, и если вам действительно нужна поддержка PowerPC, вам потребуется #idef код SSE и написать эквивалентную реализацию AltiVec для сборки ppc. Однако я сомневаюсь, что это будет стоить затраченных усилий — Apple прекратила продажу компьютеров PowerPC Mac около 7 лет назад, поэтому рынок приложений PowerPC к настоящему времени должен быть очень мал.
_mm_add_ps
и т. д., мне нужно заменить вызов функций_mm_add_ps
и т. д. на аналог из фреймворка Accelerate по указанным причинам. Может быть, вы можете сказать мне, что использовать вместо этого? - person Lexandr   schedule 21.04.2012