Я использую memcpy () в своей программе. по мере того, как я увеличиваю количество переменных, к сожалению, увеличивается загрузка ЦП. это как если бы memcpy запускалась с использованием итерации цикла. есть ли в linux быстрая функция memcpy? мне использовать патч и компилировать ядро?
как memcpy обрабатывается DMA в Linux
Ответы (1)
Есть архитектуры, в которых шина между процессором и памятью довольно слабая; в некоторых из этих архитектур добавлен механизм DMA, позволяющий копировать большие блоки памяти без выполнения цикла в ЦП.
В Linux вы могли бы получить доступ к механизму DMA с подсистемой dmaengine
, но это очень зависит от оборудования, действительно ли доступен такой механизм.
Процессоры X86 имеют хорошую подсистему памяти, а также специальную аппаратную поддержку для копирования больших блоков, поэтому использование механизма DMA вряд ли действительно поможет. (Intel добавила механизм DMA под названием I / OAT для некоторых серверных плат, но в целом результаты были не намного лучше, чем у простых копий ЦП.)
DMA вытесняет данные из кешей ЦП, поэтому создание DMA-копий для переменных вашей программы было бы совершенно бессмысленным, потому что первый доступ ЦП впоследствии должен был бы прочитать их обратно в кеш.
memcpy()
, не так ли? - person rectummelancolique   schedule 18.06.2013