2010-11-02 2 views
1

Есть ли где-нибудь в Интернете, где я могу получить представление о синтаксисе различных синтаксисов языка в плане процессоров (Core i7 и Core 2)? В университете я изучил язык ассемблера ARM, и мы могли сопоставить количество циклов, сделанных для выполнения оператора вычитания и т. Д. Я просто задался вопросом, возможно ли это сделать с языком более высокого уровня на Core i7 или Core 2?Число циклов, взятых для C++ или ANSI C?

+4

Более точным способом было бы прочитать сборку, сгенерированную вашим компилятором. Тогда у вас осталась проблема предсказания производительности фрагмента кода на современном процессоре не по порядку. –

+1

Зачем вам это нужно? Может быть, мы сможем помочь вам решить проблему, которую вы пытаетесь выяснить. –

+0

Есть ли способ в VS2010 увидеть сборку? – Tom

ответ

8

Нет, это полностью зависит от компилятора, который вы используете, и какие оптимизации настроек вы используете, и т.д.

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

Однако помните, что на современных архитектурах такие вещи, как латентность памяти и переименование регистров, оказывают большое влияние на скорость, и эти эффекты не очевидны даже при проверке кода сборки.

+0

И удачи с 64-битной архитектурой, x86 - это мелкий картофель по сравнению с этим кошмаром. –

+0

В большинстве случаев медленный код вызван медленными инструкциями CPU (например, целыми делениями или трансцендентными операциями с плавающей запятой), промахами кеша и неверными предсказаниями отрасли. Вы можете вывести все это и получить общее представление о производительности, глядя на код. – user434507

+0

@user: Да, но вы не получите ничего, как «функция x == y циклов», –

2

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