У меня есть несколько многоядерных компьютеров, соединенных сетью Infiniband. Я хотел бы иметь некоторые вычисления с малой задержкой в пуле общей памяти с удаленными атомарными операциями. Я знаю, что RDMA — это путь. На каждом узле я бы зарегистрировал область памяти (и домен защиты) для обмена данными.
Онлайн-примеры RDMA часто фокусируются на одном соединении между однопоточным сервером и однопоточным клиентом. Теперь я хотел бы иметь многопоточный процесс на каждом узле Infiniband. Меня очень озадачило следующее...
Сколько пар очередей я должен подготовить на каждом узле, всего для кластера из n узлов и m потоков? Чтобы быть более конкретным, могут ли несколько потоков на одном узле совместно использовать одну и ту же пару очередей?
Сколько очередей завершения я должен подготовить на каждом узле? У меня будет несколько потоков, выполняющих удаленные операции чтения/записи/cas на каждом узле. Если бы они использовали общую очередь завершения, события завершения были бы перепутаны. Если бы у потоков были свои отдельные очереди завершения, их было бы действительно много.
Вы предлагаете мне иметь какие-либо существующие библиотеки вместо того, чтобы писать это программное обеспечение? (хм, или я должен написать один и открыть его исходный код? :-)
Спасибо за ваше любезное предложение (я).