gcc, встроенные функции simd и быстрые математические концепции

Привет всем :)
Я пытаюсь понять несколько концепций, касающихся операций с плавающей запятой, встроенных функций SIMD / math и флага fast-math для gcc. В частности, я использую MinGW с gcc v4.5.0 на процессоре x86.

Я уже некоторое время искал, и это то, что я (думаю, я) понимаю на данный момент:

Когда я компилирую без флагов любой код fp будет стандартным x87, без встроенных функций simd, а функции math.h будут связаны из msvcrt.dll.

Когда я использую mfpmath , mssen ] и / или march , чтобы код mmx / sse / avx был включен, gcc фактически использует инструкции simd только , если я также укажу некоторые флаги оптимизации, например On или ftree-vectorize . В этом случае внутренние функции выбираются gcc автоматически, а некоторые математические функции (I ' Если я не укажу флаги оптимизации, изменится ли что-нибудь из этого?

Когда я использую определенные типы данных simd (те, что доступны как расширения gcc, например v4si или v8qi ), У меня есть возможность напрямую вызывать внутренние функции или снова оставить автоматическое решение gcc. Gcc по-прежнему может выбрать стандартный код x87, если я не включу инструкции simd с помощью соответствующих флагов. Опять же, если я не укажу флаги оптимизации, изменится ли что-нибудь из этого?

Пожалуйста, поправьте меня, если какое-либо из моих утверждений неверно: p

Теперь вопросы:

  1. Придется ли мне когда-либо включать x86intrin. h, чтобы использовать встроенные функции?
  2. Придется ли мне когда-нибудь связывать libm?
  3. Какое отношение к чему-либо имеет fast-math? Я понимаю, что это ослабляет стандарт IEEE, но, в частности, как? Другие стандартные функции используются? Связана какая-то другая библиотека? Или где-то установлена ​​всего пара флагов, а стандартная библиотека ведет себя иначе?

Спасибо всем, кто собирается помочь: D

11
задан einpoklum - reinstate Monica 19 November 2016 в 23:35
поделиться