PRISM¶
PRISM (Precision-aware Reduction In-Switch Module) è un prototipo RTL open source per lo studio delle operazioni collettive in-network (INC) su FPGA. Il progetto studia come riduzioni collettive quali REDUCE_SUM1 possano essere parzialmente trasferite dallo stack di comunicazione dell'acceleratore host (CPU/GPU) al data plane della rete. PRISM si colloca quindi nella direzione aperta da Mellanox/NVIDIA SHARP2: eseguire parte della riduzione nell'hardware di switching per diminuire il traffico agli endpoint e la latenza delle collettive.
Obiettivo
PRISM non cerca di clonare SHARP, né di riprodurre tutte le funzionalità di uno switch ASIC InfiniBand o Ethernet commerciale. È invece uno strumento hardware ispezionabile per studiare le primitive INC nei vincoli di una FPGA. La domanda è: come può un datapath simile a quello di uno switch combinare forwarding a line rate, accumulazione streaming delle collettive e aritmetica floating-point riproducibile?
Il datapath espone un'interfaccia AXI-Stream a 512 bit. Per il primo prototipo, OpenNIC è la piattaforma di riferimento: fornisce la shell entro cui sintetizzare PRISM su FPGA e l'integrazione con la NIC, i driver e il software host.
Sul piano numerico, PRISM studia riduzioni in virgola mobile riproducibili. Poiché l'addizione floating-point non è associativa, alberi di riduzione o ordini di scheduling diversi possono produrre risultati differenti a livello di bit. Il progetto confronta quindi il profilo di riferimento FP32_ARRIVAL con un accumulatore lungo in stile Kulisch3, misurandone area, latenza, throughput e riproducibilità.
L'architettura finale usa un core collettivo riutilizzabile e parametrico nel numero di porte. Implementa buffering, backpressure, CONTROL, riduzione, routing e replica dei risultati; i profili OpenNIC adattano lo stesso RTL a un CMAC U50 o due CMAC U280. Forwarding, VOQ, crossbar generale e aggregazione multi-switch restano fasi successive.
Il codice sorgente più recente è disponibile nel repository GitHub di PRISM.
Citazione¶
Se utilizzi PRISM nel tuo progetto, cita il repository e/o la tesi:
@misc{prism-repository,
author = {Cipolletti, Lorenzo},
title = {PRISM Repository},
year = {2026},
howpublished = {\url{https://github.com/uniquadev/prism}},
note = {Bachelor thesis project repository}
}
@mastersthesis{cipolletti-prism-thesis,
author = {Cipolletti, Lorenzo},
title = {Development of Primitive Hardware for Network Computing},
school = {Sapienza University of Rome},
year = {2026},
type = {Bachelor thesis},
note = {Supervisor: Salvatore Pontarelli; co-supervisor: Daniele De Sensi}
}
Guida alla lettura¶
Prima lettura
Inizia da 1.1 Riproducibilità, quindi passa alla panoramica 2. Per iniziare.
Vista hardware
Prosegui con le pagine 3.1 Protocollo e 3.2 Pipeline.
Evidenze della tesi
Segui gli esperimenti aperti in 4. Risultati e mantieni visibile il piano di scrittura in 5. Sviluppi futuri.
MPI Forum, MPI 4.1 Standard,
MPI_Reduce. Lo standard osserva che le implementazioni possono cambiare l'ordine di riduzione sfruttando associatività e commutatività e che questo può modificare il risultato dell'addizione in virgola mobile. https://www.mpi-forum.org/docs/mpi-4.1/mpi41-report/node130.htm ↩Mellanox SHARP: Scalable Hierarchical Aggregation and Reduction Protocol. ↩
Kulisch, Ulrich W. Computer Arithmetic and Validity: Theory, Implementation, and Applications. Walter de Gruyter, 2002. ↩