Używam interfejsu sprzętowego do wysyłania danych, które wymagają ustawienia bufora DMA, który należy wyrównać na granicach 64 bitów.Jak zapewnić wyrównanie pamięci buforowej?
Silnik DMA oczekuje, że bufory będą wyrównane na co najmniej 32 bitach (4 bajty). Aby uzyskać optymalną wydajność, bufor powinien być wyrównany na granicach 64 bitów (8 bajtów). Rozmiar transferu musi być wielokrotnością 4 bajtów.
używam posix_memalign
stworzyć bufor jak to ...
posix_memalign ((void**)&pPattern, 0x1000, DmaBufferSizeinInt32s * sizeof(int)))
pPattern
jest wskaźnik do int, a to początek mojego bufora, który jest DmaBufferSizeinInt32s
głęboko.
Czy mój bufor jest wyrównany na 64 bitach?
Nie jestem pewien, czy potrzebuję wyrównania granicy 4KB ... czy powinienem? – Krakkos
Zasadniczo piszę obiekt danych, które są 10 x 32bit słów. Chcę wysłać całe liczby 10 x 32bit słów za każdym razem. Mam obecnie DMA'ing obiektów danych 400 x 320bit w każdym transferze DMA. Nie jestem pewien, jak rozmiar mojego bufora (400 x 10 x 32 bitów) jest związany z wyrównaniem, jeśli w ogóle. Czy powinienem poprawić rozmiar bufora? – Krakkos
Nie mogę odpowiedzieć na to pytanie. Nie wiem, jaka jest twoja platforma, dla jednej. Pod oknami pamięci strony są przydzielane na stronach 4K. Oznacza to, że możesz ustawić tylko całą stronę na poziomie bez sortowania naraz, dlatego możesz potrzebować wyrównania 4K. Niestety, nie mogę powiedzieć na pewno, nie wiedząc o wiele więcej na temat twojego systemu ... – Goz