По крайней мере, в Linux библиотека глаголов InfiniBand полностью поточнобезопасна.Таким образом, вы можете использовать столько или несколько пар очередей (QP) в своем многопоточном приложении, сколько вам нужно - несколько потоков могут безопасно отправлять рабочие запросы на один QP, хотя, конечно, вам нужно будет убедиться, что отслеживание выдающихся запросов выполнено.запросы и т. д., которые вы делаете в своем собственном приложении, являются поточно-ориентированными.
Это правда, что каждая очередь отправки и каждая очередь приема (помните, что QP на самом деле является парой очередей :), прикреплена к однойочередь завершения (CQ).Так что если вы хотите, чтобы у каждого потока был свой собственный CQ, то каждый поток должен иметь свой собственный QP для отправки работы.
В общем случае QP и CQ на самом деле не являются ограниченным ресурсом - вы можете легко иметь сотни или тысячина одном узле без проблем.Таким образом, вы можете создать свое приложение, не беспокоясь об абсолютном количестве очередей, которые вы используете.Это не означает, что вам не нужно беспокоиться о масштабируемости - например, если у вас много очередей приема и много буферов в очереди, то вы можете связать слишком много памяти в приемной буферизации, так что вы в конечном итогенеобходимо использовать общие очереди приема (SRQ).
Существует несколько библиотек промежуточного программного обеспечения, использующих IB;вероятно, MPI (например, http://open -mpi.org / ) является наиболее известным, и, вероятно, стоит оценить его, прежде чем вы слишком далеко зайдете в переизобретении вещей.Разработчики MPI также опубликовали множество исследований об эффективном использовании IB / RDMA, которые, вероятно, стоит найти, если вы решите построить свою собственную систему.