реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Библиотеки MD5 и SHA1, под ARM7
toweroff
сообщение Feb 11 2009, 19:21
Сообщение #1


Гуру
******

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



Кто-нибудь пользовал? Можете поделиться?

Пока нашел под MD5 и добился 25сек (@72MHz) для вычисления блока 64MB памяти, висящей на EMC, но может есть что-то более оптимизированное

Все вычисляемые блоки 100% выровнены по 64 байта (вроде для SHA было такое ограничение)

Сообщение отредактировал toweroff - Feb 11 2009, 19:22
Go to the top of the page
 
+Quote Post
Rst7
сообщение Feb 11 2009, 19:35
Сообщение #2


Йа моск ;)
******

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



Во-первых в штатном MD5 прилично оверхеда на подготовку данных блока - копирование в местный буфер и прочее. Во-вторых, сейчас навскидку не скажу, но помнится мне, что классический вариант не имеет никакой потуги к обустраиванию переменных при расчете хеша блока в регистрах - а в arm-режиме оно точно войдет и даст заметный прирост производительности, хотя, больше чем процентов на 30 прироста я бы не расчитывал.

С шаодын такие фокусы, к сожалению, не пройдут.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
toweroff
сообщение Feb 11 2009, 20:07
Сообщение #3


Гуру
******

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



Цитата(Rst7 @ Feb 11 2009, 22:35) *
Во-первых в штатном MD5 прилично оверхеда на подготовку данных блока


unsure.gif о как.. а по-подробнее об этом мжно? ARM три дня только как в руки взял smile.gif
В проекте планируется LPC2468

так... обнаружил буфер. Видать, не докопал... он объявлен как char. Если перелопатить это все под int - насколько (примерно, конечно) можно ожидать увеличени (или спада smile.gif ) производительности?
Go to the top of the page
 
+Quote Post
Rst7
сообщение Feb 11 2009, 20:19
Сообщение #4


Йа моск ;)
******

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



Цитата
Если перелопатить это все под int


Я так понимаю, у Вас всегда круглое число блоков по 64 байта попадает на вход расчета? Если да, то надо убирать эту буферизацию вообще. Только в конце, после последнего блока подсовывать pad.

Это то, что касается прямых накладных расходов. По поводу распределения регистров я гляну завтра, если будут силы доползти до компа.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
toweroff
сообщение Feb 11 2009, 20:25
Сообщение #5


Гуру
******

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



Цитата(Rst7 @ Feb 11 2009, 23:19) *
Я так понимаю, у Вас всегда круглое число блоков по 64 байта попадает на вход расчета? Если да, то надо убирать эту буферизацию вообще. Только в конце, после последнего блока подсовывать pad.

Это то, что касается прямых накладных расходов. По поводу распределения регистров я гляну завтра, если будут силы доползти до компа.


да, всегда попадает. Спасибо, буду ждать
Go to the top of the page
 
+Quote Post
Rst7
сообщение Feb 11 2009, 21:03
Сообщение #6


Йа моск ;)
******

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



Сейчас глянул по быстрому исходник мд5. Похоже, насчет 30 процентов я Вас здорово обманул. Все там хорошо, немного можно с бубном поплясать, но это даст отсилы выигрыш в единицы процентов.
Если очень интересует, могу завтра сделать. Но, чуда не будет sad.gif

Кстати, я надеюсь, компилятор Вами используется вменяемый и на максимальной оптимизации по скорости?

А, и еще. Процедуру расчета было бы правильно расположить во внутреннем озу. Тогда будет максимальное быстродействие.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
toweroff
сообщение Feb 11 2009, 21:12
Сообщение #7


Гуру
******

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



Цитата(Rst7 @ Feb 12 2009, 00:03) *
Сейчас глянул по быстрому исходник мд5. Похоже, насчет 30 процентов я Вас здорово обманул. Все там хорошо, немного можно с бубном поплясать, но это даст отсилы выигрыш в единицы процентов.
Если очень интересует, могу завтра сделать. Но, чуда не будет sad.gif


я вот тоже сижу танцую, но пока неалчно


Цитата(Rst7 @ Feb 12 2009, 00:03) *
Кстати, я надеюсь, компилятор Вами используется вменяемый и на максимальной оптимизации по скорости?


компилятор кейловский, гнушный пока не ставил. Оптимизация 2 уровень + галка Speed. На уровне 3 дает примерно 33с

Цитата(Rst7 @ Feb 12 2009, 00:03) *
А, и еще. Процедуру расчета было бы правильно расположить во внутреннем озу. Тогда будет максимальное быстродействие.


тык это надо перекинуть кусок внешней памяти (ну выделю я там под него килов 32), потом обработать... накладных расходов много, не считаете? 2к раз это делать

