Size: a a a

Compiler Development

2020 March 19

МБ

Михаил Бахтерев in Compiler Development
FORTRAN ONE LOVE
фортран сделали параллельным. и зачем? его параллельность внутри языка никто не использует
А как же DVM? Вроде, это активно используется. Нет?
источник

__

_________ _________ in Compiler Development
Михаил Бахтерев
Диссертация из прошлого с интересными деталями чего-то типа распараллеливающего компилятора для haskellьного языка. Содержит хороший обзор того, что делали в 80-ых. Все пытались сделать параллельный функциональный язык. Почему не взлетело интересно?

https://pdfs.semanticscholar.org/6cc0/3ca51b87e02c6523409e4d4a858f8fcb06b4.pdf
всем общий салам посылать
источник

AT

Alexander Tchitchigin in Compiler Development
Михаил Бахтерев
Диссертация из прошлого с интересными деталями чего-то типа распараллеливающего компилятора для haskellьного языка. Содержит хороший обзор того, что делали в 80-ых. Все пытались сделать параллельный функциональный язык. Почему не взлетело интересно?

https://pdfs.semanticscholar.org/6cc0/3ca51b87e02c6523409e4d4a858f8fcb06b4.pdf
> Почему не взлетело интересно?

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

Впрочем, Data Parallel Haskell, как я слышал, живёт и здравствует...
источник

E

Eugene in Compiler Development
Alexander Tchitchigin
> Почему не взлетело интересно?

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

Впрочем, Data Parallel Haskell, как я слышал, живёт и здравствует...
> Впрочем, Data Parallel Haskell, как я слышал, живёт и здравствует...

разве? я слышал, что он помер уже давно...
источник

AT

Alexander Tchitchigin in Compiler Development
Eugene
> Впрочем, Data Parallel Haskell, как я слышал, живёт и здравствует...

разве? я слышал, что он помер уже давно...
🤷‍♀️
источник

KR

K R in Compiler Development
Правильно ли я понимаю, что основная проблема в этих параллельных фортранах в том, что в линейной алгебре нет хороших примитивов, позволяющих закодировать сложные алгоритмы в высокоуровневом, легко параллелизуемом представлении?
источник

FO

FORTRAN ONE LOVE in Compiler Development
K R
Правильно ли я понимаю, что основная проблема в этих параллельных фортранах в том, что в линейной алгебре нет хороших примитивов, позволяющих закодировать сложные алгоритмы в высокоуровневом, легко параллелизуемом представлении?
Не правильно. Есть ScaLAPACK для таких вещей
источник

PS

Peter Sovietov in Compiler Development
Основная проблема в том, что авторы подобных систем страшно далеки от аппаратуры. Параллельные фортраны в этом плане — еще выгодно выделяются. Все-таки там технологии распараллеливания развиваются еще с 70-х. И у условиях суперкомпьютеров все это параллельное-фортрановское хозяйство, разумеется, используется. Но только без прагм, разумеется, не обходится.
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
Основная проблема в том, что авторы подобных систем страшно далеки от аппаратуры. Параллельные фортраны в этом плане — еще выгодно выделяются. Все-таки там технологии распараллеливания развиваются еще с 70-х. И у условиях суперкомпьютеров все это параллельное-фортрановское хозяйство, разумеется, используется. Но только без прагм, разумеется, не обходится.
А можете пояснить, в чём это удаление выражается?
источник

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
А можете пояснить, в чём это удаление выражается?
Ну Вы посмотрите даже на относительно простые manycore-архитектуры в духе Kalray или Tilera. Там масса аппаратных нюансов, которые легко разрушают абстракции в духе вышеприведенной диссертации.
источник

МБ

Михаил Бахтерев in Compiler Development
Но там же не для произвольной архитектуры, а для машины с распределённой памятью. То есть, это не manycore
источник

PS

Peter Sovietov in Compiler Development
Так manycore в отличие от multicore это как раз машины с наличием распределенной памяти. Потому что без распределенной памяти вы эффективно не сможете масштабировать число вычислителей.
источник

PS

Peter Sovietov in Compiler Development
Или вот два примера manycore-чипов из списка TOP500: Pezy-SC2 и SW26010. Никто их на параллельных Haskell-подобных языках не программирует. Там все, увы, гораздо прозаичнее :)
источник

p

polunin.ai in Compiler Development
Подскажите как реализовать базовые операции (+, *, >, !=, &&, etc) для языка чтобы было без особой боли сейчас и в будущем. Придумал несколько вариантов:
1. Для примитивов закрепить четкое поведение на уровне компилятора. Для пользовательских типов данных потом добавить в сишном стиле ( operator+(self) -> Self).
2. Делать сразу какие-то интерфейсы/типажи/тайпклассы и реализовывать для примитивов тоже их. Чую что если делать так то нужно сразу расписывать систему типов аж до обобщений, что меня чего-то беспокоит, так как я пока не в курсах как это можно сделать вообще.

Повторю: вопрос как сделать максимально без гемороя и чтобы не пришлось потом городить костыли в будущем
источник

AT

Alexander Tchitchigin in Compiler Development
polunin.ai
Подскажите как реализовать базовые операции (+, *, >, !=, &&, etc) для языка чтобы было без особой боли сейчас и в будущем. Придумал несколько вариантов:
1. Для примитивов закрепить четкое поведение на уровне компилятора. Для пользовательских типов данных потом добавить в сишном стиле ( operator+(self) -> Self).
2. Делать сразу какие-то интерфейсы/типажи/тайпклассы и реализовывать для примитивов тоже их. Чую что если делать так то нужно сразу расписывать систему типов аж до обобщений, что меня чего-то беспокоит, так как я пока не в курсах как это можно сделать вообще.

Повторю: вопрос как сделать максимально без гемороя и чтобы не пришлось потом городить костыли в будущем
Если "не городить костыли в будущем", то имеет смысл заранее продумать систему типов "аж до обобщений", КМК.
источник

p

polunin.ai in Compiler Development
Ок. Думал может есть ещё какие-то подходы, о которых не знал.
источник

AT

Alexander Tchitchigin in Compiler Development
Для более быстрого прототипирования можно попробовать http://www.metaborg.org/en/latest/ - там есть специальные DSL для всего: грамматика, проверка типов, выполнение...
источник

AT

Alexander Tchitchigin in Compiler Development
polunin.ai
Ок. Думал может есть ещё какие-то подходы, о которых не знал.
Разве что определять всё как функции/методы a-la Smalltalk/Ruby/etc. 😊
источник

p

polunin.ai in Compiler Development
Alexander Tchitchigin
Для более быстрого прототипирования можно попробовать http://www.metaborg.org/en/latest/ - там есть специальные DSL для всего: грамматика, проверка типов, выполнение...
Спасибо
источник
2020 March 20

KR

K R in Compiler Development
Peter Sovietov
Так manycore в отличие от multicore это как раз машины с наличием распределенной памяти. Потому что без распределенной памяти вы эффективно не сможете масштабировать число вычислителей.
А как там с описанием такой машины?

В конце-концов, если взять человека с обычным дипломом программистского ПТУ №8, выдать ему 10 тысяч лет, код на Матлабе, этот человек рано или поздно напишет отлично оптимизированную и распараллеленную программу на языке Цэ или другом портируемом ассемблере.

А с другой стороны, высоколобые и умные люди не могут сварганить какой-то там компилятор.

Обычно это означает, что сама задача недопоставлена. То есть, нехватает каких-то определений, условий, что-то надо уточнять и т.д.
источник