2 ответов:
Если вы используете
-marchтогда GCC будет свободно генерировать инструкции, которые работают на указанном процессоре, но не на (обычно) более ранних процессорах в семействе архитектуры. Если вы используете-mtune, то компилятор будет генерировать код, который работает на любом из них, но будет способствовать последовательности команд, которые работают быстрее всего на конкретном процессоре вы указали.
вот что я погуглил:
The
-march=Xопция принимает имя процессораXи позволяет GCC генерировать код, который использует все функцииX. Руководство ССЗ точно объясняет, какие названия процессора означает, что ЦП семей и особенности.потому что функции обычно добавляются, но не удаляются, двоичный построен с
-march=Xбудет работать на CPUX, имеет хороший шанс работать на процессорах новее, чемX, но он почти наверняка не будет работать ни на чем старше, чемX. Некоторые наборы инструкций (3DNow! наверное?) может быть специфичным для конкретного поставщика ЦП, используя их, вероятно, вы получите двоичные файлы, которые не работают на конкурирующих процессорах, более новых или других.The
-mtune=Yопция настраивает сгенерированный код, чтобы работать быстрее наYчем на других процессорах он может работать.-march=Xподразумевает-mtune=X.-mtune=Yне будет переопределять-march=X, Так что, например, это, вероятно, не имеет смысла-march=core2и-mtune=i686- ваш код не будет работать на все, что старшеcore2во всяком случае, из-за-march=core2, так почему же вы хотите оптимизировать для чего-то более старого (менее характерного), чем core2?-march=core2 -mtune=haswellимеет больше смысла: не используйте никаких функций, кроме того, чтоcore2обеспечивает (что все еще намного больше, чем то, что-march=i686дает вам!), но оптимизируйте код для гораздо более новыхhaswellпроцессоры, не дляcore2.там же
-mtune=generic.genericзаставляет GCC создавать код, который лучше всего работает на текущих процессорах (значениеgenericизменения от одной версии GCC к другой). На форумах Gentoo ходят слухи, что-march=X -mtune=genericсоздает код, который работает быстрее наXчем код, созданный с помощью-march=X -mtune=Xделает (или просто-march=X, а-mtune=Xподразумевается). Понятия не имею, если это правда или нет.как правило, если вы не знаете точно, что вам нужно, кажется, что лучший курс-указать
-march=<oldest CPU you want to run on>и-mtune=generic(-mtune=genericздесь, чтобы противостоять неявные-mtune=<oldest CPU you want to run on>, потому что вы, вероятно, не хотят оптимизировать для самый старый процессор). Или просто-march=native, если вы когда-нибудь собираетесь работать только на той же машине, на которой вы строите.
Comments