разбирать код C # для машинных инструкций - PullRequest
5 голосов
/ 14 мая 2011

Я экспериментирую с производительностью компилятора.У меня есть очень маленький кусок кода, всего несколько умножений и дополнений с плавающей запятой.Код выполняется в цикле несколько миллионов раз.Я пытаюсь скомпилировать код в C ++, C #, Java, Perl, Python ... и затем я запускаю результат при измерении времени выполнения.

Я весьма недоволен производительностью C #.Мой код на C # примерно на 60% медленнее, чем эквивалентный C ++ или Java.Я уверен, что в моем эксперименте должна быть ошибка.Я хотел бы разобрать получившийся двоичный файл, чтобы узнать, почему.

Есть ли такая опция с кодом MSIL?Можно ли проверить результаты работы компилятора c # JIT на уровне машинных инструкций (инструкции x86, а не инструкции MSIL)?

Обновить

код (u, v,g * двойные; шаги целые)

stopwatch.Start();
for (int i = 0; i < steps; i++)
{
    double uu = g11 * u + g12 * v;
    v = g21 * u + g22 * v;
    u = uu;
}
stopwatch.Stop();

Ответы [ 3 ]

7 голосов
/ 14 мая 2011

Отладьте ваш код в Visual Studio (но скомпилируйте в режиме выпуска), поместите точку останова в цикл и откройте окно Разборка (Отладка -> Windows -> Разборка), когда выполнение остановится на точке останова.

4 голосов
/ 14 мая 2011

Ngen вашей программы и разберите результаты.

1 голос
/ 14 мая 2011

Может быть, вы могли бы ngen (скомпилировать в собственный код) сначала двоичный файл, чтобы избежать JIT-компиляции.

...