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

 
 
> Библиотеки 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
 
Start new topic
Ответов
Rst7
сообщение Feb 12 2009, 12:08
Сообщение #2


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

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



Цитата
Правильно, только не слова, а байта, т.к. исходный массив над которым производятся вычисления может быть даже по словам не выровнен.


В данном конкретном случае эту буферизацию можно выбросить.

Однако, я немного просмотрелся (все же 4 считывания), так что внести кеширование блока в расчет будет правильным ходом.

Кроме того, я сейчас не помню, LDR Rx,[PC+число] и аналогичная загрузка с автоинкрементом обычного регистра одно и то же по тактам, или нет? Если второй способ быстрее, то имеет смысл еще заменить загрузки констант в самом расчете.


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


Ally
******

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



Не понял про буфферизацию biggrin.gif
Я говорю, что память читать ВНЕШНЮЮ надо всю по любому.
Если чел не сделает буфферизацию, ему придется вообще чуть ли не через каждый оператор к внешней памяти обращаться!
Никакого смысла разбираться сколько там времени будут выполняться операторы не имеет, к внешней памяти доступ идет через транзакции по AHB которым пофик какими операторами вы их вызвали.
Продуктивней уж ковыряться в настройках контроллера внешней памяти

На всяк случай приведу исходник главной функции, чтоб проверить об одном и том же ли мы говорим.
Здесь в качестве аргумент data[64] передается указатель на данные во внешней памяти.

Код
void md5_process( md5_context *ctx, uint8 data[64] )
{
  uint32 X[16], A, B, C, D;

  GET_UINT32( X[0],  data,  0 );
  GET_UINT32( X[1],  data,  4 );
  GET_UINT32( X[2],  data,  8 );
  GET_UINT32( X[3],  data, 12 );
  GET_UINT32( X[4],  data, 16 );
  GET_UINT32( X[5],  data, 20 );
  GET_UINT32( X[6],  data, 24 );
  GET_UINT32( X[7],  data, 28 );
  GET_UINT32( X[8],  data, 32 );
  GET_UINT32( X[9],  data, 36 );
  GET_UINT32( X[10], data, 40 );
  GET_UINT32( X[11], data, 44 );
  GET_UINT32( X[12], data, 48 );
  GET_UINT32( X[13], data, 52 );
  GET_UINT32( X[14], data, 56 );
  GET_UINT32( X[15], data, 60 );

#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))

#define P(a,b,c,d,k,s,t)                                \
{                                                       \
    a += F(b,c,d) + X[k] + t; a = S(a,s) + b;           \
}

  A = ctx->state[0];
  B = ctx->state[1];
  C = ctx->state[2];
  D = ctx->state[3];

#define F(x,y,z) (z ^ (x & (y ^ z)))

  P( A, B, C, D,  0,  7, 0xD76AA478 );
  P( D, A, B, C,  1, 12, 0xE8C7B756 );
  P( C, D, A, B,  2, 17, 0x242070DB );
  P( B, C, D, A,  3, 22, 0xC1BDCEEE );
  P( A, B, C, D,  4,  7, 0xF57C0FAF );
  P( D, A, B, C,  5, 12, 0x4787C62A );
  P( C, D, A, B,  6, 17, 0xA8304613 );
  P( B, C, D, A,  7, 22, 0xFD469501 );
  P( A, B, C, D,  8,  7, 0x698098D8 );
  P( D, A, B, C,  9, 12, 0x8B44F7AF );
  P( C, D, A, B, 10, 17, 0xFFFF5BB1 );
  P( B, C, D, A, 11, 22, 0x895CD7BE );
  P( A, B, C, D, 12,  7, 0x6B901122 );
  P( D, A, B, C, 13, 12, 0xFD987193 );
  P( C, D, A, B, 14, 17, 0xA679438E );
  P( B, C, D, A, 15, 22, 0x49B40821 );

#undef F

#define F(x,y,z) (y ^ (z & (x ^ y)))

  P( A, B, C, D,  1,  5, 0xF61E2562 );
  P( D, A, B, C,  6,  9, 0xC040B340 );
  P( C, D, A, B, 11, 14, 0x265E5A51 );
  P( B, C, D, A,  0, 20, 0xE9B6C7AA );
  P( A, B, C, D,  5,  5, 0xD62F105D );
  P( D, A, B, C, 10,  9, 0x02441453 );
  P( C, D, A, B, 15, 14, 0xD8A1E681 );
  P( B, C, D, A,  4, 20, 0xE7D3FBC8 );
  P( A, B, C, D,  9,  5, 0x21E1CDE6 );
  P( D, A, B, C, 14,  9, 0xC33707D6 );
  P( C, D, A, B,  3, 14, 0xF4D50D87 );
  P( B, C, D, A,  8, 20, 0x455A14ED );
  P( A, B, C, D, 13,  5, 0xA9E3E905 );
  P( D, A, B, C,  2,  9, 0xFCEFA3F8 );
  P( C, D, A, B,  7, 14, 0x676F02D9 );
  P( B, C, D, A, 12, 20, 0x8D2A4C8A );

#undef F

#define F(x,y,z) (x ^ y ^ z)

  P( A, B, C, D,  5,  4, 0xFFFA3942 );
  P( D, A, B, C,  8, 11, 0x8771F681 );
  P( C, D, A, B, 11, 16, 0x6D9D6122 );
  P( B, C, D, A, 14, 23, 0xFDE5380C );
  P( A, B, C, D,  1,  4, 0xA4BEEA44 );
  P( D, A, B, C,  4, 11, 0x4BDECFA9 );
  P( C, D, A, B,  7, 16, 0xF6BB4B60 );
  P( B, C, D, A, 10, 23, 0xBEBFBC70 );
  P( A, B, C, D, 13,  4, 0x289B7EC6 );
  P( D, A, B, C,  0, 11, 0xEAA127FA );
  P( C, D, A, B,  3, 16, 0xD4EF3085 );
  P( B, C, D, A,  6, 23, 0x04881D05 );
  P( A, B, C, D,  9,  4, 0xD9D4D039 );
  P( D, A, B, C, 12, 11, 0xE6DB99E5 );
  P( C, D, A, B, 15, 16, 0x1FA27CF8 );
  P( B, C, D, A,  2, 23, 0xC4AC5665 );

#undef F

#define F(x,y,z) (y ^ (x | ~z))

  P( A, B, C, D,  0,  6, 0xF4292244 );
  P( D, A, B, C,  7, 10, 0x432AFF97 );
  P( C, D, A, B, 14, 15, 0xAB9423A7 );
  P( B, C, D, A,  5, 21, 0xFC93A039 );
  P( A, B, C, D, 12,  6, 0x655B59C3 );
  P( D, A, B, C,  3, 10, 0x8F0CCC92 );
  P( C, D, A, B, 10, 15, 0xFFEFF47D );
  P( B, C, D, A,  1, 21, 0x85845DD1 );
  P( A, B, C, D,  8,  6, 0x6FA87E4F );
  P( D, A, B, C, 15, 10, 0xFE2CE6E0 );
  P( C, D, A, B,  6, 15, 0xA3014314 );
  P( B, C, D, A, 13, 21, 0x4E0811A1 );
  P( A, B, C, D,  4,  6, 0xF7537E82 );
  P( D, A, B, C, 11, 10, 0xBD3AF235 );
  P( C, D, A, B,  2, 15, 0x2AD7D2BB );
  P( B, C, D, A,  9, 21, 0xEB86D391 );

#undef F

  ctx->state[0] += A;
  ctx->state[1] += B;
  ctx->state[2] += C;
  ctx->state[3] += D;
}


