как memcpy обрабатывается DMA в Linux

Я использую memcpy () в своей программе. по мере того, как я увеличиваю количество переменных, к сожалению, увеличивается загрузка ЦП. это как если бы memcpy запускалась с использованием итерации цикла. есть ли в linux быстрая функция memcpy? мне использовать патч и компилировать ядро?


person Sam    schedule 18.06.2013    source источник
comment
Хм? Windows использует DMA для memcpy? :)   -  person Joachim Isaksson    schedule 18.06.2013
comment
насколько я знаю это DMA   -  person Sam    schedule 18.06.2013
comment
DMA предполагает связь с другим устройством; ›   -  person matekm    schedule 18.06.2013
comment
Некоторые идеи можно найти здесь.   -  person Joachim Isaksson    schedule 18.06.2013
comment
Я думаю, что было бы справедливо предположить линейную сложность для memcpy(), не так ли?   -  person rectummelancolique    schedule 18.06.2013
comment
поскольку я пишу программу отображения opengl, я использую memcpy для обновления каждой угловой строки дисплея, это требует загрузки процессора. могу я его оптимизировать? по этой ссылке gossamer-threads.com/lists/linux/kernel/1458461 < / а>   -  person Sam    schedule 18.06.2013
comment
как говорится в ссылке, если я скомпилирую быстрый memcpy в ядре, почему тогда моя программа не будет использовать оптимизированный файл в ядре? кроме того, какой алгоритм я мог бы заменить в сложившейся ситуации?   -  person Sam    schedule 18.06.2013


Ответы (1)


Есть архитектуры, в которых шина между процессором и памятью довольно слабая; в некоторых из этих архитектур добавлен механизм DMA, позволяющий копировать большие блоки памяти без выполнения цикла в ЦП.

В Linux вы могли бы получить доступ к механизму DMA с подсистемой dmaengine, но это очень зависит от оборудования, действительно ли доступен такой механизм.

Процессоры X86 имеют хорошую подсистему памяти, а также специальную аппаратную поддержку для копирования больших блоков, поэтому использование механизма DMA вряд ли действительно поможет. (Intel добавила механизм DMA под названием I / OAT для некоторых серверных плат, но в целом результаты были не намного лучше, чем у простых копий ЦП.)

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

person CL.    schedule 18.06.2013