Arlleex 131 20 февраля, 2015 Опубликовано 20 февраля, 2015 (изменено) · Жалоба Как-то не задавался особо этим вопросом, но все же интересно. Вот DMA якобы работает независимо от процессора, и процессор может работать сам в свое удовольствие. Но при захвате контроллером DMA шины адреса и шины данных, о какой работе процессора может идти речь? Ведь ему в общем случае нужно ОЗУ для работы... А он отключился от этих шин, отдав их в распоряжение контроллеру DMA. Получается, что процессор стоит или выполняет какие-то операции простейшие, не требующие доступа к ОЗУ? Изменено 20 февраля, 2015 пользователем Arlleex Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ASN 0 20 февраля, 2015 Опубликовано 20 февраля, 2015 · Жалоба Arlleex Для копирования ЦП блока данных необходимо (считаем, что система команд содержит автоинкремент/декремент): 1. Считать команду "чтение источника"; 2. Считать слово (адресуемую единицу) источника в регистр; 3. Считать команду "запись приёмника"; 4. Записать слово из регистра в приёмник; 5. Проверить на условие окончания цикла; А ПДП делает это аппаратно за такт. То есть даже в простейшем случае выигрыш значительный. А если у ЦП есть кеш данных и инструкций (а он даже в современных ОМЭВМ есть), да многоканальный ПДП, да пакетный режим работы с арбитражем от периферии и ЦП к контроллеру ОЗУ? Тут выигрыш на порядок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Семин 0 20 февраля, 2015 Опубликовано 20 февраля, 2015 · Жалоба Тут особенно парится не стоит. В классическом случае, процессор отдал команду на копирование блока данных и просто ждёт когда эта команда будет выполнена. Так запись блока в память происходит намного быстрее, чем если бы процессор сам учавствовал в пересылке данных. Но в зависимости от системы, возможна параллельная работа. Эт уже нужно конкретную систему изучать. А вообще, если хочется понимать как всё там происходит, нужно изучать работу процессора, ПДП(DMA) и пр. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 187 21 февраля, 2015 Опубликовано 21 февраля, 2015 · Жалоба Arlleex Для копирования ЦП блока данных необходимо (считаем, что система команд содержит автоинкремент/декремент): 1. Считать команду "чтение источника"; 2. Считать слово (адресуемую единицу) источника в регистр; 3. Считать команду "запись приёмника"; 4. Записать слово из регистра в приёмник; 5. Проверить на условие окончания цикла; А ПДП делает это аппаратно за такт. И для какого это CPU Вы привели? Для AVR? Даже в обычном Cortex-M имеются prefetch-буфера, тогда никаких "считать команду" не будет и вообще это может идти по другой шине. И копирования массивов могут выполняться по неск. слов за проход. А ещё можно вспомнить про DSP, который всё описанное выполнит за такт. И даже неск. слов может скопировать за такт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ASN 0 21 февраля, 2015 Опубликовано 21 февраля, 2015 · Жалоба jcxz Не только AVR, но и 8051, 8086, ARM, MIPS и другие. И даже при гарвардской архитектуре внешние ОЗУ и ПЗУ могут находится на одной шине. С DSP тоже не всё однозначно. Например, семейство С6000 имеет представителей с тактовой выше 1 ГГц, а семейство с командой rpt, достигло только 300 МГц. И это при том, что у VLIWа плотность кода меньше, чем у С55 (то есть "засасывать" содержимое памяти команд ему надо больше). Поскольку память медленнее, чем ЦП, а также блочная (пакетная) пересылка по шине быстрее, чем одиночное обращение, в С6000 используются кеши. Содержимое кеша считывается строками (линиями) без участия процессора. А это фактически уже ПДП. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 1 марта, 2015 Опубликовано 1 марта, 2015 · Жалоба В кортексах для распараллеливания помогает матрица шин. Обратите внимание так же на разбиение SRAM на 2 и более блоков в современных MCU. Так же бывает память на ядре, так же код может крутиться в кэше большую часть времени (если кэш есть конечно). Если же и ДМА и процессор работают с одной шиной, то они ее делят, для STM32 в частности на сколько я помню по карусельному типу, конечно портят картину циклы переключения между мастерами, но есть такие примочки как burst передачи, когда гарантируется большая пропускная способность. Поэтому не ленивые программисты смотрят сперва в reference manual и распределяют грамотно буферы и т п. Ну а все остальные программисты занимаются этим распределением когда не хватает ресурсов, я ближе ко вторым))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться