Ho alcuni computer multi-core collegati dalla rete Infiniband. Mi piacerebbe avere un calcolo a bassa latenza su un pool di memoria condivisa, con operazioni atomiche remote. So che RDMA è la strada da percorrere. Su ciascun nodo vorrei registrare un'area di memoria (e un dominio di protezione) per la condivisione dei dati.Condivisione della memoria RDMA
Gli esempi RDMA in linea spesso si concentrano su una singola connessione tra un server a thread singolo e un client a thread singolo. Ora mi piacerebbe avere un processo multi-thread su ciascuno dei nodi Infiniband. Sono molto perplesso circa la seguente ...
Quante paia coda devo prepararmi su ciascun nodo, per un cluster di n nodi e le discussioni m in totale? Per essere più specifici, più thread sullo stesso nodo condividono la stessa coppia di code?
Quante code di completamento devo preparare su ciascun nodo? Avrò più thread che pubblicano operazioni remote read/write/cas su ciascun nodo. Se dovessero condividere una coda di completamento comune, gli eventi di completamento verranno confusi. Se i thread hanno le loro code di completamento separate, ce ne sarebbero davvero molte.
Mi consigliate di avere eventuali librerie esistenti invece di scrivere questo software? (Hmm, o dovrei scrivere una e open-source è? :-)
Grazie per il suggerimento tipo (s).
E il codice sorgente delle coppie di code (QP), coda di completamento (CQ) e code di ricezione condivise (SRQ) devono scrivere da soli, oppure posso preparare la loro implementazione (come best practice) e dove possono prendere? – Alex