Итак, независимо от того, насколько я читал о инструкциях SIMD, есть что-то основное, что я до сих пор не могу понять правильно и поэтому хотел бы иметь некоторое (концептуальное) объяснение или предложения о.Использование инструкций SIMD в приложении, ориентированных на несколько платформ, и OS
Я понимаю, что многие реализации SIMD варьируются от одной архитектуры процессора до другой (MMX, SSE, SSE2 и т. Д.). Однако, учитывая, что с середины 2000-х годов, похоже, было больше конвергенции между инструкциями SIMD-наборы по Intel и AMD (и Apple начала использовать Intel), я не получаю следующее.
Проще говоря, если приложение имеет определенный код SIMD (например, для векторизованной математической библиотеки), будет ли он одинаково работать как на Intel, так и на AMD (следовательно, на компьютерах под управлением Windows и Linux), а также в iOS без каких-либо изменений?
Или потребовалось бы, чтобы для каждой архитектуры ЦП/операционной системы, предназначенной для приложения, был реализован специальный код, так что для каждого типа пользователя задаются разные компиляции приложения?
Для x86 и ARM см. Http://www.yeppp.info/ для x86 только см. Http://www.agner.org/optimize/#vectorclass –
@Zboson благодарит! Я уже знал yeppp, но ему не хватает базовых функций, и я потерял его из своего радара. Теперь я не знал другого, и мне очень понравилось то, что я читал в своих документах. Хотелось бы, чтобы было что-то подобное для ARM, тогда было бы просто поддерживать две библиотеки - по крайней мере, для основных операций. – AndrewSteer
Библиотека классов векторов Agner (VCL) является удивительной. Посмотрите на файл 'dispatch_example.cpp'. Прочитайте часть исходного кода (это понятно, за исключением некоторых метапрограмм). Прочтите руководство. –