Clojure производительность хруста
Я не уверен, относится ли это к StackOverflow или в группе Clojure Google. Но группа, похоже, занята обсуждением числовых улучшений для Clojure 1.2, поэтому я попробую здесь:
http://shootout.alioth.debian.org/ имеет ряд тестов производительности для разных языков.
Я заметил, что Clojure отсутствует, поэтому я сделал версию Clojure проблемы n-body.
Самый быстрый код, который я смог создать, может быть найден здесь, и сравнительный анализ, похоже, говорит о том, что для числового хруста Clojure
- фактор ~ 10 быстрее, чем Python/Ruby/Perl
- фактор ~ 4 медленнее, чем C/Java/ Scala/Ada
- примерно наравне с OCaml, Erlang и Go
Я очень доволен уровнем производительности.
Мой вопрос к гуру Clojure
- Есть ли очевидные улучшения, которые я пропустил, будь то с точки зрения скорости или с точки зрения краткости или удобочитаемости кода (без ущерба для скорости)?
- Считаете ли вы, что это представитель производительности Clojure против Python/Ruby/Perl с одной стороны, а Java/C - с другой?
Обновление
Подробнее Clojure 1.1 тестовые программы для перестрелки здесь, включая проблему n-body.
Ответы
Ответ 1
Не поток отзывов здесь:), но, по-видимому, какой-то интерес, поэтому я постараюсь ответить на свой вопрос тем, что я узнал за последние несколько дней:
- С подходом оптимизации 1.1 (примитивы Java и изменяемые массивы) ~ 4x медленнее, чем оптимизированная Java, примерно так же быстро, как и она.
- Конструкции 1.2
definterface
и deftype
являются более чем в два раза быстрее, приближаясь к ~ 1.7x (+ 70%) Java с более коротким, более простым и понятным кодом, чем для 1.1.
Вот реализации:
Подробнее, включая "извлеченные уроки", версию JVM и скриншоты профилирования.
Субъективно говоря, оптимизация кода 1.2 была легкой по сравнению с оптимизацией 1.1, так что это очень хорошая новость для хруста числа Clojure. (На самом деле близко к изумлению:)
Тестирование 1.2 использовало текущую ведущую ветвь, я не пробовал ни одну из новых числовых ветвей. Из чего я могу собрать новые обсуждаемые идеи
- может ускорить работу с не оптимизированными числами
- может ускорить версию 1.1 этого эталона.
- вероятно, не ускорит версию 1.2, она уже будет "близка к металлу", поскольку она, скорее всего, получит.
Отказ:
- Clojure 1.2 еще не выпущен, поэтому результаты теста 1.2 являются предварительными.
- Это один из конкретных эталонных тестов физики. Это имеет значение для хрустания числа с плавающей запятой, но не относится к производительности в таких областях, как синтаксический анализ строк, concurrency или обработка веб-запросов.
Ответ 2
Интересно, может ли Cantor использовать это высокопроизводительная математическая библиотека для Clojure. Также см. этот поток в группе Google, что касается аналогичного проекта в контексте нового примитивного арифметического материала.
Ответ 3
Это немного старый вопрос, и существующие ответы несколько устарели, поэтому я хотел бы добавить обновление по состоянию на середину 2013 года для тех, кто интересуется "числом хрустов" в Clojure
В Clojure числовом вычислительном пространстве было много:
- Clojure 1.5 теперь отсутствует, что значительно улучшает поддержку числовых операций. В большинстве случаев теперь можно приблизиться к чистой скорости Java
- Специальная новостная группа - Численные Clojure
- core.matrix теперь предоставляет идиоматический API для математических вычислений/числовых вычислений, который поддерживает несколько бэкэнд-реализаций (включая родные библиотеки BLAS)
Отказ от ответственности: я являюсь помощником/участником нескольких из вышеперечисленных.