Привет всем:)
Я пытаюсь найти несколько концепций относительно плавающей запятой, SIMD/math intrinsics и быстрого математического флага для gcc. В частности, я использую MinGW с gcc v4.5.0 на процессоре x86.
Я искал вокруг какое-то время, и то, что я (думаю, я) понимаю на данный момент:
Когда я компилирую без флагов, любой fp-код будет стандартным x87, не будет работать с simd, а функции math.h будут связаны с msvcrt.dll.
Когда я использую mfpmath, mssen и/или марш, чтобы получить код mmx/sse/avx, gcc фактически использует команды simd только, если я также укажу некоторые флаги оптимизации, такие как On или ftree- векторизовать. В этом случае внутренности выбираются автоматически с помощью gcc, а некоторые математические функции (я все еще говорю о стандартных математических функциях на math.h) станут внутренними или оптимизированными встроенным кодом, некоторые другие будут по-прежнему поступать из msvcrt. длл. Если я не укажу флаги оптимизации, любое из этих изменений?
Когда я использую конкретные типы данных simd (доступные как gcc-расширения, такие как v4si или v8qi), у меня есть возможность напрямую вызвать встроенные функции или снова оставить автоматическое решение gcc. Gcc все еще может выбрать стандартный код x87, если я не разрешаю инструкции simd через соответствующие флаги. Опять же, если я не укажу флаги оптимизации, любое из этих изменений?
Plese исправьте меня, если какое-либо из моих утверждений неверно: p
Теперь вопросы:
- Должен ли я включать x86intrin.h для использования встроенных функций?
- Должен ли я когда-либо связывать libm?
- Какая быстрая математика имеет отношение ко всему? Я понимаю, что он расслабляет стандарт IEEE, но, в частности, как? Используются другие стандартные функции? Некоторые другие библиотеки связаны? Или это всего лишь пара флагов, установленных где-то, а стандартный lib ведет себя по-другому?
Спасибо всем, кто собирается помочь: D