2012-10-18 10 views
7

... sono appena citati nello PTX manual. Non c'è alcun indizio su ciò per cui sono buoni o su come usarli.I registri PTX "bit bucket"

Qualcuno ne sa di più? Mi manca un concetto comune?

+2

Se non mi sbaglio (anche se molto probabilmente sono e verrà corretto su questo;)) le scritture sul registro sono essenzialmente no-op. – Bart

+1

In generale si specifica un pozzetto come registro di destinazione per un'istruzione quando non si è interessati al risultato del registro prodotto dall'istruzione, ma solo all'effetto collaterale dell'istruzione. Ad esempio, con vari microprocessori l'istruzione di confronto è in realtà una pseudoistruzione che viene implementata come istruzione di sottrazione con il registro di destinazione specificato come bit-bucket, poiché uno è interessato solo ai flag (codici di condizioni) generati come side- effetto della sottrazione. harrism già fornito utilizzo bit-bucket specifico per PTX di seguito. – njuffa

risposta

8

Il commento di Bart è fondamentalmente corretto. Più in dettaglio, come indicato nello PTX ISA 3.1 manual,

Per alcune istruzioni l'operando di destinazione è facoltativo. Un operando "bit bucket" denotato con un carattere di sottolineatura (_) può essere utilizzato al posto di un registro di destinazione.

v'è in realtà solo una classe di istruzioni elencate in 3.1 PTX specifiche per le quali _ è una destinazione valida: atom. Ecco la semantica di atom:

Atomicamente carica il valore originale in luogo di una nel registro di destinazione d, esegue un'operazione di riduzione con operando B e il valore in posizione a, e memorizza il risultato dell'operazione specificata nella posizione a, sovrascrivendo il valore originale.

E c'è una nota per atom:

semplici riduzioni possono essere specificati utilizzando il “bit bucket” destinazione operando ‘_’.

Quindi, possiamo costruire un esempio:

atom.global.add.s32 _, [a], 4 

Questo aggiungerebbe 4 al numero intero firmato a posizione di memoria a, e non restituire il valore precedente di posizione a in un registro. Quindi se non hai bisogno del valore precedente, puoi usare questo. Suppongo che il compilatore genererebbe questo per il codice

atomicAdd(&a, 4); 

dal momento che il valore di ritorno di atomicAdd non viene memorizzato in una variabile.

+0

Grazie per l'espansione sul mio "qualcosa qualcosa di non-op qualcosa" con alcune informazioni reali. Buono a sapersi. :) – Bart

+0

Grazie, ha senso. E bello sapere che la versione 3.1 del manuale è fuori. – Dude