Size: a a a

Compiler Development

2020 April 27

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
Имена надо как-то синхронизировать постоянно. Не понятно, возможно ли это делать без сбора всей иныормации на одном узле. Там же не доказывается, что от порядка операций ничего не зависит.
Это Вы, очевидно, какой-то конкретный сценарий работы подразумеваете. А так-то легко в Linda организовать аналог PGAS. Кроме того, совершенно необязательно процессу знать имена заранее — там же запросы задаются на уровне сопоставления с образцом.
источник

МБ

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

PS

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

МБ

Михаил Бахтерев in Compiler Development
PGAS проще и предсказуемей.
источник

PS

Peter Sovietov in Compiler Development
А это то же самое. Вы же видели, как в Parallella это работало? Точно так же можно оформлять кортежи.
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
А это уже детали реализации, организации контроллера памяти/маршрутизатора/и проч.
Ну. Если уж нам детали не важны, то можно и на Coq-е матрицы умножать. Авось, к точке Омега, подходящий компьютер будет реализован :)
источник

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
Ну. Если уж нам детали не важны, то можно и на Coq-е матрицы умножать. Авось, к точке Омега, подходящий компьютер будет реализован :)
Вот! Я к этому и вел изначально ;)
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
А это то же самое. Вы же видели, как в Parallella это работало? Точно так же можно оформлять кортежи.
Совсем не то же самое. В PGAS заранее пространство разделяется на окна.
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
А это то же самое. Вы же видели, как в Parallella это работало? Точно так же можно оформлять кортежи.
Я в Parallella только пересылку сообщений смотрел. Стыд мне и позор!
источник

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
Совсем не то же самое. В PGAS заранее пространство разделяется на окна.
Можно ведь первым значением кортежа-сообщения задавать адрес. А маршрутизатор пусть разбирается, куда кортеж пересылать.

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

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
Можно ведь первым значением кортежа-сообщения задавать адрес. А маршрутизатор пусть разбирается, куда кортеж пересылать.

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

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
Так там низя же так. Кореж виден глобально.
Так и PGAS-память доступна глобально. Вопрос в эффективности доступа.
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
Так и PGAS-память доступна глобально. Вопрос в эффективности доступа.
Ну... Зависит от реализации. Насколько я знаю популярностью пользуется только SHMEM, который явно открывает окна в локальную память. Остальное слишком медленно работает.
источник

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
Ну... Зависит от реализации. Насколько я знаю популярностью пользуется только SHMEM, который явно открывает окна в локальную память. Остальное слишком медленно работает.
Да, вроде бы, во всех реализациях PGAS у каждого узла есть доступ к локальной памяти другого узла, это основа. Но, в отличие от других моделей распределенной глобальной памяти, в PGAS у нас есть доп. информация о том, в каких диапазонах адресов находятся локальные памяти отдельных узлов. Этой информацией пользуется компилятор и программист. В этом смысле PGAS — пример модели, которая эффективна на практике благодаря отказу от лишних абстракций, близости к "железу" :)
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
Да, вроде бы, во всех реализациях PGAS у каждого узла есть доступ к локальной памяти другого узла, это основа. Но, в отличие от других моделей распределенной глобальной памяти, в PGAS у нас есть доп. информация о том, в каких диапазонах адресов находятся локальные памяти отдельных узлов. Этой информацией пользуется компилятор и программист. В этом смысле PGAS — пример модели, которая эффективна на практике благодаря отказу от лишних абстракций, близости к "железу" :)
Ну... Можно и так сказать.
источник

МБ

Михаил Бахтерев in Compiler Development
И Вы предлагаете так же разделять пространство имён? Тут тогда возникает вопрос: а что будет, если хранитель имён отключился?
источник

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
И Вы предлагаете так же разделять пространство имён? Тут тогда возникает вопрос: а что будет, если хранитель имён отключился?
В типичных приложениях для PGAS используется SPMD в качестве модели вычислений. В результате у  нас или статический параллелизм, когда все имена известны во время компиляции, или есть какой-то параметр (например, число блоков независимой обработки массива), с помощью которого можно адресоваться к динамически создаваемым процессам и их данным. А "хранитель имен" это просто распределенный маршрутизатор. Вопросы живучести/отказоустойчивости предлагаю сейчас не рассматривать :)
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
В типичных приложениях для PGAS используется SPMD в качестве модели вычислений. В результате у  нас или статический параллелизм, когда все имена известны во время компиляции, или есть какой-то параметр (например, число блоков независимой обработки массива), с помощью которого можно адресоваться к динамически создаваемым процессам и их данным. А "хранитель имен" это просто распределенный маршрутизатор. Вопросы живучести/отказоустойчивости предлагаю сейчас не рассматривать :)
Ну... Если не рассматривать. Ладно. Хотя, странно для распределённой системы.

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

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
Ну... Если не рассматривать. Ладно. Хотя, странно для распределённой системы.

Осталось понять, как будет выглядеть алгоритм блочного умножения матриц в такой модели.
Мы, пожалуй, слишком увлеклись обсуждением PGAS. Linda — значительно более высокоуровневая вещь. Для нее, вообще говоря, требуется своеобразный вариант распределенной разделяемой памяти (DSM) — ассоциативная DSM. В этом смысле координационная работа в Linda на уровне сопоставления с образцом на множестве кортежей напоминает систему переписывания.

По поводу отказоустойчивости вот, например, есть диссертация "Supporting fault-tolerant parallel programming in Linda": https://repository.arizona.edu/bitstream/handle/10150/186872/azu_td_9507003_sip1_m.pdf?sequence=1

Перемножение матриц, да? Есть очень хороший учебник Воеводиных "Параллельные вычисления". Там один из разделов посвящен Linda и в числе примеров как раз есть это самое перемножение матриц. Учебник, кстати говоря, в любом случае советую. Фундамент всегда важен.
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
Мы, пожалуй, слишком увлеклись обсуждением PGAS. Linda — значительно более высокоуровневая вещь. Для нее, вообще говоря, требуется своеобразный вариант распределенной разделяемой памяти (DSM) — ассоциативная DSM. В этом смысле координационная работа в Linda на уровне сопоставления с образцом на множестве кортежей напоминает систему переписывания.

По поводу отказоустойчивости вот, например, есть диссертация "Supporting fault-tolerant parallel programming in Linda": https://repository.arizona.edu/bitstream/handle/10150/186872/azu_td_9507003_sip1_m.pdf?sequence=1

Перемножение матриц, да? Есть очень хороший учебник Воеводиных "Параллельные вычисления". Там один из разделов посвящен Linda и в числе примеров как раз есть это самое перемножение матриц. Учебник, кстати говоря, в любом случае советую. Фундамент всегда важен.
У Воеводиных есть про Линду?
источник