Я слышал, что PSM - это библиотека, поддерживающая соответствие меток. Что такое интерфейс соответствия меток? Почему соответствие меток важно для производительности в контексте MPI?Что такое интерфейс соответствия меток?
ответ
Краткое введение в согласовании тегов для MPI: https://www.hpcwire.com/2006/08/18/a_critique_of_rdma-1/ раздел «Совпадение»
MPI представляет собой двусторонний интерфейс с большим согласующего пространство: MPI Recv связан с MPI Отправить по нескольким критериям таких как Отправитель, Тег и Контекст, причем первые два, возможно, игнорируются (подстановочный знак). Согласование не обязательно в порядке, и, что еще хуже, отправка MPI может быть отправлена до того, как соответствующий MPI Recv ... MPI требует 64 бит соответствующей информации, а MX, Portals и QsNet предоставляют такую возможность сопоставления.
InfiniBand Глаголы и другой RDMA на основе API-интерфейсы не поддерживают сопоставления на всех
Итак, это звучит как PSM является способом включить быстрое согласование в сетевых адаптеры Infiniband стиля (первые версии с подбором программного обеспечения, но с возможностью перемещения части согласования с оборудованием).
Я не могу найти общедоступную документацию PSM (в руководстве пользователя нет данных http://storusint.com/pdf/qlogic/InfiniPath%20User%20Guide%202_0.pdf). Но есть источники библиотеки: https://github.com/01org/psm
Некоторые детали перечислены в PSM2 презентации https://www.openfabrics.org/images/eventpresos/2016presentations/304PSM2Features.pdf
Что такое ПСМ? Сопрягано очереди (MQ) компонент
- • семантически соответствует потребностям MPI с помощью тега сопоставления
- • Обеспечивает вызовы прогресса связи гарантирует
- • семантики завершения MQ (стандарт по сравнению с синхронизированы)
PSM API
- • Глобальный согласующего тег API с 64-разрядные метки
- • масштабироваться до 64К процессов на работу
- • MQ API для обеспечения точка-точка сообщение проходит между конечными точками
- • например psm_mq_send, psm_mq_irecv
- • Нет функциональности «recvfrom» - необходимо для некоторых приложений
Итак, есть 64-битные метки. Каждое сообщение имеет тег, а в строке совпадающей очереди - тег (в некоторых реализациях соответствия меток есть также маска тегов). По словам источника psm_mq_internal.h: mq_req_match()
https://github.com/01org/psm/blob/67c0807c74e9d445900d5541358f0f575f22a630/psm_mq_internal.h#L381, есть маска в PSM:
typedef struct psm_mq_req {
...
/* Tag matching vars */
uint64_t tag;
uint64_t tagsel; /* used for receives */
...
} psm_mq_req_t;
mq_req_match(struct mqsq *q, uint64_t tag, int remove)
)
{
psm_mq_req_t *curp;
psm_mq_req_t cur;
for (curp = &q->first; (cur = *curp) != NULL; curp = &cur->next) {
if (!((tag^cur->tag) & cur->tagsel)) { /* match! */
if (remove) {
if ((*curp = cur->next) == NULL) /* fix tail */
q->lastp = curp;
cur->next = NULL;
}
return cur;
}
}
Итак, матч, когда входящий тег операции XOR с tag
из принимает, отправил к MQ, результат операции AND с tagsel
приемных , Если после этих операций есть только нулевые биты, совпадение найдено, иначе обрабатывается следующий прием.
Комментарий от psm_mq.h
, psm_mq_irecv()
функции, https://github.com/01org/psm/blob/4abbc60ab02c51efee91575605b3430059f71ab8/psm_mq.h#L206
/* Post a receive to a Matched Queue with tag selection criteria
*
* Function to receive a non-blocking MQ message by providing a preposted
* buffer. For every MQ message received on a particular MQ, the tag and @c
* tagsel parameters are used against the incoming message's send tag as
* described in tagmatch.
*
* [in] mq Matched Queue Handle
* [in] rtag Receive tag
* [in] rtagsel Receive tag selector
* [in] flags Receive flags (None currently supported)
* [in] buf Receive buffer
* [in] len Receive buffer length
* [in] context User context pointer, available in psm_mq_status_t
* upon completion
* [out] req PSM MQ Request handle created by the preposted receive, to
* be used for explicitly controlling message receive
* completion.
*
* [post] The supplied receive buffer is given to MQ to match against incoming
* messages unless it is cancelled via psm_mq_cancel @e before any
* match occurs.
*
* The following error code is returned. Other errors are handled by the PSM
* error handler (psm_error_register_handler).
*
* [retval] PSM_OK The receive buffer has successfully been posted to the MQ.
*/
psm_error_t
psm_mq_irecv(psm_mq_t mq, uint64_t rtag, uint64_t rtagsel, uint32_t flags,
void *buf, uint32_t len, void *context, psm_mq_req_t *req);
Пример кодирования данных в теге:
* uint64_t tag = (((context_id & 0xffff) << 48) |
* ((my_rank & 0xffff) << 32) |
* ((send_tag & 0xffffffff)));
С tagsel
маской мы можем закодировать как "соответствовать все", «матч метки с некоторыми байты или биты, равные значению, и все в другом "," точно совпадают ".
Существует новый API PSM2, с открытым исходным кодом - https://github.com/01org/opa-psm2, руководство для программистов опубликовано в http://www.intel.com/content/dam/support/us/en/documents/network/omni-adptr/sb/Intel_PSM2_PG_H76473_v1_0.pdf.
В тегах PSM2 длиннее, а правило соответствия определяется (Олень "Message Send Tag" - значение тега передается в сообщении, и rtag является тег приема запроса): https://www.openfabrics.org/images/eventpresos/2016presentations/304PSM2Features.pdf#page=7
Tag соответствие улучшение
- • Увеличенный размер тега до 96 бит
- • Фундаментально
((stag^rtag) & rtagsel) == 0
- • Поддержка wildca выстр, такие как
MPI_ANY_SOURCE
илиMPI_ANY_TAG
с использованием нулевых битов вrtagsel
- • Позволяет практически неограниченной масштабируемостью
- • До 64м процессов на работу
PSM2 TAG MATCHING
#define PSM_MQ_TAG_ELEMENTS 3 typedef struct psm2_mq_tag { union { uint32_t tag[PSM_MQ_TAG_ELEMENTS] __attribute__((aligned(16))); struct { uint32_t tag0; uint32_t tag1; uint32_t tag2; }; }; } psm2_mq_tag_t;
- • Применение заполняет 'тег' или 'tag0/tag1/tag2' и переходит к PSM
- • Оба теги и теги маска используют один и тот же 96 битного тип тега
И на самом деле есть источник равный адрес вблизи соответствующие переменные в psm2_mq_req
структуре: https://github.com/01org/opa-psm2/blob/master/psm_mq_internal.h#L180
/* Tag matching vars */
psm2_epaddr_t peer;
psm2_mq_tag_t tag;
psm2_mq_tag_t tagsel; /* used for receives */
И список программного обеспечения сканирования для матча , mq_list_scan()
вызывается из mq_req_match()
https://github.com/01org/opa-psm2/blob/85c07c656198204c4056e1984779fde98b00ba39/psm_mq_recv.c#L188:
psm2_mq_req_t
mq_list_scan(struct mqq *q, psm2_epaddr_t src, psm2_mq_tag_t *tag, int which, uint64_t *time_threshold)
{
psm2_mq_req_t *curp, cur;
for (curp = &q->first;
((cur = *curp) != NULL) && (cur->timestamp < *time_threshold);
curp = &cur->next[which]) {
if ((cur->peer == PSM2_MQ_ANY_ADDR || src == cur->peer) &&
!((tag->tag[0]^cur->tag.tag[0]) & cur->tagsel.tag[0]) &&
!((tag->tag[1]^cur->tag.tag[1]) & cur->tagsel.tag[1]) &&
!((tag->tag[2]^cur->tag.tag[2]) & cur->tagsel.tag[2])) {
*time_threshold = cur->timestamp;
return cur;
}
}
return NULL;
}
- 1. Что такое использование меток?
- 2. Что такое частный интерфейс?
- 3. Что такое интерфейс?
- 4. Что такое интерфейс?
- 5. Что такое интерфейс маркера?
- 6. Что такое интерфейс IServiceLocator?
- 7. Что такое свободный интерфейс?
- 8. Что такое интерфейс класса?
- 9. Что такое "ванильный веб-интерфейс"?
- 10. Что такое интерфейс в Java?
- 11. Что такое интерфейс Duck Typing?
- 12. Что такое интерфейс API OpenGL?
- 13. Что такое использование меток в C#?
- 14. Что такое порядок элементов/меток в CSS
- 15. Что такое действительные монеты-меток оплаты?
- 16. Подтверждение соответствия меток CodeIgniter Label
- 17. Что такое регулярное выражение для соответствия * text *?
- 18. Что такое интерфейс верхнего уровня в go?
- 19. Что такое «Интерфейс Builder Cocoa Touch Tool»
- 20. Что такое пустой интерфейс без методов?
- 21. Что такое самоопределяющийся ИНТЕРФЕЙС в fortran?
- 22. Что такое ссылочный объект в интерфейс?
- 23. Знает ли IL, что такое ИНТЕРФЕЙС?
- 24. Что такое API-интерфейс Android 4.0?
- 25. Что такое интерфейс/платформа api.ai и wit.ai?
- 26. Что такое текстовый API-интерфейс в Xcode
- 27. Что такое хороший интерфейс для карточной игры?
- 28. Что такое интерфейс Open Cloud Computing?
- 29. Что такое «интерфейс» в программировании OO?
- 30. Регулярное выражение для соответствия адреса меток
[Данная презентация] (HTTPS://www.youtube.com/watch?v=jf3C9kmRABc) на PSM, вероятно, прольет много света. –