|
Библиотеки MD5 и SHA1, под ARM7 |
|
|
|
Feb 11 2009, 19:35
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Во-первых в штатном MD5 прилично оверхеда на подготовку данных блока - копирование в местный буфер и прочее. Во-вторых, сейчас навскидку не скажу, но помнится мне, что классический вариант не имеет никакой потуги к обустраиванию переменных при расчете хеша блока в регистрах - а в arm-режиме оно точно войдет и даст заметный прирост производительности, хотя, больше чем процентов на 30 прироста я бы не расчитывал.
С шаодын такие фокусы, к сожалению, не пройдут.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Feb 11 2009, 21:03
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Сейчас глянул по быстрому исходник мд5. Похоже, насчет 30 процентов я Вас здорово обманул. Все там хорошо, немного можно с бубном поплясать, но это даст отсилы выигрыш в единицы процентов. Если очень интересует, могу завтра сделать. Но, чуда не будет  Кстати, я надеюсь, компилятор Вами используется вменяемый и на максимальной оптимизации по скорости? А, и еще. Процедуру расчета было бы правильно расположить во внутреннем озу. Тогда будет максимальное быстродействие.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Feb 11 2009, 21:12
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(Rst7 @ Feb 12 2009, 00:03)  Сейчас глянул по быстрому исходник мд5. Похоже, насчет 30 процентов я Вас здорово обманул. Все там хорошо, немного можно с бубном поплясать, но это даст отсилы выигрыш в единицы процентов. Если очень интересует, могу завтра сделать. Но, чуда не будет  я вот тоже сижу танцую, но пока неалчно Цитата(Rst7 @ Feb 12 2009, 00:03)  Кстати, я надеюсь, компилятор Вами используется вменяемый и на максимальной оптимизации по скорости? компилятор кейловский, гнушный пока не ставил. Оптимизация 2 уровень + галка Speed. На уровне 3 дает примерно 33с Цитата(Rst7 @ Feb 12 2009, 00:03)  А, и еще. Процедуру расчета было бы правильно расположить во внутреннем озу. Тогда будет максимальное быстродействие. тык это надо перекинуть кусок внешней памяти (ну выделю я там под него килов 32), потом обработать... накладных расходов много, не считаете? 2к раз это делать
Сообщение отредактировал toweroff - Feb 11 2009, 21:13
|
|
|
|
|
Feb 11 2009, 21:23
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Что-то больно хороший результат у вас получается. Если считать, что MD5 считается на данных во внешней FLASH памяти (найти статическую RAM на такой объем не знаю где можно) и проц работает не из кэша, то результат должен быть раза в два хуже. На SHA1 должно быть еще в 2-а раза медленнее. Или объем в мегабитах все таки написан? А.., понял. Глянул тут ниже ваши изыскания. Вы в симуляторе считаете ? Цитата(toweroff @ Feb 11 2009, 21:21)  Кто-нибудь пользовал? Можете поделиться?
Пока нашел под MD5 и добился 25сек (@72MHz) для вычисления блока 64MB памяти, висящей на EMC, но может есть что-то более оптимизированное
Все вычисляемые блоки 100% выровнены по 64 байта (вроде для SHA было такое ограничение)
|
|
|
|
|
Feb 11 2009, 21:48
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(AlexandrY @ Feb 12 2009, 00:23)  Что-то больно хороший результат у вас получается. Если считать, что MD5 считается на данных во внешней FLASH памяти (найти статическую RAM на такой объем не знаю где можно) и проц работает не из кэша, то результат должен быть раза в два хуже. На SHA1 должно быть еще в 2-а раза медленнее. Или объем в мегабитах все таки написан? А.., понял. Глянул тут ниже ваши изыскания. Вы в симуляторе считаете ? да, это симулятор, объем 64 мегаБАЙТА. В реале я несколько разочаруюсь?  кстати... совсем забыл.. надо бы выставить задержки под внешнюю флеш, она на 110нс, ну может буферное чтение включить... но умеет ли это все правильно Keil просчитывать - вопрос Rst7Попробовал копировать во втутреннюю RAM куски по 32Кб... результат практически одинаков, хуже на 1.5сек (симулятор Keil, не девайс пока !!!)
|
|
|
|
|
Feb 11 2009, 23:06
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(Rst7 @ Feb 12 2009, 01:05)  Ненене  Только саму функцию надо было в озу разместить, чтобы выполнение шло из него. Как в кейле не знаю, в IAR'е используется модификатор __ramfunc, если мне не изменяет память. ок, разместил. Компилятор показывает, что все нормально, все функции md5 помещены с адреса 0х40000000 до какого-то там. Скорость не изменилась опять же, это симулятор и черт его знает, как будет в реальном процессоре Пока хочу все отладить, чтобы потом не сильно бодаться с железкой
|
|
|
|
|
Feb 12 2009, 07:21
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
110 нс !? Тогда еще процентов на 20 в худшую сторону подправьте результат. MD5 очень чувствителен к скорости памяти из которой читаются данные. А симулятор в Keil-е по умолчанию не учитывает вообще никаких задержек на шинах. Перенос программы в RAM не даст практически ничего. В LPC программа из FLASH выполняется не намного медленнее чем из RAM. http://aly.ogmis.lt/Subjects/Tests/LPC/LPC.htm Цитата(toweroff @ Feb 11 2009, 23:48)  кстати... совсем забыл.. надо бы выставить задержки под внешнюю флеш, она на 110нс, ну может буферное чтение включить... но умеет ли это все правильно Keil просчитывать - вопрос
|
|
|
|
|
Feb 12 2009, 09:54
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата MD5 очень чувствителен к скорости памяти из которой читаются данные. Ошибаетесь. Там всего одно считывание каждого слова. Главное, убрать буферизацию перед расчетом, вот она там скорости не прибавит ну никак. Цитата Перенос программы в RAM не даст практически ничего. Даст. Процентов 10 в arm-режиме. Потому что сам расчет практически проводится в регистрах без особого доступа к переменным. Пардон, считываний таки 4, а не 1.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Feb 12 2009, 11:46
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Правильно, только не слова, а байта, т.к. исходный массив над которым производятся вычисления может быть даже по словам не выровнен. А алгоритм MD5 адаптированный к 32-х битным платформам оперирует длиными целыми по 4-е байта. Итого как минимум вся внешняя память должна быть побайтно перекачана во внутреннюю в ходе вычислений. Мои замеры показывают, что скорость чтения 64-х байтными блоками из внешней 16-и битной SRAM cо временем доступа 12 нс не превышает 12-16 Мбайт/сек у ARM9 на шине с частотой ~50 МГц, самым оптимизированным алгоритмом. Чтение 64 Мбайт займет соответственно 4 сек, а из в 5-ть раз более медленной памяти соответсвенно 20 сек! Так что в тормозах влияние памяти основное. Цитата(Rst7 @ Feb 12 2009, 11:54)  Ошибаетесь. Там всего одно считывание каждого слова. Главное, убрать буферизацию перед расчетом, вот она там скорости не прибавит ну никак.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|