Clojure число хруст производительности

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

3 ответа

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

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

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

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

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

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

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

Другие вопросы по тегам