1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||||||
1 | ||||||
Алгоритм шифрования DES (необходимо ускорить любым доступным способом)17.12.2012, 01:25. Показов 3648. Ответов 18
Метки нет (Все метки)
Есть алгоритм шифрования дес, он работает но работает медленно ну или скажем так ... недостаточно быстро для того чтобы препод его принял. Посоветуйте как можно ускорить его в каком-либо месте. Часть функций я не привожу так как я уверен что там оптимизировать нечего либо оптимизация не даст прироста потому что эти функции всё равно выполняются один раз.
Посоветуйте хоть что-нибудь ато я в отчаянии, вроде и не особо говнкодил, но по лимиту времени совсем же не прохожу
0
|
17.12.2012, 01:25 | |
Ответы с готовыми решениями:
18
Алгоритм шифрования DES и цифровая подпись MD5 Алгоритм шифрования DES Реализовать шифрование текста любым простым способом (+ ключ) Алгоритм сортировки массива ( Любым способом ) |
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
17.12.2012, 01:50 [ТС] | 3 |
Сам понимаешь не слишком поможет Но сейчас сделаю это. Моё решение сейчас проигрывает варианту препода в 4.2 раза, а должно МАКСИМУМ в 3.
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
17.12.2012, 02:06 [ТС] | 5 |
Вообще реально не понимаю чего мой вариант такой медленный получился, вроде же не так фигово я всё написал
Добавлено через 1 минуту К слову: а как-то в студии можно посмотреть ээээ план выполнения чтоли, ну в общем как в sql сервере чтобы, я хочу помотреть где больше всего времени тратиться, хотя оно и так понятно что в цикле шифрования блока, но всё равно идея в принципе неплохая взгялунть на процентное соотношение сожранного процессорного врмени, можно так? Ну чтобы автоматом в студии как-то если она это умеет? Если руками дописывать куски мерялок и сверяться то не пойдёт, слишком долго и пользы мало. Добавлено через 6 минут Нашёл в студии анализ производительности ...
0
|
Модератор
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,524
|
|
17.12.2012, 02:07 | 6 |
профилировщиком проходил?
вот статья про него http://msdn.microsoft.com/ru-r... 37887.aspx честно говоря сам только нашел в гугле еще не читал
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
17.12.2012, 02:46 [ТС] | 7 |
ValeryS, прошёлся, он тупой Сначала попробовал прогнать мой код который выполняется менее 10 секунд так он и отчёта не дал. Потом сунул ему другой код где есть вызов функции, он сказал что время жрёт мейн (в мейне был вызов той функции), потом попробовал полноценное приложение им прогнать так он сказал что больше всего времени жрал выбор файла для шифрования и собственно само шифрование (без подробностей даже какая конкретно функция), короче им можно отлаживать огромные приложения разве что чтобы смотреть какой компонент твоего мега приложения жрёт больше всего чего-то, для мелкой шифровалки он не справляется.
0
|
Модератор
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,524
|
|
17.12.2012, 02:52 | 8 |
а статью прочитал
там вроде написано как построчно посмотреть вот тебе еще одна ссылка http://citforum.ru/book/optimize/chapter1.shtml
1
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||||||
17.12.2012, 13:47 [ТС] | 9 | |||||
ValeryS, спасибо конечно, но если я ещё и за профилировщики возьмусь то на дес совсем не хватит. Тут и так понятно что вызывается то функция шифрования блока и дешифрования. А в ней вызываются в цикле 16 раз:
Добавлено через 1 час 9 минут К слову ещё вопросы (ответы на которые мне помогли бы оптимизировать работу). 1)Быстрее вызов void функции с передчей параметра uint64_t по ссылке и возврат результата через этот же параметр VS вызов функции с const аргументом переданным по ссылке и возврат результирующего значения uint64_t 2)При работе с union Block в котором максимум храниться 64 бита как сделать лучше: //uint64_t value; Block block; block.dword = value; или можно попытаться написать Block* block = &value; или же юнион в котором хранится 64 бита не обязательно сам размером 64 бита и эта штука не проконает ? Добавлено через 6 минут И ещё вопрос: на данный момент у меня мой класс вместе с функциями (те то что я привёл выше) всё в .h файле. Повлияет ли как-то на скорость выполнения программы если я разделю на файл заголовков и реализаций (.h и .cpp файл), или это только на читабельность повлияет, а на скорость никак? Я просто раньше как-то не заморачивался над этим и не экономил доли секунд.
0
|
Модератор
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,524
|
||||||||||||||||
17.12.2012, 14:27 | 10 | |||||||||||||||
по моему нет
ты же больше нигде не используешь эту таблицу? забей сразу значение ключей типа
избавишься от этого сдвига далее это ты выставляешь младший бит если установлен флаг? может перейти к булю
этим ты увеличишь скорость, может быть во много раз если код не попадает в кэш и можно будет избавится от таблицы (значит от адресной арифметики) скорость еще увеличится например так
да читабельность потеряется может придется делать комментарии но скорость увеличится, тем более если процессору удастся спараллелить команды тут уже надо смотреть листинг но при возврате значения будут задействованы два регистра EAX EDX а при ссылке будет работа с памятью но повторюсь надо смотреть ну а как еще искать слабые места, иногда они возникают на пустом месте например из-за того что память не выравнена на параграф Добавлено через 2 минуты здесь ты берешь адрес а при юнион нет выигрыш
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||||||
17.12.2012, 14:34 [ТС] | 11 | |||||
Развернул цикл средних перестановок (те что каждый цикл) до 32 написанных руками + там где блок добавил использование указателя (почему-то когда выделяешь руками через new память под блок и используешь потом указатели то быстрее работает где-то на 1/15), вроде теперь прохожу по лимиту времени, хотя и не факт. Я сейчас тестирую на процессоре амд, а сдавать на интел. Мне там говорили что интеловский компилятор творит якобы чудеса ... вопрос: можно ли собрать на АМД процессоре интеловским компилятором приложение оптимизированное под процессоры ИНТЕЛ ? Ну пускай оно у меня на амд хоть и в 5 раз медленее работает, важно чтобы при сдаче на интеловском процессоре оно работало быстро-быстро.
Добавлено через 2 минуты ок, в принципе дельный совет, это ещё поможет ускориться. Думаю тогда будет достаточно для сдачи, хотя разоваричавание цикла вот так уже дало в 3 раза прирост аж:
0
|
Модератор
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,524
|
|
17.12.2012, 14:43 | 12 |
а может дать еще больше
представь процессор не угадал ему придется выбросить весь кэш и забить заново, при большом кэше это гораздо больше времени Добавлено через 2 минуты у тебя здесь три сдвига И и ИЛИ я же тебе показал один сдвиг И и ИЛИ Добавлено через 3 минуты угадывает не компилятор а процессор на стадии выполнения посему линейный код быстрее чем ветвления (угадывать не надо)
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
17.12.2012, 15:05 | 13 |
ValeryS, Про развертку циклов - изврат же. Для этого спец. опция компилятора есть. К примеру в gcc -funroll-loops. А вручную развертывать циклы... это... кхм.
ТС, используй profiler. Он тебе покажет, ГДЕ у тебя есть проблема в скорости.
1
|
Модератор
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,524
|
|
17.12.2012, 15:21 | 14 |
серьезно
а как насчет этого а зачем мне развертывать все циклы, если проблемных один два? а оптимизация вообще дело не легкое иногда приходится с нуля переписывать ну он и показал в averagePermutation дальше то править нужно
0
|
ForEveR
|
17.12.2012, 15:26
#15
|
Не по теме: ValeryS, Ок. Беру свои слова назад. Не по делу влез. Вроде и читал тему, а все равно чушь пронес. Извиняюсь.
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
17.12.2012, 15:40 [ТС] | 16 |
Так я на максимум оптимизатор выкрутил уже, я тоже думал что он разоварачивает цикли, а мой код просто медленный а тут вот попробовал и ... Я в курсе что gcc это умеет, но в студии почему-то толи не умеет толи не хочет, не могу точно сказать. Но я все разворачивать и не буду наверное, я разверну только те что происходят каждый раз при вызове, например та же перестановка вызывается 16 раз каждые 8 байт и тут лучше уж развернуть руками чтобы не пугать компилятор.
К слову: как-то вроде можно было в студии писать толи через pragma толи ещё как чтобы были секции которые можно свернуть нажав плюсик слева от кода (по умолчанию можно сворачивать блоки комментариев, функции и классы), так вот мне это сейчас очень надо чтобы сворачивать те полотенца по 40 строчек... как это делать, напомните пожалуйста, выгуглить у меня что-то не получилось. Добавлено через 4 минуты Ну я плохо выразился ... Конечно я понимаю что угадывание переходов будет на стадии выполнения. В общем я к тому что интеловский компилятор вроде лучше задействует возможности интеловских процессоров по использованию переходов и т.д и даёт код работающий примерно в два раза быстрее чем тот что даёт студия (конкретно на интеловских процессорах). Вот мне бы как-то скомпилировать этим хитрым компилятором на амд можно? Добавлено через 4 минуты Таки студия разворачивает цикли, только толи разворачивает не все толи я не знаю. То что я руками развернул цикл из 32 перестановок дало прироста в 3 раза. А то что я развернул цикл из 16 итераций шифрования дало прирост в 1/100 буквально. Видимо оно не разворачивало тот цикл по каким-то причинам ... может static в объявлении массива не понравился или ещё чего.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
17.12.2012, 15:41 | 17 |
Gepar, #pragma region http://msdn.microsoft.com/en-u... 80%29.aspx
1
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
19.12.2012, 16:23 [ТС] | 18 |
Итого развертывание цикла руками + замена сбоксов которые больше понравились компилятору (первые выглядили так же в принципе, только они совсем заранее рассчитаны были и поэтому знамила аж 8 кб что видимо вылезало постоянно из кеша процессора и скорость падала) и прирост в итоге получился хороший. Другое дело что правда препод приставучий и пристал со своим "А чё это у тебя тут в классе ключи храняться, это что же получается вдруг я надумаю мультипоточное приложение писать то у меня будет на каждый экземпляр класса по 128 байт ключей, нипарядачек, иди переделывай и сбоксы свои 8 кб незабудь убрать, они мне тоже не нравяться". Прикрутил вот теперь чтобы класс хранил указатель на структуру с подключами и попробую завтра это дело втюхать
Добавлено через 1 минуту Ещё я так и не понял чего на форуме нигде нету готового деса/аеса, такой огромный форум и ни одного готового примера который можно было бы собрать и нормально разобрать по нему что как работает.
0
|
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
|
|
20.12.2012, 03:26 | 19 |
у меня есть дес, но он в корне не так сделан как у тебя. без использования 64 разрядного инта, например...
0
|
20.12.2012, 03:26 | |
20.12.2012, 03:26 | |
Помогаю со студенческими работами здесь
19
Алгоритм шифрования DES (Входные данные в HEX) Необходимо подобрать алгоритм шифрования(симметричный, поточный) для передачи потокового видео по сети Сортировка массива любым способом Найти токи любым способом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |