Sto lavorando su un dispositivo GPU che ha una latenza di interi di divisione molto elevata, diverse centinaia di cicli. Sto cercando di ottimizzare le divisioni.Divisione intera più veloce quando è noto il denominatore?
Tutte le divisioni per denominatore che è in un set {1,3,6,10}, tuttavia il numeratore è un valore positivo di runtime, approssimativamente 32000 o meno. a causa di vincoli di memoria, la tabella di ricerca potrebbe non essere una buona opzione.
Riesci a pensare a alternative? Ho pensato di calcolare invers float point e di usare quelli per moltiplicare il numeratore.
Grazie
PS. grazie gente il bit shift hack è davvero fantastico. per recuperare da arrotondamento, uso seguente segmento C:
sistemi// q = m/n
q += (n*(j +1)-1) < m;
sì, è abbastanza piccolo. grazie – Anycorn
ottengo errore di arrotondamento, ma ho un modo per recuperare il risultato corretto. Grazie – Anycorn
Per errore di arrotondamento, potresti provare la classica add-half prima di dividere, che in questo caso sarebbe a/b = (a * ((1 << 16)/b) + (1 <<15))>> 16 – drawnonward