Комментарии 5
поставьте пожалуйста хабракат)
а можно добавить еще вариант на C/C++?
это сделать можно, но пока я сделаю это сам, заинтересованные читатели могут меня опередить.
Заинтересованные читатели меня не опередили. Поэтому я сделал С++ тест сам.
Производилось всё на другом компе, поэтому дам сравнительные скорости на нем.
Делалось 15 итераций по 45000 тиков.
Haskell (ghc -O2): в среднем 6400 мсек = 105К итераций/сек
C++ (g++ -O3): в среднем 1700 мсек = 400К итераций/сек.
Я варьировал всякие опции для ghc, но оно особо не улучшило.
Затем, я запускал «time ./BenchVM». И смотрел на цифру, и снова запускал.
Время работы бинарника иногда подымалось до 7500 секунд, но потом опускалось до 6300-6500.
Вот примерный вывод (Хаскельный вариант):
Вот примерный вывод (С++ вариант):
Производилось всё на другом компе, поэтому дам сравнительные скорости на нем.
Делалось 15 итераций по 45000 тиков.
Haskell (ghc -O2): в среднем 6400 мсек = 105К итераций/сек
C++ (g++ -O3): в среднем 1700 мсек = 400К итераций/сек.
Я варьировал всякие опции для ghc, но оно особо не улучшило.
Затем, я запускал «time ./BenchVM». И смотрел на цифру, и снова запускал.
Время работы бинарника иногда подымалось до 7500 секунд, но потом опускалось до 6300-6500.
Вот примерный вывод (Хаскельный вариант):
93401980065e8, o39 = 0.0, o100 = 5.219733041393699e7, o101 = 3.800730001674274e8} 4,168,385,896 bytes allocated in the heap 6,053,464 bytes copied during GC 48,272 bytes maximum residency (2 sample(s)) 36,384 bytes maximum slop 2 MB total memory in use (0 MB lost due to fragmentation) Generation 0: 7954 collections, 0 parallel, 0.09s, 0.08s elapsed Generation 1: 2 collections, 0 parallel, 0.00s, 0.00s elapsed INIT time 0.00s ( 0.00s elapsed) MUT time 6.13s ( 6.18s elapsed) GC time 0.09s ( 0.08s elapsed) EXIT time 0.00s ( 0.00s elapsed) Total time 6.22s ( 6.25s elapsed) %GC time 1.5% (1.2% elapsed) Alloc rate 680,041,962 bytes per MUT second Productivity 98.5% of total user, 98.0% of total elapsed real 0m6.256s user 0m6.223s sys 0m0.023s
Вот примерный вывод (С++ вариант):
$ time ./vm done1 done1 done1 done1 done1 done1 done1 done1 done1 done1 done1 done1 done1 done1 done1 real 0m1.847s user 0m1.833s sys 0m0.000s
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Haskell и Java — сравнение на реальной задаче (спутники, ICFP Contest)