Сообщение отредактировал toweroff - Feb 11 2009, 21:13
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Feb 11 2009, 21:23
Сообщение #8


Ally
******

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



Что-то больно хороший результат у вас получается.
Если считать, что MD5 считается на данных во внешней FLASH памяти (найти статическую RAM на такой объем не знаю где можно) и проц работает не из кэша, то результат должен быть раза в два хуже.
На SHA1 должно быть еще в 2-а раза медленнее.
Или объем в мегабитах все таки написан? biggrin.gif

А.., понял. Глянул тут ниже ваши изыскания. Вы в симуляторе считаете ?

Цитата(toweroff @ Feb 11 2009, 21:21) *
Кто-нибудь пользовал? Можете поделиться?

Пока нашел под MD5 и добился 25сек (@72MHz) для вычисления блока 64MB памяти, висящей на EMC, но может есть что-то более оптимизированное

Все вычисляемые блоки 100% выровнены по 64 байта (вроде для SHA было такое ограничение)
Go to the top of the page
 
+Quote Post
toweroff
сообщение Feb 11 2009, 21:48
Сообщение #9


Гуру
******

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



Цитата(AlexandrY @ Feb 12 2009, 00:23) *
Что-то больно хороший результат у вас получается.
Если считать, что MD5 считается на данных во внешней FLASH памяти (найти статическую RAM на такой объем не знаю где можно) и проц работает не из кэша, то результат должен быть раза в два хуже.
На SHA1 должно быть еще в 2-а раза медленнее.
Или объем в мегабитах все таки написан? biggrin.gif

А.., понял. Глянул тут ниже ваши изыскания. Вы в симуляторе считаете ?


да, это симулятор, объем 64 мегаБАЙТА. В реале я несколько разочаруюсь? smile.gif

кстати... совсем забыл.. надо бы выставить задержки под внешнюю флеш, она на 110нс, ну может буферное чтение включить... но умеет ли это все правильно Keil просчитывать - вопрос

Rst7

Попробовал копировать во втутреннюю RAM куски по 32Кб... результат практически одинаков, хуже на 1.5сек (симулятор Keil, не девайс пока !!!)
Go to the top of the page
 
+Quote Post
Rst7
сообщение Feb 11 2009, 22:05
Сообщение #10


Йа моск ;)
******

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



Цитата
Попробовал копировать во втутреннюю RAM куски по 32Кб...


Ненене smile.gif Только саму функцию надо было в озу разместить, чтобы выполнение шло из него. Как в кейле не знаю, в IAR'е используется модификатор __ramfunc, если мне не изменяет память.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
toweroff
сообщение Feb 11 2009, 23:06
Сообщение #11


Гуру
******

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



Цитата(Rst7 @ Feb 12 2009, 01:05) *
Ненене smile.gif Только саму функцию надо было в озу разместить, чтобы выполнение шло из него. Как в кейле не знаю, в IAR'е используется модификатор __ramfunc, если мне не изменяет память.


ок, разместил. Компилятор показывает, что все нормально, все функции md5 помещены с адреса 0х40000000 до какого-то там. Скорость не изменилась

опять же, это симулятор и черт его знает, как будет в реальном процессоре

Пока хочу все отладить, чтобы потом не сильно бодаться с железкой
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Feb 12 2009, 07:21
Сообщение #12


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 просчитывать - вопрос
Go to the top of the page
 
+Quote Post
toweroff
сообщение Feb 12 2009, 09:04
Сообщение #13


Гуру
******

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



Цитата(AlexandrY @ Feb 12 2009, 10:21) *
А симулятор в Keil-е по умолчанию не учитывает вообще никаких задержек на шинах.


можно по-подробнее? как снять эти умолчания и задать конфигурацию задержек (если это вообще можно, конечно)?
Go to the top of the page
 
+Quote Post
Rst7
сообщение Feb 12 2009, 09:54
Сообщение #14


Йа моск ;)
******

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



Цитата
MD5 очень чувствителен к скорости памяти из которой читаются данные.


Ошибаетесь. Там всего одно считывание каждого слова. Главное, убрать буферизацию перед расчетом, вот она там скорости не прибавит ну никак.

Цитата
Перенос программы в RAM не даст практически ничего.


Даст. Процентов 10 в arm-режиме. Потому что сам расчет практически проводится в регистрах без особого доступа к переменным.

Пардон, считываний таки 4, а не 1.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Feb 12 2009, 11:46
Сообщение #15


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) *
Ошибаетесь. Там всего одно считывание каждого слова. Главное, убрать буферизацию перед расчетом, вот она там скорости не прибавит ну никак.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01515 секунд с 7
ELECTRONIX ©2004-2016