Почему, так Не торопятся (по сравнению с Java)?

Поскольку мы видели от Игры Сравнительных тестов языка программирования в 2010:

  • Движение в среднем 10x медленнее, чем C
  • Движение 3x медленнее, чем Java!?

Как это может быть, принимая во внимание, которые Идут, компилятор производит собственный код для выполнения?
Незрелые компиляторы для Движения? Или существует некоторая внутренняя проблема с языком Движения?

Править:
Большинство ответов отклоняет внутреннее замедление Движения languge, утверждая, что проблема находится в незрелых компиляторах.
Поэтому я сделал некоторые собственные тесты для вычисления Чисел Фибоначчи: Итеративный алгоритм работает в Движении (freebsd, 6 г) с same скорость как в C (с опцией O3). Тусклый рекурсивный работает в Движении 2 times медленнее, чем в C (с-O3 опцией; с-O0 - то же). Но я не видел 10x падение как в Игре Сравнительных тестов.

109
задан Taavi 14 November 2018 в 15:49
поделиться

2 ответа

Компиляторы 6g и 8g не особо оптимизируются, поэтому код, который они создают, не очень быстрый.

Они созданы для быстрой работы и создания приемлемого кода (есть небольшая оптимизация). gccgo использует существующие проходы оптимизации GCC и может предоставить более содержательное сравнение с C, но gccgo еще не завершена.

Контрольные цифры почти полностью отражают качество реализации. Они не имеют большого отношения к языку как таковому, за исключением того, что реализация тратит время выполнения на поддержку языковых функций, которые на самом деле не нужны тесту. В большинстве скомпилированных языков достаточно умный компилятор теоретически может исключить то, что не нужно, но наступает момент, когда вы настраиваете демонстрацию, поскольку очень немногие реальные пользователи языка будут писать программы, которые не использовали бы эту функцию. . Убирать вещи с дороги, не удаляя их полностью (например, предсказывать назначения виртуальных вызовов в JIT-скомпилированной Java), становится непросто.

FWIW, мой собственный очень тривиальный тест с Go, когда я смотрел на него (в основном, цикл сложения целых чисел), gccgo произвел код ближе к быстрому концу диапазона между gcc -O0 и gcc -O2 для эквивалента C. Go по своей сути не медленный, но компиляторы еще не все делают. Это не удивительно для языка, которому 10 минут.

100
ответ дан 24 November 2019 в 03:23
поделиться

В следующем выпуске Go FAQ должно появиться что-то подобное следующему.

Производительность

Почему Go плохо справляется с тестом X?

Одна из целей разработки Go - приблизиться к производительности C для сопоставимых программ, тем не менее, в некоторых тестах он работает довольно плохо, в том числе в нескольких тестах / тестах. Самый медленный зависит от библиотек, для которых версии сопоставимой производительности недоступны в Go. Например, pidigits зависит от математического пакета с множественной точностью , а версии C, в отличие от Go, используют GMP (который написан на оптимизированном ассемблере ).Тесты , которые зависят от регулярных выражений (например, regex-dna), по сути сравнивают временный пакет регулярных выражений Go с зрелым, высоко оптимизированные библиотеки регулярных выражений , такие как PCRE.

Тестовые игры выигрывают благодаря обширной настройке, и версии большинства тестов для Go требуют внимания. Если вы измерите сопоставимые программы C и Go (одним из примеров является обратное дополнение), вы увидите, что эти два языка намного ближе к общей производительности. чем будет указывать этот набор.

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

А вот еще некоторые подробности о The Computer Benchmarks Game из недавней ветки списка рассылки.

Сборка мусора и производительность в gccgo (1)

Сборка мусора и производительность в gccgo (2)

Важно отметить, что компьютерная тестовая игра - это просто игра. Люди с опытом в измерении производительности и планировании емкости тщательно сопоставляют подобные с более реалистичными и реальными рабочими нагрузками; они не играют в игры.

50
ответ дан 24 November 2019 в 03:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: