Диплом, Scheme, параллельность
От: SergH Россия  
Дата: 27.02.07 11:04
Оценка: 108 (13)
Всем привет!

Вот тут http://rsdn.ru/Forum/Message.aspx?mid=2219258&only=1
Автор: SergH
Дата: 16.11.06
я обещал выложить реультаты, если получится что-то интересное. Хорошего не получилось, но мне лично всё равно интересно, так что выкладываю

Коротко о том, что я писал и что из этого вышло

Задача — автоматическое распараллеливание кода на Scheme. Подход — ленивые вычисления. Написан
компилятор в псевдокод и интерпретатор этого псевдокода. Все более-менее переносимо на
Windows/Linux/Unix/Mac OS. И даже работает на них (проверялось на Windows XP, Mac OS X, Ubundu).

Но вот эффективности добиться не удалось. На двухядерном ноуте с XP при добавлении многопоточности
удается получить повышение производительности на 10%, на двухядерном ноуте с Mac OS X — стабильное
понижение производительности в два раза А Ubundu у меня только в виртуалке стоит.

Запускать так:
compiler <файл_с_исходным_кодом> <выходной_файл><br>
executer <файл_с_псевдокодом> [<количество_дополнительных_потоков (по умолчанию — 0)>]

Результат защиты — 4 и статус "инженер-ктототам"

Если интересно подробнее, то: <br>
http://sergh.pisem.net/diplom/text_a5.zip — текст диплома (162 Кб)
http://sergh.pisem.net/diplom/code.zip — исходный код (89 Кб)

Но перед тем, как читать это, прочтите пару абзацев ниже

Извинения

Во-первых, текст оформлен на A5, 10-м Times-ом. Это у нас на факультете стандарт такой.
Чтобы нормально читать с экрана, нужно поставить 150%, тогда размер шрифта становится пристойным.

Во-вторых, почти нет шуток, совсем нет эпиграфов и мало картинок, а те, что есть — не цветные.
В прошлый раз (на бакалаворской) мне за особо удачный эпиграф поставили 3, с тех пор в
официальных документах не выпендриваюсь.

Во-третьих, соврешенно ужастное введение. Не читаейте. Точнее, прочтите, потому что всё —
правда, но учтите, что это один из тонких грязных трюков. Введение как-бы намекает, что
результатом работы будет (или хотябы может быть) увеличение производительности в 100 раз
Это совершенно не так. Но поскольку в прямую ничего подобного не обещалось, никто никому и не врал.
Нельзя так писать.

В-четвёртых, всё это — одна большая наглость с моей стороны. Чтобы нормально поднять такую тему
нужно на порядок больше знаний, чем у меня есть. Наглость прокатывает только потому,
что в этой области на моей кафедре никто не знает вообще ничего Я на их фоне выгляжу
корифеем.

Что читать

Введение — это такая агитка.
Первая глава — пожалуй, единственное, что есть интересного в тексте диплома.
Вторая глава — просто не читайте. Правда, она короткая
Третья глава — немного про архитектуру в целом.
Четвёртая глава — про реализацию компилятора. Интерес представляет нулевой раздел, остальное — только если вам вдруг правда интересно, как именно я писал компилятор.
Пятая глава — про реализацию интерпретатора. Аналогично четвёртой
Шестая глава — о! Целых три раздела Нулевой, 6.1.0, 6.2.0
Седьмая глава — пожалуй, вся, но она короткая
Заключение — ничего интересного.
Приложения 1,2 — только для фанатов, которые хотят продолжать моё дело

Поправки, ошибки, варианты, дополнения

* Много всего из стандарта не реализовано. Сразу предкпреждаю, чтобы не надеялись особо То, что реализовано, описано в приложении 1.
* Вопреки написанному в Приложении 1, не реализован or, and и cond. Компилятор их скомпилит, но интерпретатор — не поймёт. Это правда было очень просто, но чего-то лень было, да и ничего нового они не добавляют.
* Система оценок, конечно, слишком усложнена. Нужно было тупо считать ветки рекурсии, всё равно всё остальное игнорируется.
* На каждую ветку рекурсии нужно по потоку, иначе всё это работает плохо даже в теории. Но хотелось сначала добиться работоспособности от простой версии.
* Не реализован приоритет ожидающих исполнения заданий. Просто не придумал, на основвании чего этот приоритет устанавливать..
* make-файл работает на моём ubundu, но не сработал на Mac OS — там что-то с заголовочными файлами.. И ещё в Mac OS нет функции pthread_yield, но есть какой-то аналог.
* По-хорошему, нужно рассматривать всякие варианты, включая только частичную ленивость и разные стратегии вычисления спиков. Сложно, долго, не сделал.
Делай что должно, и будь что будет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.