Project

General

Profile

Ассемблер. Реализация CRC32 для MC P1

Added by sprin over 10 years ago

Здравствуйте.

Решил реализовать на ассемблере алгоритм реализации CRC32 для MC P1.

Ресурсы:

Benchmarking CRC32 and PopCnt instructions (отсюда брал алгоритмы)


Реализовал следующие алгоритмы CRC32 (с учётом возможностей MC P1):

Sarwate (дополнительно использует 1 КБ для данных)
SlicingBy4 (дополнительно использует 4 КБ для данных)
SlicingBy8 (дополнительно использует 8 КБ для данных)


В теории, если все команды будут выполняться за 1 такт, то можно посчитать минимальное время выполнения функции:

График (если все команды будут выполняться за 1 такт)

Show


На практике результаты не проверялись.


Replies (3)

RE: Ассемблер. Реализация CRC32 для MC P1 - Added by krufter_multiclet over 10 years ago

После проверки думаю добавим в библиотеку. Спасибо огромное за реализацию алгоритма CRC32.
Как появится время, сделаю страничку с подробным описанием времени выполнения команд и возможностей по ускорению работы процессора.

P.S. На практике не проверяли пока из-за отсутствия отладочной платы?

RE: Ассемблер. Реализация CRC32 для MC P1 - Added by sprin over 10 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 10 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 байт

    (1-3/3)