[Haskell] Основные тормоза в ленивых вычислениях
От: Andir Россия
Дата: 25.02.07 07:49
Оценка:
Привет RSDN!

Собственно subj, на что в первую очередь обращать внимание при оптимизации?

P.S. И ещё вопросик: а как в GHC заставить выдавать осмысленный стек вызовов, а не просто "Prelude index out of range."?

С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha rev. 652 ) { /* Работаем */ }
Re: [Haskell] Основные тормоза в ленивых вычислениях
От: Quintanar Россия  
Дата: 25.02.07 12:11
Оценка: 1 (1)
Здравствуйте, Andir, Вы писали:

A>P.S. И ещё вопросик: а как в GHC заставить выдавать осмысленный стек вызовов, а не просто "Prelude index out of range."?


Там нет стека в нормальном понимании этого слова. Т.е. последовательности вызванных функций ты получить не сможешь.
Re[2]: [Haskell] Основные тормоза в ленивых вычислениях
От: Andir Россия
Дата: 25.02.07 13:00
Оценка:
Здравствуйте, Quintanar, Вы писали:

A>>P.S. И ещё вопросик: а как в GHC заставить выдавать осмысленный стек вызовов, а не просто "Prelude index out of range."?

Q>Там нет стека в нормальном понимании этого слова. Т.е. последовательности вызванных функций ты получить не сможешь.

А хотя бы место в исходнике и/или имя функции где произошла ошибка?

С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha rev. 652 ) { /* Работаем */ }
Re: [Haskell] Основные тормоза в ленивых вычислениях
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 25.02.07 15:48
Оценка: 12 (2)
Andir,

A>Собственно subj, на что в первую очередь обращать внимание при оптимизации?


A>P.S. И ещё вопросик: а как в GHC заставить выдавать осмысленный стек вызовов, а не просто "Prelude index out of range."?


Думаю это прольёт свет на многие вопросы: Making Haskell programs faster and smaller
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[3]: [Haskell] Основные тормоза в ленивых вычислениях
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 25.02.07 16:43
Оценка:
Здравствуйте, Andir, Вы писали:

A>А хотя бы место в исходнике и/или имя функции где произошла ошибка?


Так это есть.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: [Haskell] Основные тормоза в ленивых вычислениях
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 25.02.07 16:53
Оценка: 14 (1)
Здравствуйте, Andir, Вы писали:

A>Собственно subj, на что в первую очередь обращать внимание при оптимизации?


Ленивые вычисления медленнее неленивых. Если есть тормоза, связанные именно с ленивостью, то делай неленивые. Профайлинг поможет определить место, где это нужно. Из своего опыта могу сказать, что стоит сначала посмотреть на логику в этом месте, у меня переход к strictness помог лишь однажды и то не сильно. Большей частью проблемы были алгоритмические, причем значительно больше

Ну, или есть конкретный затык — спрашивай!

Вот ещё линк вдогонку http://www.haskell.org/haskellwiki/Performance
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: [Haskell] Основные тормоза в ленивых вычислениях
От: Аноним  
Дата: 25.02.07 20:09
Оценка: 23 (2)
Здравствуйте, Andir, Вы писали:

A>Привет RSDN!


A>Собственно subj, на что в первую очередь обращать внимание при оптимизации?


A>P.S. И ещё вопросик: а как в GHC заставить выдавать осмысленный стек вызовов, а не просто "Prelude index out of range."?


A>С Уважением, Andir!


если скомпилить программу с профайлингом то стек вызовов при ошибке выдаётся если стоит -xc RTS опция
здесь
Re[2]: [Haskell] Основные тормоза в ленивых вычислениях
От: Аноним  
Дата: 25.02.07 20:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Andir, Вы писали:


A>>Привет RSDN!


A>>Собственно subj, на что в первую очередь обращать внимание при оптимизации?


