LINUX.ORG.RU

[haskell] profiling

 


0

1

Есть необходимость узнать, на каких именно вычислениях программа тратит основное рабочее время.

Как подключить профайлер к своей программе? Как поддержать профилирование во всех подключаемых модулях?

$> ghc -prof -auto-all -o Main ./BooleanMatrix.hs -v
Glasgow Haskell Compiler, Version 6.12.3, for Haskell 98, stage 2 booted by GHC version 6.12.3
Using binary package database: /usr/lib/ghc-6.12.3/package.conf.d/package.cache
Using binary package database: /home/ilukinykh/.ghc/i386-linux-6.12.3/package.conf.d/package.cache
hiding package base-3.0.3.2 to avoid conflict with later version base-4.2.0.2
hiding package Cabal-1.8.0.6 to avoid conflict with later version Cabal-1.10.2.0
wired-in package ghc-prim mapped to ghc-prim-0.2.0.0-9df3bd825ad17ca739e158c880a25b11
wired-in package integer-gmp mapped to integer-gmp-0.2.0.1-72436e28c79d056c87cc0d2d2f9f3773
wired-in package base mapped to base-4.2.0.2-10bdacb430274706a59728e237e2bfb3
wired-in package rts mapped to builtin_rts
wired-in package haskell98 mapped to haskell98-1.0.1.1-4d2891ad99eae334ff8234bcfbddce06
wired-in package template-haskell mapped to template-haskell-2.4.0.1-bf08798b1934e4d6a3f903f58e0d5159
wired-in package dph-seq mapped to dph-seq-0.4.0-1df951f78b4efbc84e2534bab253505d
wired-in package dph-par mapped to dph-par-0.4.0-436308af1d9725eae22b56265f6035ec
Hsc static flags: -fscc-profiling -static
Created temporary directory: /tmp/ghc18094_0
*** Checking old interface for main:Main:
*** Parser:
*** Renamer/typechecker:

BooleanMatrix.hs:1:0:
    Failed to load interface for `Prelude':
      Perhaps you haven't installed the profiling libraries for package `base'?
      locations searched:
        Prelude.hi
        Prelude.hi-boot
        /usr/lib/ghc-6.12.3/base-4.2.0.2/Prelude.p_hi
*** Deleting temp files:
Deleting: /tmp/ghc18094_0/ghc18094_0.s
Warning: deleting non-existent /tmp/ghc18094_0/ghc18094_0.s
*** Deleting temp dirs:
Deleting: /tmp/ghc18094_0

> на каких именно вычислениях программа тратит основное рабочее время.

На вычислениях зигохистоморфных препроморфизмов, очевидно же.

А если серьёзно, то использование яйцеголово-академического языка для HPC — не самая удачная идея. Hints: LAPACK, ATLAS, CUDA/CUBLAS. Да хотя бы даже Octave — она и то быстрее обсчитает матрицу, чем Цацкель.

anonymous
()

У тебя в системе каша из версий и старого мусора

Если джента - грохни старый мусор и запусти haskell-updater

Да, у меня всё работает

anonymous
()
Ответ на: комментарий от anonymous

Байндинги есть же для ляпака и прочего

anonymous
()
Ответ на: комментарий от anonymous

> Если джента - грохни старый мусор и запусти haskell-updater emerge --unmerge ghc?

garmonbozia
() автор топика
Ответ на: комментарий от anonymous

Так.

[code] Perhaps you haven't installed the profiling libraries for package `split-0.1.4.1'? [/code]

split ставил cabal install split.

Как поставить профилизирующие либы для этого пакета кабалом?

garmonbozia
() автор топика
Ответ на: комментарий от anonymous

Ага, раскомментил в конфиге.

Идём дальше.

$> ghc -prof -auto-all -o Main ./BooleanMatrix.hs
compilation IS NOT required
BooleanMatrix.o: In function `rQV_info':
(.text+0x5d17): undefined reference to `__stginit_splitzm0zi1zi4zi1_DataziListziSplit_p'
collect2: ld returned 1 exit status
garmonbozia
() автор топика
Ответ на: комментарий от garmonbozia

