Что я имею в виду: например, Unreal Engine 4. Его хорошо работает на Intel, но в значительной степени отстает от AMD (как редактора, а также от множества игр). Есть ли разница между ними в кодировании? Как я могу написать очень оптимизированный код для обоих из них?
Спасибо.В чем разница между программированием на C++ для AMD и Intel?
ответ
Как ВСЕГДА для оптимизации любого кода наибольшая прибыль заключается в изменении алгоритма на наиболее эффективный для вашего набора данных. Сделайте это, прежде чем выполнять какую-либо другую оптимизацию производительности.
Второй шаг в улучшении производительности - выяснить, какие части вашего кода обозначают самый большой «хит», и сосредоточиться на этом. Конечно, это становится проблемой «отслаивания лука», где, когда вы улучшаете производительность одной функции, вы получаете что-то еще самое медленное ...
Я не собираюсь искать и ссылки на различные страницы оптимизации производительности (документы и т. д.). И у Intel, и у AMD есть руководства по оптимизации, с комментариями относительно того, какие разные модели своих процессоров могут делать то, что и какие кодовые последовательности и такие использовать (как, например, ARM для разных моделей процессоров). У всех поставщиков компиляторов есть списки того, какие параметры влияют на формирование кода каким образом (например, включение SSE, AVX и т. Д.). Различные компиляторы более или менее хороши на самом деле ИСПОЛЬЗУЯ «новые» инструкции, доступные в последних версиях процессоров.
Оптимизация кода для одной субархитектуры процессора [разница между процессорами внутри, например, x86, ARM и т. Д.] Не является ужасно трудной. Написание кода для нескольких субархитектур процессоров становится довольно сложным, особенно если вы хотите выжать последнюю часть производительности процессора, потому что трюки, которые вы должны использовать, специфичны для каждой субархитектуры. Существует несколько классов проблем:
- Различные функции, доступные в разных процессорах, требуют компиляции кода с включенными опциями правильного кодирования (например, SSE, AVX и т. Д.). Таким образом, вам нужно «разделить» код на общий код и код, который может использовать векторные инструкции, и либо сделать его компилятором, либо ассемблером ручной записи, чтобы наилучшим образом использовать инструкции.
- Незначительные различия в архетике делают разные последовательности команд более-менее хорошими. Итак, на процессоре X вы должны использовать инструкции A, B и C для замены команды M (поскольку M необычно медленный), но на процессоре Y одна команда M быстрее, чем A, B и C. Так что снова вы имеете выбрать, с какой из них вы быстро справляетесь - или скомпилировать один и тот же код несколько раз.
- Кэши различны в разных архитектурах, что означает, что оптимизация, чтобы сделать что-то вроде «скопировать эти данные» быстро на одну архитектуру, может не показать того же улучшения в другой архитектуре.
Помимо этого, вам действительно нужно задать более конкретный вопрос для определенного кода, который, как вы знаете, медленный.
- 1. В чем разница между Эволюционным программированием и генетическим программированием?
- 2. В чем разница между программированием потока данных и реактивным программированием?
- 3. В чем разница между агент-ориентированным программированием и реактивным программированием?
- 4. Разница между программированием сокетов и программированием Http
- 5. В чем разница между синхронным и асинхронным программированием (в node.js)
- 6. В чем разница между шаблоном наблюдателя и реактивным программированием?
- 7. В чем разница между последовательным портом RS232 и USB-программированием?
- 8. В чем разница между императивным и объектно-ориентированным программированием?
- 9. В чем разница между функциональным, структурированным и процедурным программированием?
- 10. В чем разница между программированием режима ядра и пользователя?
- 11. В чем разница между параллельным и многоядерным программированием?
- 12. В чем разница между программированием на море и другим веб-программированием
- 13. Сбой OpenGL 3+ на Intel/AMD C++
- 14. Разница между программированием VGA и SVGA в C и сборе
- 15. Разница между автоматическим программированием и компиляцией
- 16. Разница между декларативным и процедурным программированием?
- 17. В чем разница между языком программирования C и программированием C под Linux?
- 18. .Net код медленнее на AMD Opteron CPU, чем Intel Xeon
- 19. В чем разница между AMD APP SDK и (AMD) технологией Stream ATI?
- 20. Intel Vtune на amd процессорах
- 21. Разница между машинным обучением и явным программированием
- 22. Разница между функциональным программированием и объектно-ориентированным программированием
- 23. Разница между объектно-ориентированным программированием и реактивным программированием
- 24. Общая разница между структурированным программированием и объектно-ориентированным программированием?
- 25. Разница между «многопоточным программированием для win32» и «многопоточным программированием с C++ 11»
- 26. Разница между программированием DSPIC33 и PIC24?
- 27. В чем разница между GLSL и c?
- 28. В чем разница между% и/в C?
- 29. разница между обратным отслеживанием и динамическим программированием
- 30. Разница между FP и декларативным программированием
Дорогой downvoters. Хотя, конечно, не самый большой вопрос всех времен, вопрос, возможно, не так плох, как вы думаете. Это может быть другое использование SIMD или других тонких и интересных вещей, в конце концов ... – BitTickler
Спасибо. Значит, здесь нет темной магии? Просто напишите хороший код на C++, и он должен быть оптимизирован для обеих семейств ЦП. –
В каждой большой части программного обеспечения есть определенное количество темной магии;) Но я сомневаюсь, что это простой код, который имеет значение. Скорее, некоторые высокоразрешаемые оптимизации, использующие довольно новые функции процессора, которые на самом деле не покрываются компилятором C++. – BitTickler