Цитата(Rst7 @ Feb 12 2009, 14:08) *
В данном конкретном случае эту буферизацию можно выбросить.

Однако, я немного просмотрелся (все же 4 считывания), так что внести кеширование блока в расчет будет правильным ходом.

Кроме того, я сейчас не помню, LDR Rx,[PC+число] и аналогичная загрузка с автоинкрементом обычного регистра одно и то же по тактам, или нет? Если второй способ быстрее, то имеет смысл еще заменить загрузки констант в самом расчете.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- toweroff   Библиотеки MD5 и SHA1   Feb 11 2009, 19:21
- - Rst7   Во-первых в штатном MD5 прилично оверхеда на подго...   Feb 11 2009, 19:35
|- - toweroff   Цитата(Rst7 @ Feb 11 2009, 22:35) Во-перв...   Feb 11 2009, 20:07
- - Rst7   ЦитатаЕсли перелопатить это все под int Я так пон...   Feb 11 2009, 20:19
|- - toweroff   Цитата(Rst7 @ Feb 11 2009, 23:19) Я так п...   Feb 11 2009, 20:25
- - Rst7   Сейчас глянул по быстрому исходник мд5. Похоже, на...   Feb 11 2009, 21:03
|- - toweroff   Цитата(Rst7 @ Feb 12 2009, 00:03) Сейчас ...   Feb 11 2009, 21:12
- - AlexandrY   Что-то больно хороший результат у вас получается. ...   Feb 11 2009, 21:23
|- - toweroff   Цитата(AlexandrY @ Feb 12 2009, 00:23) Чт...   Feb 11 2009, 21:48
|- - AlexandrY   110 нс !? Тогда еще процентов на 20 в худшую ...   Feb 12 2009, 07:21
|- - toweroff   Цитата(AlexandrY @ Feb 12 2009, 10:21) А ...   Feb 12 2009, 09:04
- - Rst7   ЦитатаПопробовал копировать во втутреннюю RAM куск...   Feb 11 2009, 22:05
|- - toweroff   Цитата(Rst7 @ Feb 12 2009, 01:05) Ненене ...   Feb 11 2009, 23:06
- - Rst7   ЦитатаMD5 очень чувствителен к скорости памяти из ...   Feb 12 2009, 09:54
|- - AlexandrY   Правильно, только не слова, а байта, т.к. исходный...   Feb 12 2009, 11:46
- - toweroff   О во что небольшой вопрос вылился AlexandrY, кон...   Feb 12 2009, 14:37
- - Rst7   RE: Библиотеки MD5 и SHA1   Feb 12 2009, 15:32
|- - toweroff   Цитата(Rst7 @ Feb 12 2009, 18:32) Вообщем...   Feb 12 2009, 20:31
- - Rst7   Блок должен быть 64 байта. Ага, а вот и промашка ...   Feb 12 2009, 21:20
- - toweroff   Вот теперь ОК Выигрыш (по данным Keil) - почти 5,...   Feb 12 2009, 22:37


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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 06:33
Рейтинг@Mail.ru


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