Unknown - haskell-notes

Здесь есть возможность читать онлайн «Unknown - haskell-notes» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Старинная литература, на английском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

haskell-notes: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «haskell-notes»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

haskell-notes — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «haskell-notes», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

#-} foldl ( ++) []

Напомню, что прагмой называется специальный блочный комментарий с решёткой. Это специальное со-

общение компилятору. Прагмой SCCмы устанавливаем так называемый центр затрат (cost center). Она пи-

шется сразу за знаком равно. В кавычках пишется имя, под которым статиситика войдёт в итоговый отчёт.

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

скомпилировать модуль с флагом prof, который активирует подсчёт статистики в центрах затрат:

$ ghc --make concat.hs -rtsopts -prof -fforce-recomp

$ ./concat +RTS -p

Второй командой мы запускаем программу и передаём вычислителю флаг p. После этого будет создан

файл concat .prof. Откроем этот файл:

concat +RTS -p -RTS

total time

=

1.45 secs

(1454 ticks @1000 us, 1 processor)

total alloc =1,403,506,324 bytes

(excludes profiling overheads)

COST CENTRE MODULE

%time %alloc

left

Main

99.8

99.8

individual

inherited

COST CENTRE MODULE

no .

entries

%time %alloc

%time %alloc

MAIN

MAIN

46

0

0.0

0.0

100.0

100.0

CAF

GHC.Integer.Logarithms.Internals

91

0

0.0

0.0

0.0

0.0

CAF

GHC.IO.Encoding.Iconv

71

0

0.0

0.0

0.0

0.0

CAF

GHC.IO.Encoding

70

0

0.0

0.0

0.0

0.0

CAF

GHC.IO.Handle.FD

57

0

0.0

0.0

0.0

0.0

CAF

GHC.Conc.Signal

56

0

0.0

0.0

0.0

0.0

CAF

Main

53

0

0.2

0.2

100.0

100.0

right

Main

93

1

0.0

0.0

0.0

0.0

left

Main

92

1

99.8

99.8

99.8

99.8

Мы видим, что почти всё время работы программа провела в функции concatL. Функция concatR была

вычислена мгновенно (time) и почти не потребовала ресусов памяти (alloc). У нас есть две пары колонок ре-

зультатов. individual указывает на время вычисления функции, а inherited – на время вычисления функции

и всех дочерних функций. Колонка entries указывает число вызовов функции. Если мы хотим проверить все

функции мы можем не указывать функции прагмами. Для этого при компиляции указывается флаг auto -all.

Отметим также, что все константы определённый на самом верхнем уровне модуля, сливаются в один центр.

Они называются в отчёте как CAF. Для того чтобы вычислитель следил за каждой константой по отдельности

необходимо указать флаг caf -all. Попробуем на таком модуле:

module Main where

fun1 =test concatL -test concatR

fun2 =test concatL +test concatR

Статистика выполнения программы | 167

test f =last $f $map return [1 ..1e4]

concatR =foldr ( ++) []

concatL =foldl ( ++) []

main =print fun1 >>print fun2

Скомпилируем:

$ ghc --make concat2.hs -rtsopts -prof -auto-all -caf-all -fforce-recomp

$ ./concat2 +RTS -p

0.0

20000.0

После этого можно открыть файл concat2 .prof и посмотреть итоговую статистику по всем значениям.

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

хватит памяти на стеке, в этом случае вы можете добавить памяти с помощью флага вычислителя K, впрочем

если это произойдёт GHC подскажет вам что делать.

Динамика изменения объёма кучи

В предыдущем разделе мы смотрели общее время и память затраченные на вычисление функции. В этом

мы научимся измерять динамику изменения расхода памяти на куче. По этому показателю можно понять

в какой момент в программе возникают утечки памяти. Мы увидим характерные горбы на картинках, ко-

гда GC будет активно запрашивать новую память. Для этого сначала нужно скомпилировать программу с

флагом prof как и в предыдущем разделе, а при выполнении программы добавить один из флагов hc, hm,

hd, hy или hr. Все они начинаются с буквы h, от слова heap (куча). Вторая буква указывает тип графика,

какими показателями мы интересуемся. Все они создают специальный файл имяПриложения.hp, который мы

можем преобразовать в график в формате PostScriptс помощью программы hp2ps, она устанавливается

автоматически вместе с GHC.

Рассмотрим типичную утечку памяти (из упражнения к предыдущей главе):

module Main where

import System.Environment(getArgs)

main =print .sum2 .xs .read =<<fmap head getArgs

wherexs n =[1 ..10 ^n]

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «haskell-notes»

Представляем Вашему вниманию похожие книги на «haskell-notes» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «haskell-notes»

Обсуждение, отзывы о книге «haskell-notes» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x