2017-01-08 1 views
-1

Что я имею в виду: например, Unreal Engine 4. Его хорошо работает на Intel, но в значительной степени отстает от AMD (как редактора, а также от множества игр). Есть ли разница между ними в кодировании? Как я могу написать очень оптимизированный код для обоих из них?
Спасибо.В чем разница между программированием на C++ для AMD и Intel?

+1

Дорогой downvoters. Хотя, конечно, не самый большой вопрос всех времен, вопрос, возможно, не так плох, как вы думаете. Это может быть другое использование SIMD или других тонких и интересных вещей, в конце концов ... – BitTickler

+0

Спасибо. Значит, здесь нет темной магии? Просто напишите хороший код на C++, и он должен быть оптимизирован для обеих семейств ЦП. –

+0

В каждой большой части программного обеспечения есть определенное количество темной магии;) Но я сомневаюсь, что это простой код, который имеет значение. Скорее, некоторые высокоразрешаемые оптимизации, использующие довольно новые функции процессора, которые на самом деле не покрываются компилятором C++. – BitTickler

ответ

0

Как ВСЕГДА для оптимизации любого кода наибольшая прибыль заключается в изменении алгоритма на наиболее эффективный для вашего набора данных. Сделайте это, прежде чем выполнять какую-либо другую оптимизацию производительности.

Второй шаг в улучшении производительности - выяснить, какие части вашего кода обозначают самый большой «хит», и сосредоточиться на этом. Конечно, это становится проблемой «отслаивания лука», где, когда вы улучшаете производительность одной функции, вы получаете что-то еще самое медленное ...

Я не собираюсь искать и ссылки на различные страницы оптимизации производительности (документы и т. д.). И у Intel, и у AMD есть руководства по оптимизации, с комментариями относительно того, какие разные модели своих процессоров могут делать то, что и какие кодовые последовательности и такие использовать (как, например, ARM для разных моделей процессоров). У всех поставщиков компиляторов есть списки того, какие параметры влияют на формирование кода каким образом (например, включение SSE, AVX и т. Д.). Различные компиляторы более или менее хороши на самом деле ИСПОЛЬЗУЯ «новые» инструкции, доступные в последних версиях процессоров.

Оптимизация кода для одной субархитектуры процессора [разница между процессорами внутри, например, x86, ARM и т. Д.] Не является ужасно трудной. Написание кода для нескольких субархитектур процессоров становится довольно сложным, особенно если вы хотите выжать последнюю часть производительности процессора, потому что трюки, которые вы должны использовать, специфичны для каждой субархитектуры. Существует несколько классов проблем:

  1. Различные функции, доступные в разных процессорах, требуют компиляции кода с включенными опциями правильного кодирования (например, SSE, AVX и т. Д.). Таким образом, вам нужно «разделить» код на общий код и код, который может использовать векторные инструкции, и либо сделать его компилятором, либо ассемблером ручной записи, чтобы наилучшим образом использовать инструкции.
  2. Незначительные различия в архетике делают разные последовательности команд более-менее хорошими. Итак, на процессоре X вы должны использовать инструкции A, B и C для замены команды M (поскольку M необычно медленный), но на процессоре Y одна команда M быстрее, чем A, B и C. Так что снова вы имеете выбрать, с какой из них вы быстро справляетесь - или скомпилировать один и тот же код несколько раз.
  3. Кэши различны в разных архитектурах, что означает, что оптимизация, чтобы сделать что-то вроде «скопировать эти данные» быстро на одну архитектуру, может не показать того же улучшения в другой архитектуре.

Помимо этого, вам действительно нужно задать более конкретный вопрос для определенного кода, который, как вы знаете, медленный.

Смежные вопросы

 Смежные вопросы