s_kosorev, я мог ошибиться в расчётах. я же переспросил там в конце, что я опять не так подсчитал?
я исходил из двух вещей. первое, это по мануалу:
второе, по исходнику, опять-таки если верно прочитал исходник на ahdl, память с акселем работают на 42мгц, а не 7 как у ТС (со слов Хакера).Скорость работы акселератора ограничивается только физической
скоростью работы основного ОЗУ. Определить примерное время работы команды с
акселератором можно по такой формуле:
Время работы = время работы команды без акселератора + время работы
акселератора
Время работы акселератора = число пересылаемых байт /7 микросекунд
попробуй это всё переведи в такты. тоже хочется узнать, где же тут истина.
так же могу сказать одну вещь, что если на ТСконфе после транзакции нужно ожидать прерывание от ДМА (типа он закончил пересылку данных, опрос статуса дма на предмет бита busy), то тут ожидать этого не нужно. выполнив последнюю команду при которой данные улетают куда надо, я могу выполнять любое другое действие сразу, без ожидания.
т.е. чтобы скинуть сколько-то байт (или заполнить или скопировать), я делаю примерно так:
никакого ожидания битов и статусов. после ld b,b волен делать что угодно.Код:di ;обязательно, иначе батхерт ld d,d ;включить аксель ld a,cnt ;сколько... ld l,l ;просто копируем ld a,(hl) ;в этот момент альтера перехватила команду и записала cnt байт из озу в свою память ld (de),a ;а тут она после перехвата делает запись из своей памяти в озу ld b,b ;отключение акселератора
Да и сам Хакер тоже не совсем верно подсчитал производительность дма. считать надо с учётом всех участвующих команд проца+время ожидания бита статуса.
единственное, думаю, что ТСный дма будет иметь выигрыш на больших объёмах транзакций. т.е. если я верно прочитал мануал, можно задавать для дма количество выполняемых транзакций (это кроме размера самой транзакции). в то же время, на спринтере именно такого параметра нет. т.е. макс.256байт и всё. потом, если надо, иди на новый круг выполняй процедуру.




Ответить с цитированием