Резюме: Я хочу воспользоваться преимуществами оптимизаторов компилятора и наборов инструкций процессора, но все еще имею портативное приложение (работающее на разных процессорах). Обычно я мог бы скомпилировать 5 раз и позволить пользователю выбрать правильный для запуска.
Мой вопрос: как я могу автоматизировать это, чтобы процессор обнаруживался во время выполнения, а правый исполняемый файл выполнялся без необходимости его выбора?
У меня есть приложение с множеством математических вычислений низкого уровня. Эти вычисления обычно выполняются в течение длительного времени.
Я хотел бы использовать максимально возможную оптимизацию, желательно, также и наборов инструкций (не всегда поддерживаемых). С другой стороны, я хотел бы, чтобы мое приложение было портативным и простым в использовании (поэтому я бы не хотел компилировать 5 разных версий и позволить пользователю выбирать).
Есть ли возможность скомпилировать 5 разных версий моего кода и динамически запускать наиболее оптимизированную версию, которая возможна во время выполнения? С 5 различными версиями я имею в виду разные наборы инструкций и различные оптимизации для процессоров.
Мне не важно размер приложения.
В данный момент я использую gcc в Linux (мой код находится на С++), но я также заинтересован в этом для компилятора Intel и для MinGW для компиляции в Windows.
Исполняемый файл не должен запускаться на разных ОС, но в идеале может быть что-то возможно при автоматическом выборе 32-битного и 64-битного.
Изменить: Пожалуйста, дайте четкие указания, как это сделать, желательно с небольшими примерами кода или ссылками на объяснения. С моей точки зрения мне нужно супер общее решение, которое применимо к любому случайному проекту С++, который у меня есть позже.
Изменить. Я назначил награду ShuggyCoUk, у него было большое количество указателей, которые нужно было искать. Мне хотелось бы разделить его между несколькими ответами, но это невозможно. Я еще не реализовал это, поэтому вопрос все еще "открыт"! Пожалуйста, по-прежнему добавляйте и/или улучшайте ответы, даже несмотря на то, что больше нет ни одной награды.
Спасибо всем!