Clojure номер хруст производительности - PullRequest
19 голосов
/ 26 июня 2010

Я не уверен, относится ли это к StackOverflow или к группе Clojure Google. Но группа, кажется, занята обсуждением численных улучшений для Clojure 1.2 , поэтому я попробую здесь:

http://shootout.alioth.debian.org/ имеет ряд тестов производительности для разных языков.

Я заметил, что Clojure отсутствует, поэтому я сделал версию Clojure проблема n-тела .

Самый быстрый код, который мне удалось создать, может быть , найденный здесь , и при сравнительном тестировании кажется, что 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.

Ответы [ 3 ]

11 голосов
/ 29 июня 2010

Не поток ответов здесь :), но, по-видимому, некоторый интерес, поэтому я постараюсь ответить на свой собственный вопрос с тем, что я узнал за последние несколько дней:

  • С подходом оптимизации 1.1 (примитивы Java и изменяемые массивы) ~ в 4 раза медленнее, чем оптимизированная Java, примерно так же быстро, как и сейчас.
  • Конструкции 1.2 definterface и deftype в раза более быстры, чем , в ~ 1,7 раза (+ 70%) от Java с более коротким, простым и чистым кодом, чем для 1.1.

Вот реализации:

Подробнее включая «извлеченные уроки», версию JVM и скриншоты профилирования.

Субъективно, оптимизация кода 1.2 была легче, чем оптимизация 1.1, так что это очень хорошая новость для сокращения числа Clojure. (На самом деле близко к удивительному:)

В тестировании 1.2 использовалась текущая основная ветвь, я не пробовал ни одну из новых числовых ветвей. Из чего я могу извлечь новые идеи, обсуждаемые в настоящее время

  • может сделать неоптимизированные числа быстрее
  • может ускорить 1.1 версию этого теста
  • , вероятно, не ускорит версию 1.2, она уже настолько "близка к металлу", насколько это возможно.

Отказ от ответственности:

  • Clojure 1.2 еще не выпущен, поэтому результаты тестов 1.2 являются предварительными.
  • Это один конкретный эталон по физическим расчетам. Это относится к обработке чисел с плавающей запятой, но не имеет отношения к производительности в таких областях, как разбор строк, параллелизм или обработка веб-запросов.
4 голосов
/ 09 сентября 2013

Это немного старый вопрос, и существующие ответы несколько устарели, поэтому я хотел бы добавить обновление по состоянию на середину 2013 года для тех, кто заинтересован в "сокращении чисел" в Clojure

Тамв пространстве числовых вычислений Clojure произошло много событий:

  • В настоящее время не работает Clojure 1.5, в котором значительно улучшена поддержка числовых операций.В большинстве случаев теперь возможно получить очень близко к чистой скорости Java
  • Выделенная группа новостей - Числовое закрытие
  • core.matrix теперь предоставляет идиоматический API для математических / числовых вычислений с матрицей, который поддерживает несколько реализаций бэкэнда (включая собственные библиотеки BLAS)

Отказ от ответственности: я поддерживаю / дополняю некоторые из перечисленных выше.

4 голосов
/ 26 июня 2010

Интересно, может ли Cantor быть вам полезен - это высокопроизводительная математическая библиотека для Clojure.Также см. эту ветку в группе Google, которая посвящена аналогичному проекту в контексте новой примитивной арифметической информации.

...