Я ищу такие вещи, как переупорядочение кода, которое может даже сломать код в случае нескольких процессоров.Каковы некоторые трюки, которые процессор делает для оптимизации кода?
ответ
Википедия имеет достаточно полный список методов оптимизации here.
Да, но какой именно вопрос?
Однако, поскольку это интересная тема: трюки, используемые компиляторами и процессорами для оптимизации кода, не должны прерывать код даже с несколькими процессорами при отсутствии условий гонки в этом коде. Это называется гарантией последовательной согласованности: если ваша программа не имеет каких-либо условий гонки, и все данные будут правильно заблокированы перед доступом, код будет вести себя так, как если бы он выполнялся последовательно.
Существует очень хорошее видео Herb Sutter говорить об этом здесь:
http://video.google.com/videoplay?docid=-4714369049736584770
Каждый должен смотреть на это :)
Важнейшим из них является переупорядочение доступа к памяти.
Отсутствие ошибок в памяти или инструкции по сериализации, процессор может свободно изменять порядок доступа к памяти. Некоторые архитектуры процессоров имеют ограничения на то, сколько они могут изменить порядок; Альфа известна как самая слабая (т. Е. Та, которая может переупорядочить больше всего).
Очень хорошее отношение к теме можно найти в исходной документации ядра Linux, по адресу Documentation/memory-barriers.txt.
В большинстве случаев лучше всего использовать блокирующие примитивы из вашего компилятора или стандартной библиотеки; они хорошо протестированы, должны иметь все необходимые барьеры памяти на месте и, вероятно, достаточно оптимизированы (оптимизация запирающих примитивов сложна, даже эксперты иногда могут ошибаться).
Ответ DavidK верен, однако также очень важно знать модель памяти для вашего языка/времени выполнения. Даже без условий гонки и с последовательной согласованностью и использованием мьютекса ваш код может все еще ломаться, когда данные кэшируются разными потоками, работающими в разных ядрах процессора. Некоторые языки Java - один из примеров, обеспечивающий состояние данных между потоками при использовании блокировки мьютекса, но это редко бывает достаточно, чтобы просто гарантировать, что ни один из двух потоков не сможет получить доступ к данным одновременно. Вы должны использовать мьютекс правильно, чтобы гарантировать, что языковая среда выполнения синхронизирует состояние данных между двумя потоками. В java это делается путем синхронизации двух потоков на одном и том же объекте.
Вот хорошая страница, объясняющая проблему и ее решение в модели памяти javas.
- 1. Каковы ваши любимые трюки для оптимизации кода низкого уровня?
- 2. Каковы некоторые параметры оптимизации SVG?
- 3. Каковы некоторые советы по оптимизации кода сборки, сгенерированного компилятором?
- 4. Каковы некоторые рекомендации, уроки и рекомендации по оптимизации оптимизации SQL
- 5. Трюки, которые следует соблюдать
- 6. Каковы основные советы и трюки для программирования ASPP.Net/Web и распространенные ошибки, которые делает программист?
- 7. Каковы некоторые интересные особенности исходного кода EveryBlock.com?
- 8. Каковы некоторые очевидные оптимизации для виртуальной машины, реализующей функциональный язык?
- 9. Трюки для сокращения PHP-кода?
- 10. Почему GCC делает некоторые оптимизации с -O0
- 11. Flash-рендеринг: советы по оптимизации и трюки
- 12. Каковы некоторые методы генерации кода?
- 13. Каковы известные оптимизации C/C++ для GCC
- 14. Некоторые сомнения в оптимизации неонового кода
- 15. Каковы ваши трюки для ускорения CPAN на ограниченных ресурсных устройствах?
- 16. Каковы некоторые фреймворки javascript, которые используют люди?
- 17. Каковы некоторые виды использования замыканий для ООП?
- 18. Каковы некоторые из лучших способов оптимизации приложения Titanium?
- 19. Каковы лучшие отладочные трюки с Weld/CDI?
- 20. Каковы возможные ключи оптимизации Haskell?
- 21. Каковы проверки управления памятью, которые делает XCode?
- 22. Каковы уровни оптимизации на D?
- 23. Каковы ваши любимые советы и трюки для подрывной деятельности
- 24. Каковы некоторые необычные языки, которые вы использовали для приложения CGI?
- 25. Маршрутные трюки/Изменения, которые позволят проектировать маршрут
- 26. оптимизации кода
- 27. Как Pony (ORM) делает свои трюки?
- 28. Каковы некоторые преимущества для/jQuery.getScript()?
- 29. Каковы ваши методы оптимизации вашего кода на C++?
- 30. Использование libnvvm для оптимизации кода
Не могли бы вы обновить, чтобы фраза это в виде вопроса? – 2008-11-07 14:36:58
Вы имеете в виду компилятор? Потому что вы получите дико разные ответы ... – 2008-11-07 14:36:59
Какой комплимент? Какая платформа? – 2008-11-07 14:37:31