A>>P.S. И ещё вопросик: а как в GHC заставить выдавать осмысленный стек вызовов, а не просто "Prelude index out of range."?


A>>С Уважением, Andir!


А>если скомпилить программу с профайлингом то стек вызовов при ошибке выдаётся если стоит -xc RTS опция

А>здесь

правда не всегда получается то что хочется, можно ещё пользоваться Hat'ом но он много чего не понимает, хотя я давно уже его пробывал, может уже доделали
Re[4]: [Haskell] Основные тормоза в ленивых вычислениях
От: Andir Россия
Дата: 26.02.07 00:26
Оценка:
Здравствуйте, lomeo, Вы писали:

A>>А хотя бы место в исходнике и/или имя функции где произошла ошибка?

L>Так это есть.

Где? Я правда всего два типа ошибок времени выполнения пока словил, аля Index out of range и Stack Overflow, но в обоих случаях кроме загадочной надписи ничего не выводится Жутко неудобно угадывать, где ошибка. Только собственно print-debugging и помогает

С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha rev. 652 ) { /* Работаем */ }
Re[3]: [Haskell] Основные тормоза в ленивых вычислениях
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.02.07 19:34
Оценка:
Просьба, не оверквотить.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [Haskell] Основные тормоза в ленивых вычислениях
От: Andir Россия
Дата: 27.02.07 12:36
Оценка:
Здравствуйте, Andir, Вы писали:

A>Собственно subj, на что в первую очередь обращать внимание при оптимизации?


Попробую ещё уточнить вопрос
Собственно в чём дело. Пишу программку на Хаскеле, запускаю. Вижу результат и время работы. Время работы скажем достаточно большое, и интуитивно ясно, что где-то на вычислениях проседает производительность.
Так вот прежде чем брать профайлер в руки, хотелось бы хоть как-то на глаз оценить в каких местах может происходить такое проседание производительности. То есть какие-нибудь Code Practics для предварительного выявления возможных проблем связанных с ленивостью вычислений.
Пример: Ясно что например не стоит оставлять ленивость, когда вычисления ёмкие по памяти, объединяются в список для последующей свёртки в результат. (Хотя вот написал это и меня стали обуревать сомнения, явно не хватает ещё знаний).

С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha rev. 652 ) { /* Работаем */ }
Re[5]: [Haskell] Основные тормоза в ленивых вычислениях
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 27.02.07 14:46
Оценка:
Здравствуйте, Andir, Вы писали:

A>Где? Я правда всего два типа ошибок времени выполнения пока словил, аля Index out of range и Stack Overflow, но в обоих случаях кроме загадочной надписи ничего не выводится Жутко неудобно угадывать, где ошибка. Только собственно print-debugging и помогает


Да, я стормозил что то. Извиняюсь за дезинформацию.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: [Haskell] Основные тормоза в ленивых вычислениях
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 27.02.07 14:46
Оценка: 14 (1)
Здравствуйте, Andir, Вы писали:

A>>Собственно subj, на что в первую очередь обращать внимание при оптимизации?


Однозначно на профайлер! -auto-all -prof при компиляции, а потом +RTS -p -RTS при запуске.

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


Эти code practics нужны не для выявления (сравни с обычными языками), а для написания. Не используй конкатенацию строк в Яве, скорее всего тебе нужен StringBuffer, не используй (!!) в Haskell, скорее всего тебе нужен массив или смена (взгляда на) алгоритма.

A>Пример: Ясно что например не стоит оставлять ленивость, когда вычисления ёмкие по памяти, объединяются в список для последующей свёртки в результат. (Хотя вот написал это и меня стали обуревать сомнения, явно не хватает ещё знаний).


Зависит от. foldl с оптимизацией свернётся в хвостовую рекурсию и список над которым он работает (если он создаётся в процессе свёртки) не будет создаваться реально, потому что к тому времени, как нам потребуется хвост, нужды в голове уже не будет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.