Vai al contenuto

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


  1. 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 

  2. Mellanox SHARP: Scalable Hierarchical Aggregation and Reduction Protocol. 

  3. Kulisch, Ulrich W. Computer Arithmetic and Validity: Theory, Implementation, and Applications. Walter de Gruyter, 2002.