Подтвердить что ты не робот

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.

4b9b3361

Ответ 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)

Отказ от ответственности: я являюсь помощником/участником нескольких из вышеперечисленных.