Выполнение перемалывания чисел Clojure

Я не уверен, принадлежит ли это на StackOverflow или в группе Google Clojure. Но группа, кажется, занята, обсуждая числовые улучшения для 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-телом.

20
задан j-g-faustus 2 July 2010 в 13:21
поделиться

2 ответа

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

  • С подходом оптимизации 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 являются предварительными.
  • Это один из конкретных тестов на физические вычисления. Это относится к обработке чисел с плавающей запятой, но не имеет отношения к производительности в таких областях, как синтаксический анализ строк, параллелизм или обработка веб-запросов.
11
ответ дан 30 November 2019 в 01:13
поделиться

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

4
ответ дан 30 November 2019 в 01:13
поделиться
Другие вопросы по тегам:

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