Мне нужно добавить/mul/sub две переменные __m128
(float) с использованием рамки ускорения. Но я не могу найти функцию для этого. Все функции функции ускорения принимают тип вместо float__vector__
типа. Я нахожу функцию для деления 'vdivf'
, но мне нужно добавить/mul/sub тоже.
Может ли кто-нибудь сказать мне, как добавить/mul/sub два переменные __m128
(float), используя Accelerate framework? Что-то вроде этого: _mm_add_ps
, _mm_sub_ps
, _mm_mul_ps
, но с использованием API-интерфейсов Accelerate.Добавление двух типов __m128 через раструю ускорения
ответ
Вам не нужен API для основных арифметических действий:
__m128 x, y;
__m128 z = x + y;
__m128 w = x - y;
__m128 t = x * y;
АНИ было бы совершенно ненужным для этих операций, поэтому ускорение не один.
При этом, если у вас есть существующий код, который использует SSE-intrinsics (_mm_add_ps
и т. Д.), И вы действительно пытаетесь сделать «минимальные изменения кода», почему вы вообще что-то меняете? Собственные функции SSE отлично работают на OS X.
«Вам не нужен API для базовой арифметики« Что ты имеешь в виду? Что эти операции будут автоматически использоваться SSE инструкциями? – Lexandr
@Lexandr: Да, они будут. Однако, как я уже отмечал, если у вас уже есть рабочий код, который использует встроенные функции, * не изменяйте его *. –
Проблема в том, что Accelerate - это API более высокого уровня, чем использование встроенных функций SSE2. Параметры SSE сопоставляются с одиночными инструкциями, которые работают по одному вектору за раз. Ускорение обеспечивает API более высокого уровня функций, которые работают с гораздо большей степенью детализации, как правило, с массивами разумного размера. Чтобы портировать существующий код, вы должны просто придерживаться встроенных функций SSE, и если вам действительно нужна поддержка PowerPC, вам нужно будет #idef SSE-код и написать эквивалентную реализацию AltiVec для сборки ppc. Я сомневаюсь, что это будет стоить усилий, однако - Apple прекратила продавать PowerPC Macs около 7 лет назад, поэтому рынок приложений PowerPC должен быть очень маленьким.
- 1. Доступ к полям __m128 через компиляторы
- 2. Добавление двух типов упаковки в pom .xml
- 3. ИЛИ элементы в __m128
- 4. Добавление двух CSV-файлов вместе через столбцы
- 5. Библиотека диапазона ускорения: пересечение двух диапазонов последовательно
- 6. Является ли доступ к байтам переменной __m128 через union legal?
- 7. Совпадение двух разных типов сообщений и добавление в массив wordpress
- 8. Добавление двух списков различных типов в другой список
- 9. добавление пользовательских вершин в графу ускорения
- 10. Инициализировать аргументы двух типов
- 11. Обработка двух типов документов
- 12. Переменная двух типов
- 13. Группировка двух типов вместе
- 14. Сравнение двух типов
- 15. Как изменить переменную типа __m128?
- 16. SSE, загружающий ints в __m128
- 17. Как получить декартовое отображение для двух типов данных через LINQ?
- 18. Ускорения итерации через два Еогеаспа петля
- 19. Схема - проходит через плоский список многих типов и добавление строк
- 20. Использование многопоточности для ускорения .NET-отражения
- 21. Добавление двух раз вместе
- 22. Итерация через список типов
- 23. SpringWebflow аутентифицирует пользователя двух типов
- 24. Сравнение двух ArrayList разных типов
- 25. Сообщение Deserialise JSON двух типов
- 26. Использование двух типов ListView вместе
- 27. Сравнение двух типов отложенных вычислений
- 28. Слияние двух списков различных типов
- 29. Шаблон специализации для двух типов
- 30. Выполнение двух типов одинаковых шаблонов
Почему вы считаете, что для этого нужно использовать ускорение Framework? Почему бы просто не использовать внутренние функции напрямую? –
Я думаю, что если Apple предоставит API для использования MMX, SSE и т. Д., Будет лучше использовать этот API. Мне нужно поддерживать семейство процессоров PPC и Intel, Accelerate framework будет автоматически обрабатываться командой CPU. Кроме того, если что-то будет изменено в будущем, я думаю, что, используя систему ускорения, мне нужно будет сделать меньше изменений. – Lexandr
ОК, но вы не хотите называть функции ускорения только для отдельных векторов - это было бы безнадежно неэффективным и бессмысленным - вам нужно обрабатывать массивы с разумным размером, иначе служебные вызовы функций будут уничтожать любые выгоды от использования SIMD. –