Каковы различия между "положением" и "хранением" в многораздельных языках глобального адресного пространства (PGAS), таких как UPC?
Я новичок в области параллельного программирования и различных моделей. Мне было интересно, в чем разница между операциями типа "положить" и "сохранить" в языках, которые следуют модели PGAS. Кроме того, было бы очень полезно для меня, если бы вы могли направить меня к любым соответствующим ресурсам. Те, которые я просматривал, не отвечают на все мои вопросы.
1 ответ
В модели PGAS операция "put" обычно перемещает данные из памяти с привязкой к вызывающей стороне (она же локальная память) в общую память (возможно, с привязкой к удаленному узлу). Операция "get" перемещает данные в противоположном направлении; возможно от удаленной общей памяти до локальной памяти. Вместе эти операции также упоминаются под зонтиком удаленного доступа к памяти (RMA).
Существует множество механизмов для синхронизации завершения операций PGAS RMA (то есть выяснение, когда операция "выполнена", для некоторого соответствующего определения "выполнено"); они варьируются от "полной блокировки" (т. е. вызов внедрения RMA останавливает инициирующий поток до тех пор, пока он "не завершится"), до различных механизмов для синхронизации неблокирующих операций RMA (которые позволяют перекрывать несвязанную работу). Предполагая "одностороннюю" модель PGAS, они обычно имеют свойство, заключающееся в том, что завершение операции выполняется действием или сигналом вызывающей стороне (начальный ранг).
Термин "хранилище" нормативно не используется ни UPC, ни GASNet (помеченные модели). Другие модели PGAS могут иметь определенные значения для "магазина". В частности, в Split-C была операция "хранилище сигналов" с семантикой перемещения данных "положено", но отличается тем, что завершение сигнализируется рангу (возможно удаленному) со сродством к целевой памяти вместо ранга инициации,