Оценивая скорость Haskell - PullRequest
0 голосов
/ 27 августа 2018

Вкратце: мне нужно проверить скорость Haskell на простых операциях, и в настоящее время у меня плохие результаты, но я не уверен, правильно ли я выполняю компиляцию / оптимизацию.

UPD: проблема в том, ответил , см. Комментарии - проблема была в другом целочисленном типе ...

Подробно:

Я работаю в проекте, где несколько службвыполнять массовую обработку данных, так что по крайней мере определенная часть этих сервисов просто должна быть быстрой.Они делают некоторые тяжелые вычисления и манипуляции с данными, а не только извлечение-загрузка.Другими словами, это вопрос того, сколько экземпляров и часов будет потрачено, скажем, на каждую 1e15 запись данных.

В настоящее время мы рассматриваем возможность добавления еще нескольких сервисов к проекту и некоторым коллегам.Любопытно попробовать написать их на другом языке, чем те, которые уже используются.Я менее или более согласен с этим, но я настаиваю, чтобы мы сначала проверили «базовую производительность» предлагаемых языков.Конечно, быстрое тестирование является сложным и спорным, поэтому я предлагаю использовать очень простой тест с простыми операциями, без сложных структур данных и т. Д. Мы согласились на «плохую рекурсивную» функцию Фибоначчи:

fib x
  | x < 2 = x
  | otherwise = fib (x - 2) + fib (x - 1)

main = print (fib 43)

Я написал ее внесколько языков для сравнения.Версия C выглядит следующим образом:

#include <stdio.h>

int fib(int x) {
    return (x < 2) ? x : (fib(x - 2) + fib (x - 1));
}

int main(void) {
    printf("%d\n", fib(43));
}

Первый компилируется с ghc -O2 test.hs, а второй с gcc -O2 test.c.Версия GHC - 8.4.3.Сейчас я вижу результаты, отличающиеся примерно в 12 раз (2,2 секунды для версии C, 3 секунды для версии Java и 30 секунд для Haskell на той же машине).

Интересно, все ли я сделал с компилятором иВарианты компилятора правильные.Я думал, что, поскольку Haskell компилируется в native-код (?), Он должен быть сопоставим с C и подобными языками.И мне нужны намеки на это.

PS Пожалуйста, не говорите, что функция Фибоначчи может быть написана без "экспоненциальной" рекурсии - я знаю - но, как я уже сказал, нам нужен некоторый тест смного простых вычислений.

PPS Я не имею в виду, если мы не сможем сделать Haskell быстрее, мы не будем его использовать.Но, вероятно, мы зарезервируем его для какой-то другой службы, где время тратится в основном на ввод-вывод, поэтому это не будет иметь значения.Для текущей группы «критичных по скорости» услуг вопрос только в том, будет ли клиент ежемесячно платить 10000 или 120000 долларов за эти экземпляры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...