Forums » Программное обеспечение »
Ассемблер. Реализация CRC32 для MC P1
Added by sprin over 11 years ago
Здравствуйте.
Решил реализовать на ассемблере алгоритм реализации CRC32 для MC P1.
Ресурсы:
Benchmarking CRC32 and PopCnt instructions (отсюда брал алгоритмы)
Реализовал следующие алгоритмы CRC32 (с учётом возможностей MC P1):
Sarwate (дополнительно использует 1 КБ для данных)
SlicingBy4 (дополнительно использует 4 КБ для данных)
SlicingBy8 (дополнительно использует 8 КБ для данных)
В теории, если все команды будут выполняться за 1 такт, то можно посчитать минимальное время выполнения функции:
На практике результаты не проверялись.
mc_CRC32_Sarwate.asm (8.78 KB) mc_CRC32_Sarwate.asm | |||
mc_CRC32_SlicingBy4.asm (25.8 KB) mc_CRC32_SlicingBy4.asm | |||
mc_CRC32_SlicingBy8.asm (42.6 KB) mc_CRC32_SlicingBy8.asm | |||
mc_CRC32.png (12.1 KB) mc_CRC32.png |
Replies (3)
RE: Ассемблер. Реализация CRC32 для MC P1 - Added by krufter_multiclet over 11 years ago
После проверки думаю добавим в библиотеку. Спасибо огромное за реализацию алгоритма CRC32.
Как появится время, сделаю страничку с подробным описанием времени выполнения команд и возможностей по ускорению работы процессора.
P.S. На практике не проверяли пока из-за отсутствия отладочной платы?
RE: Ассемблер. Реализация CRC32 для MC P1 - Added by sprin over 11 years ago
krufter_multiclet wrote:
После проверки думаю добавим в библиотеку. Спасибо огромное за реализацию алгоритма CRC32.
Пожалуйста
krufter_multiclet wrote:
Как появится время, сделаю страничку с подробным описанием времени выполнения команд и возможностей по ускорению работы процессора.
Было бы хорошо.
krufter_multiclet wrote:
P.S. На практике не проверяли пока из-за отсутствия отладочной платы?
Да, тестировал на модели вызовом ASM реализации через С и сравнением с С алгоритмом.
Сегодня посмотрел ещё раз код, там алгоритм сохранения используемых регистров в стеке реализован немного неверно из-за того, что сохраняются только первые 4 байта регистра, а надо 8, из-за команды "setl", т.к. она забивает нулями старшие 4 байта регистра.
Когда поправят форум заменю файлы в первом сообщении, а пока такой возможности нет (можно редактировать только сообщение, уже залитые файлы не показываются)
RE: Ассемблер. Реализация CRC32 для MC P1 - Added by sprin over 11 years ago
Здравствуйте.
Протестировал алгоритмы реализации команды CRC32 на отладочном комплекте НW1-MCp04.
Входные значения из таблицы в памяти. (размер исходной таблицы 65536 байт)
Скорость замерял по таймеру "TIM0".
Использовался: MultiCletSDK_ru.20131105.exe
Тесты (предварительные результаты):
- Тест 1: Вызов функции. Входные параметры через стек.
НW1-MCp04 | MC P1: | 80 МГц |
Алгоритм | Тест 1 | Тест 1 | Тест 1 | ||
Мегабайт/сек * | На 1 байт уходит тактов (примерно) | Такты (на массив 65536) | |||
mc_CRC32_Sarwate | 1,557 | 49,001 | 3211352 | ||
mc_CRC32_SlicingBy4 | 5,064 | 15,067 | 987408 | ||
mc_CRC32_SlicingBy8 | 9,208 | 8,286 | 543020 |
- 1 Мб = 2^20 байт