Как я удостоверяюсь, что буферная память выровненная?

Можно посмотреть здесь: http://www.dotemacs.de/

И мой .emacs довольно длинен для помещения его здесь также, таким образом, это сделает ответ не слишком читаемым. Так или иначе, при необходимости чтобы я мог, отправил его Вам.

Также я рекомендовал бы Вам считать это: http://steve.yegge.googlepages.com/my-dot-emacs-file

9
задан Peter Mortensen 30 October 2009 в 12:32
поделиться

3 ответа

Да, ваш буфер выровнен на 64 бита. Он ТАКЖЕ выровнен по границе 4 КБ (отсюда 0x1000). Если вам не нужно выравнивание в 4 КБ, то передайте 0x8 вместо 0x1000 ...

Редактировать: Я также хотел бы отметить, что обычно при написании цепочек DMA вы записываете их через некэшированную память или через какие-то не-кешированные очередь записи. В этом случае вы также хотите выровнять свои цепочки DMA по размеру строки кеша, чтобы предотвратить перезапись кеш-памяти, перезаписывающую начало или конец цепочки DMA.

8
ответ дан 4 December 2019 в 19:34
поделиться

Как указал Гоз, но (imo) немного менее ясно: вы запрашиваете выравнивание по 0x1000 байтам (второй аргумент), что намного больше, чем 64 бита.

Вы можете изменить вызов на просто:

posix_memalign ((void**)&pPattern, 8, DmaBufferSizeinInt32s * sizeof(int)))

Это может удешевить вызов (меньше потраченной впустую памяти) и в любом случае будет более четким, поскольку вы просите что-то, что более точно соответствует тому, что вы действительно хотите.

3
ответ дан 4 December 2019 в 19:34
поделиться

Я не знаю вашего оборудования и не знаю, как вы получаете указатель pPattern, но это кажется всем опасным. Большинство знакомых мне DMA требует физической непрерывной RAM. Операционная система предоставляет только практически непрерывную оперативную память для пользовательских программ. Это означает, что выделение памяти в 1 МБ может состоять из 256 неподключенных страниц ОЗУ размером 4 КБ.

Большую часть времени выделение памяти будет выполняться из непрерывных физических частей, что может привести к тому, что что-то будет работать большую часть времени, но не всегда . Вам нужен драйвер устройства ядра для обеспечения безопасного DMA.

Мне интересно это, потому что, если ваш указатель pPattern исходит от драйвера устройства, то зачем вам его выравнивать больше?

1
ответ дан 4 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: