IT
PipeLink collega parti di kernel GPU compilate separatamente
PipeLink: Contract-Guided Linking of GPU Kernel Components · arXiv:2610.37200

In parole semplici
Un kernel GPU fuso può essere costruito con parti scritte da team o librerie diverse, ma queste parti possono chiedere le stesse risorse sul chip. PipeLink permette a ogni parte di dichiarare di cosa ha bisogno e cosa garantisce, poi controlla e collega le parti durante il collegamento.
In 51 configurazioni misurate su tre modelli di GPU NVIDIA, i kernel collegati sono rimasti entro lo 0,2% rispetto ai controlli compilati come un’unica unità a partire dalle stesse parti. Il risultato riguarda questi test, non ogni kernel o GPU.
La ricerca
Quando parti di kernel GPU scritte separatamente condividono risorse sul chip, le assegnazioni fissate in anticipo possono entrare in conflitto. I team potrebbero doverle coordinare a mano o mantenere le parti in kernel distinti. Un linker può combinare parti compilate indipendentemente coordinando le risorse che condividono?
PipeLink collega parti di kernel GPU compilate separatamente verificandone i contratti, assegnando insieme le risorse e generando i collegamenti tra le parti.
PipeLink collega parti di kernel GPU compilate separatamente verificando ciò che ciascuna richiede e garantisce, assegnando insieme le risorse sul chip e generando i collegamenti.
I ricercatori hanno confrontato i kernel collegati con controlli compilati come un’unica unità usando gli stessi sorgenti e lo stesso codice di collegamento.
In 51 configurazioni misurate su tre modelli di GPU NVIDIA, la quantità di lavoro completata dai kernel collegati è rimasta entro lo 0,2% rispetto ai controlli. Questo sostiene l’interpretazione secondo cui, in questi test, il collegamento non ha aggiunto un costo significativo alle composizioni.
PipeLink verifica che i contratti dichiarati dai componenti siano compatibili, ma non controlla che il loro codice li rispetti.
I trasferimenti generati spostano dati solo all’interno di un singolo blocco di thread; i componenti continuano a occuparsi di calcoli, conversioni di precisione e comunicazione tra blocchi o GPU.
Cosa mostrano le prove
- Il problema della composizione
PipeLink è un linker guidato da contratti che combina componenti compilati separatamente in un unico kernel GPU fuso. I componenti possono essere scritti usando librerie diverse, ma possono condividere memoria sul chip, barriere, warp, registri e piani di elaborazione dei tile.
Poiché spesso fissano in anticipo le proprie posizioni in queste risorse, combinarli può richiedere coordinamento manuale o kernel separati.
- I contratti coordinano i componenti
I contratti registrano ciò che ogni componente richiede e garantisce, comprese le esigenze di risorse condivise e i fatti geometrici. PipeLink verifica queste dichiarazioni, assegna insieme le posizioni delle risorse e genera collegamenti come i trasferimenti di tensori.
Le istruzioni dei componenti restano opache al linker e il backend del produttore incorpora le decisioni prese al collegamento come costanti.
- I dati modificati rivelano una lacuna
Un test con fatti geometrici modificati mostra cosa può sfuggire al collegamento dei simboli. I ricercatori hanno cambiato una costante in un componente proprietario di un kernel MoE composto da quattro parti, reimpacchettato solo quel componente e collegato la nuova versione agli oggetti invariati degli altri.
Il collegamento dei simboli ha accettato tutti e cinque i casi, ma tre kernel si sono bloccati e due hanno lasciato parte dell’output non scritto. PipeLink ha ricollegato correttamente tutti e cinque propagando ogni fatto modificato ai componenti che lo usavano.
- Il collegamento resta vicino ai controlli
I ricercatori hanno confrontato i kernel collegati con controlli compilati come un’unica unità usando gli stessi sorgenti dei componenti e lo stesso codice generato, disposizione delle risorse, modalità a virgola mobile e input.
In 51 configurazioni misurate su GPU H200, B300 e RTX 5090, la quantità di lavoro completata dai kernel collegati è rimasta entro lo 0,2% rispetto ai controlli. Gli autori interpretano questo risultato come un’indicazione che i casi di studio misurino ciò che rende possibile la composizione, senza un costo dovuto al collegamento.
- I risultati dipendono dal carico di lavoro
Gli esempi mostrano che la composizione può rendere possibili kernel che uniscono librerie e componenti proprietari diversi, ma le prestazioni dipendono dal carico di lavoro. Sostituire un componente di attention ha accelerato la decodifica di Llama-1B con un contesto di 4096 token, ma l’ha rallentata con 16 token.
Un kernel di addestramento MoE composto da quattro parti è rimasto vicino alla quantità di lavoro completata dal passo monolitico; in una configurazione B300, un’operazione fusa per Qwen3-32B ha superato il confronto con cuBLAS più un’attivazione compilata.
Dettagli
- Autori del paper originale
- Jize Guo, Xupeng Miao
- Inviato ad arXiv
- Licenza
- CC BY 4.0