Sto utilizzando un'interfaccia hardware per inviare dati che richiedono l'installazione di un buffer DMA, che deve essere allineato su limiti a 64 bit.Come si assicura che la memoria del buffer sia allineata?
Il motore DMA prevede che i buffer siano allineati su limiti di almeno 32 bit (4 byte). Per prestazioni ottimali di , il buffer deve essere allineato su limiti a 64 bit (8 byte). La dimensione del trasferimento deve essere un multiplo di 4 byte.
Io uso posix_memalign
per creare un buffer come questo ...
posix_memalign ((void**)&pPattern, 0x1000, DmaBufferSizeinInt32s * sizeof(int)))
pPattern
è un puntatore ad un int, ed è l'inizio del mio tampone che è DmaBufferSizeinInt32s
profondo.
Il mio buffer è allineato su 64 bit?
Non sono sicuro se ho bisogno dell'allineamento del bordo 4KByte ... dovrei? – Krakkos
Fondamentalmente sto scrivendo oggetti dati che sono 10 x 32 bit di parole. Voglio inviare numeri interi di 10 x 32 bit ogni volta. Attualmente sono DMA'ing 400 x 320 bit di dati in ogni trasferimento DMA. Non sono sicuro di come la dimensione del mio buffer (400 x 10 x 32 bit) sia correlata all'allineamento, se non del tutto. Dovrei modificare la dimensione del buffer? – Krakkos
Non posso rispondere a questa domanda. Non so qual è la tua piattaforma, per esempio. Sotto Windows le pagine di memoria sono allocate in pagine 4K. Questo significa che puoi solo impostare un'intera pagina alla volta senza cache e quindi potresti aver bisogno dell'allineamento 4K. Ahimè, però, non posso dirlo con certezza senza sapere molto di più sul tuo sistema ...Il sistema – Goz