Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Asm для начинающих > NeuroMatrix программирование, свертка изображения |
Автор: neuromatrix 25.2.2016, 15:23 |
Здравствуйте, есть задание написать программу на специфичном ассемблере NM6403, тема - свертка изображения. По сути все просто - умножать матрицу на маску 3x3 по специальной формуле, так чтобы изменился только средний элемент матрицы, но на практике возникли проблемы. Например как подгружать только часть матрицы (не понимаю где она будет храниться, там только теневая и рабочая матрицы по 64 бита, как индексы увеличивать). Банально даже не знаю как мне отдельно элементы матрицы по этой формуле посчитать - c5 = 1/b1+b2+b3+b4+b5+b6+b7+b8+b9* (a1*b1+ a2*b2+ a3*b3+ a4*b4+ a5*b5+ a6*b6+ a7*b7+ a8*b8+ a9*b9) . Загонять каждый раз все 9 элементов матрицы в отдельные регистры? В общем надеюсь на вашу помощь |
Автор: tzirechnoy 25.2.2016, 21:10 |
А какая разрядность у элементов матрицы и что с разрядностью результата (нужна ли абсолютная точность или можно обрезать по насыщению на каком-то уровне)? |
Автор: neuromatrix 26.2.2016, 12:42 |
разрядность 8 бит, точность не важна я думаю, вы сможете помочь (за денюжки ![]() |
Автор: tzirechnoy 26.2.2016, 15:23 |
Нет, помочь я смогу только из любопытства и любви ко всяким извращениям. Кроме того, я дажэ не нашёл чёткого описания ассэмблера этого NM6403, только всякие отрывочные статьи с примерами. Так что шансы на то, что пойму это -- в общем невелики. Но обсудить что происходит и что ему нужно -- вполне можно. Вообще, судя по всему, всё, что тот векторный процэссор можэт для такой задачи -- сделать 64 сложэния-умножэния за один такт если ему загрузят исходные данные (8 штук X в 64-битный регистр) и коэффицыэнты (W, которых, я так понял, при шырине слова в 8 бит будет как раз 64) -- и Вы сможэте получить 8 чисел в качестве результата. После этого надо развернуть потребное вам умножэние-сложэние в такие вот операцыи, в параллель по 8 штук над 8 исходными числами. Ну, или хотя бы для начала -- просто на операцыи с 8 исходными числами (при том, что для полного результата надо 9 -- то есть как-то разбить на два этапа). |
Автор: neuromatrix 26.2.2016, 16:25 |
Да, все правильно говорите, если у Вас есть время - можете заценить типовые программки, это методичка по ассемблеру нейроматрикс |
Автор: tzirechnoy 26.2.2016, 17:32 |
Вообще, судя по наличию 1/b1 -- что-то про точность и вообще про размерность вам должны были сказать. Поскольку в цэлых числах 1/b1 будет примерно всегда равно нулю, и незачем в общем тогда было так писать этот член. Выясните как-нибудь, что это и зачем понадобилось. PS Введение -- это интересно, а спецыфикацыя команд и времени их исполнения есть? |
Автор: neuromatrix 26.2.2016, 21:09 |
в формуле там ошибка, скобку забыл, вот так правильно c5 =(a1*b1+a2*b2+a3*b3+a4*b4+a5*b5+a6*b6+a7*b7+a8*b8+a9*b9)/(b1+b2+b3+b4+b5+b6+b7+b8+b9) вот описание команд, вроде и время есть) - http://s000.tinyupload.com/index.php?file_id=02001958926825948295 |
Автор: tzirechnoy 27.2.2016, 14:05 |
Ага, это ужэ интереснее. Но сегодня, думаю, подумать над этим не успею. |
Автор: dreindeimos 18.3.2016, 14:38 |
Интересно конечно |