Проверь, что на линковке берутся именно те либы и именно из нужных директорий

anonymous
()

Perhaps you haven't installed the profiling libraries for package `base'?

sudo apt-get install ghc6-prof

делалось? В убунте каждый хаскельный пакет поставляется в двух вариантах - ghc6-что-то-dev и ghc6-что-то-prof, так что нужно поставить prof версии необходимых пакетов.

А ещё лучше скачать свежий релиз GHC (там уже за 7.*, 6 быстро стареет) и ставить все библиотеки cabal-ом в $HOME (я не помню точно нужно ли что-то делать для профайлинга, но вот у меня после ручной установки GHC и либ cabal-ом всё работает).

quasimoto ★★★★
()

Попробуй

ghc -O2 --make BooleanMatrix.hs -prof -auto-all -caf-all -fforce-recomp -rtsopts

А, вообще, у тебя старый GHC. Новый ставится так.

Сначала скачиваешь бинарник GHC для линукса. Лучше версии 7.0.3. Устанавливаешь через configure, make, sudo make install. Проверяешь, что все работает, запустив ghci.

Затем скачиваешь последние официальные исходники Haskell Platform. Они заточены на GHC 7.0.3. Делаешь configure, make, sudo make install. Запускаешь cabal update.

Все. Система готова. Но прежде нужно выпилить GHC 6.12.3, который идет с дистрибутивом.

dave ★★★★★
()
Ответ на: комментарий от dave

> А, вообще, у тебя старый GHC. Новый ставится так.

Сначала скачиваешь бинарник GHC для линукса. Лучше версии 7.0.3. Устанавливаешь через configure, make, sudo make install. Проверяешь, что все работает, запустив ghci.

Затем скачиваешь последние официальные исходники Haskell Platform. Они заточены на GHC 7.0.3. Делаешь configure, make, sudo make install. Запускаешь cabal update.

Все. Система готова. Но прежде нужно выпилить GHC 6.12.3, который идет с дистрибутивом.

lol

У тебя не слакварь?

Вообще я совсем не понимаю людей в этом треде. Куча людей, жующих кактус. Осильте же gentoo

anonymous
()
Ответ на: комментарий от anonymous

Вообще я совсем не понимаю людей в этом треде. Куча людей, жующих кактус.

В убунте только так :) Там пакеты к хаскелю старые и дурацкие, поэтому приходится разводить локальный слакварь (и не только для хаскеля - для лиспа, например, тоже).

quasimoto ★★★★
()
Ответ на: комментарий от anonymous

Но-но! В слакваре с хаскелем гораздо лучше чем в убунту.

KblCb ★★★★★
()
Ответ на: комментарий от aho

А у меня - ghc6 6.12.3-1ubuntu7, update недавно делался, сторонних реп нету. Ну и 7.0.4 тоже не последний релиз, плюс там около сотни пакетов вида libghc6-* - их тоже пока не спешат бампить. Короче, apt-get и хаскельная инфраструктура плохо совместимы, ИМХО.

quasimoto ★★★★
()
Ответ на: комментарий от quasimoto

apt-get

debo репозитории убунты, в смысле. Единственный нормальный способ ставить хаскельный тулчайн и либы средствами дистрибутива есть только в gentoo (c добавлением gentoo-haskell overlay), правильно anonymous говорит.

quasimoto ★★★★
()
Ответ на: комментарий от aho

Действительно, есть поновее. Но с этим пакадж-манагером столько проблем. Ну, его нафиг! Ручками проще. Да и есть всегда возможность использовать самое новое, не дожидаясь посредников в лице мантейнеров дистрибутива.

dave ★★★★★
()
Ответ на: комментарий от dave

> Но я сейчас ленивый стал :)

gentoo для ленивых: один раз настроил, поставил, и работай

руками же всё переставлять, пересобирать, и т.д. - это удел трудоголиков/юношей с горящими глазами.

anonymous
()
Ответ на: комментарий от anonymous

gentoo для ленивых: один раз настроил, поставил, и работай

Да ладно, один раз настроил, потом сменил компьютер, и вторая настройка первую напоминать будет отдалённо - всё равно придётся выгугливать про всё своё железо и многочисленные опции ядра/компилятора (ведь нет смысла ставить gentoo с generic ядром и user land-ом).

