0

Итак, независимо от того, насколько я читал о инструкциях SIMD, есть что-то основное, что я до сих пор не могу понять правильно и поэтому хотел бы иметь некоторое (концептуальное) объяснение или предложения о.Использование инструкций SIMD в приложении, ориентированных на несколько платформ, и OS

Я понимаю, что многие реализации SIMD варьируются от одной архитектуры процессора до другой (MMX, SSE, SSE2 и т. Д.). Однако, учитывая, что с середины 2000-х годов, похоже, было больше конвергенции между инструкциями SIMD-наборы по Intel и AMD (и Apple начала использовать Intel), я не получаю следующее.

Проще говоря, если приложение имеет определенный код SIMD (например, для векторизованной математической библиотеки), будет ли он одинаково работать как на Intel, так и на AMD (следовательно, на компьютерах под управлением Windows и Linux), а также в iOS без каких-либо изменений?

Или потребовалось бы, чтобы для каждой архитектуры ЦП/операционной системы, предназначенной для приложения, был реализован специальный код, так что для каждого типа пользователя задаются разные компиляции приложения?

+0

Для x86 и ARM см. Http://www.yeppp.info/ для x86 только см. Http://www.agner.org/optimize/#vectorclass –

+0

@Zboson благодарит! Я уже знал yeppp, но ему не хватает базовых функций, и я потерял его из своего радара. Теперь я не знал другого, и мне очень понравилось то, что я читал в своих документах. Хотелось бы, чтобы было что-то подобное для ARM, тогда было бы просто поддерживать две библиотеки - по крайней мере, для основных операций. – AndrewSteer

+0

Библиотека классов векторов Agner (VCL) является удивительной. Посмотрите на файл 'dispatch_example.cpp'. Прочитайте часть исходного кода (это понятно, за исключением некоторых метапрограмм). Прочтите руководство. –

ответ

2

Для Intel/AMD может возникнуть некоторая конвергенция, в зависимости от того, насколько сложно вы хотите увеличить конверт производительности. Однако устройства iOS основаны на ARM и используют Neon SIMD, а не SSE/AVX от Intel/AMD, поэтому нет бинарной совместимости и минимальной совместимости на уровне источника (например, через макросы или библиотеки шаблонов). См. this question для некоторых кросс-платформенных решений.

+0

Спасибо за ваш ответ. Понимаю, поэтому, учитывая, что SSE широко внедряется в мире x86, по крайней мере, реализация SSE плюс ARM будет необходима для кросс-платформенной совместимости в случае, если не используются «переводимые» библиотеки, такие как libsimdpp? – AndrewSteer

+0

Да, это правильно - для x86 вам также могут потребоваться различные оптимизированные реализации для разных поколений семейства процессоров, например. Библиотеки производительности Intel (IPP, MKL) делают это. –

+0

Имеет смысл, поскольку в то время как SSE присутствует практически во всех x86, новые методы различаются - поэтому идея заключалась бы в том, чтобы сделать SSE базовым и реализовать другие для случаев, когда пользователи могут извлечь из них выгоду. Кстати, если я правильно понял, Intel MKL обеспечивает совместимость между несколькими SIMD-методами (SSE, SSE2 и т. Д.), А также ACML или SSEPlus от AMD. С другой стороны, ARM, похоже, не имеет официальных эквивалентов, облегчающих совместимость между архитектурами. Во всяком случае, большое спасибо за вашу поддержку. Это было действительно полезно. – AndrewSteer