quasimoto ★★★★
()
Ответ на: комментарий от quasimoto

> Да ладно, один раз настроил, потом сменил компьютер, и вторая настройка первую напоминать будет отдалённо - всё равно придётся выгугливать про всё своё железо и многочисленные опции ядра/компилятора (ведь нет смысла ставить gentoo с generic ядром и user land-ом).

Менял ноуты/компы — джента переезжала копированием с пересборкой ядра доустановкой мелочей вроде ucode для wifi

Я никогда на надр#чивал разные мега-опции компиляции, у меня стоят -02 -pipe для Си и Схх — полёт нормальный

anonymous
()
Ответ на: комментарий от anonymous

джента переезжала копированием

Копированием всего / ? Вообще да, можно сделать себе свой личный stage4(5?), тогда переезд будет по-проще.

пересборкой ядра

Вот это как раз и лень :)

quasimoto ★★★★
()
Ответ на: комментарий от quasimoto

> Копированием всего / ? Вообще да, можно сделать себе свой личный stage4(5?), тогда переезд будет по-проще.

Конечно, не делать же всё заново. И нас не винда — скопировал, поставил загрузчик, вуаля

> пересборкой ядра

Вот это как раз и лень :)

Ну да, собрать ядро в дефолтной конфигурации/запустить менюконфиг — сложнее установки нового дистра. Как же как же

anonymous
()
Ответ на: комментарий от anonymous

Ну да, собрать ядро в дефолтной конфигурации/запустить менюконфиг — сложнее установки нового дистра. Как же как же

Вот всё дефолтное как раз можно получить в федорах/убунтах, причём без чтения хэндбуков, генту обычно ставят когда хотят иметь кастомное ядро/приложения. Конечно тут можно поспорить - можно поставить генту без конфигурирования ядра под железо и приложений под процессор и при этом всё равно получить преимущество в виде portage.

quasimoto ★★★★
()
Ответ на: комментарий от quasimoto

Дефолтная конфигурация ядра — это make defconfig. Какие хэндбуки?

Короче, джента — рулит и педалит. Вот только не все понимают, как и куда рулить, а до педалей дотянутся могут вообще единицы.

anonymous
()
Ответ на: комментарий от dave

ghc -O2 --make BooleanMatrix.hs -prof -auto-all -caf-all -fforce-recomp -rtsopts

Шикарно, спасибо.

garmonbozia
() автор топика
Ответ на: комментарий от quasimoto

есть, emerge никто не отменял, а система очень удобная. Да и пересобрать систему с новыми флагами не так уж и тяжело. А если не было перехода с intel на amd и комп новее, то можно вобще обновлять только используемое.

P.S. и для haskell gentoo _очень_ удобна

qnikst ★★★★★
()
Ответ на: комментарий от garmonbozia

> Забавно выглядит, когда на вопрос «как сделать в X?» отвечают «поставь себе Y и сделай в Y».

Представь себе слепого человека, котроый на карачках ползёт куда-то, ударяется головой и спрашивает, куда и в какую сторону ползти дальше, чтоб добраться до библиотеки

Все предложения развязать глаза, подняться на ноги, взять такси/сесть на автобус — человек игнорирует

Забавно, что ты сам создаёшь себе трудности и будешь их создавать до радикального пересмотра своего окружения

Если ты занимаешься разработкой — выбирай подходящие инструменты

anonymous
()

а почему вопрос про профилирование, а в коде несобирающаяся программа? тут неясно, что по сути отвечать.

Из профилировщиков отличный criterion для просмотра скорости работы функций:

http://ken.friislarsen.net/blog/2011/09/28/quality-assessment-haskell-program/ — тут интересная ссылка

http://www.haskell.org/ghc/docs/7.2.1/html/users_guide/profiling.html — доки ghc

http://book.realworldhaskell.org/read/profiling-and-optimization.html — много примеров на RWH

http://www.scs.stanford.edu/11au-cs240h/notes/perf-slides.html#(1) — слайды с лекций в стендфорде cs240h, тоже полезно

qnikst ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.