Сейчас на форуме: jinoweb (+6 невидимых) |
eXeL@B —› Программирование —› ByteToHex |
<< . 1 . 2 . 3 . 4 . 5 . >> |
Посл.ответ | Сообщение |
|
Создано: 07 июля 2018 22:06 · Поправил: Isaev · Личное сообщение · #1 Не подскажите максимально быстрый способ перевода? Помню во времена доса на асме буквально из десятка байт был финт для этого дела, может помнит кто? А то дельфовый IntToHex(n, 2) сожрал всю скорость, посмотрев сырки стало сразу понятно куда) А вообще нужно из md5 массива байт строку собрать если делать влоб Code:
то 10млн раз выполняются около 6 сек, хотелось бы поделить это время на 2 или 3... к слову, если вместо IntToHex просто добавлять '00', то будет 2 сек. Пробовал вместо простой конкатенации заюзать TStringBuilder, но нынче, похоже менеджер памяти уже сам вполне справляется с этим хламом и с ним только на 1 сек дольше получается. Так же пробовал выделить память сразу под всю строку и мувами загонять на места, но получается тоже дольше... в общем проблема только в переводе в hex, остальное, похоже достаточно оптимально работает ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh |
|
Создано: 08 июля 2018 16:34 · Поправил: dosprog · Личное сообщение · #2 Вот пример программки на Си: Code:
Процедура byte2hex() транслируется в такой код: Code:
Тут и оптимизаций никаких не требуется, всё и так нормально. | Сообщение посчитали полезным: Crawler, Isaev |
|
Создано: 08 июля 2018 16:49 · Личное сообщение · #3 |
|
Создано: 08 июля 2018 20:36 · Поправил: f13nd · Личное сообщение · #4 dosprog пишет: Тут и оптимизаций никаких не требуется, всё и так нормально. Все сишники так говорят, а потом в mr. exodia's debugger'е контекстные меню с лагом отрисовываются Вообще странно выглядит затея поставить себя в рамки текстовой формы вывода данных, а потом ставить рекорды скорости, чемпионат по бегу в мешках какой-то получается. Я бы на вашем месте в бин все вываливал и не мучался, все равно самому обрабатывать потом. ----- 2 оттенка серого |
|
Создано: 08 июля 2018 21:51 · Личное сообщение · #5 f13nd пишет: поставить себя в рамки текстовой формы вывода данных Вообще не понял, о чем речь, если честно - какой вывод, какие рамки? О__о Текстовая форма? О___о чего... может, я тупой, поясните, что ли. По поводу оптимизаций - тоже не понял. А что там оптимизировать? Если у человека руки не из жопы, то компилятор реально компилирует сишный код так, что на Ассемблере самостоятельно лучше не напишешь в 99% случаев. Это вроде как общеизвестный факт. ----- Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей. |
|
Создано: 08 июля 2018 22:14 · Личное сообщение · #6 dosprog Статистика(i5) по вашей функи и _itoa, ваша быстрее в 3.5 раз. Если взять так: Code:
То получается всего лишь в 1.4 раза быстрее, чем у вас, те разница мала. Нужно выполнять как можно меньше обращений в память и убрать конвенцию, те вставить процедуру как макро. ----- vx | Сообщение посчитали полезным: Crawler |
|
Создано: 08 июля 2018 22:22 · Поправил: f13nd · Личное сообщение · #7 Crawler пишет: Вообще не понял, о чем речь, если честно - какой вывод, какие рамки? Это скорей к задаче топикстартера, все равно его мд5 хеши видимо будут в дальнейшем обрабатываться, зачем тогда их выводить текстом непонятно. Ну а про руки и жопы, я больше склонен в тупняках ПО считать виновным злоупотребление чужими библиотеками и использование их не по назначению. ЗЫ: на правах хохмы ----- 2 оттенка серого |
|
Создано: 08 июля 2018 22:31 · Личное сообщение · #8 |
|
Создано: 08 июля 2018 22:45 · Личное сообщение · #9 f13nd По скрину получается что имеется цикл сразу за апи, которая отладочная(генерация ошибки) и не возвращает просто так управление. Значит что цикл это место останова или какой то маркер для обработчика ошибки, к примеру он может поменять условие и приложение будет висеть, до аттача отладчика. Зачем иначе это сделано хз. ----- vx |
|
Создано: 08 июля 2018 22:47 · Поправил: f13nd · Личное сообщение · #10 |
|
Создано: 08 июля 2018 22:50 · Поправил: difexacaw · Личное сообщение · #11 |
|
Создано: 08 июля 2018 22:53 · Поправил: ManHunter · Личное сообщение · #12 |
|
Создано: 08 июля 2018 23:02 · Личное сообщение · #13 за такие оптимизации руки нужно рубить. добавили асм вставку с мыслями гыгылол тупой конпилятор и тем самым на@бнули оптимизатор, выиграли в одном месте секунду, а в других потеряли десятки. если делайте вставки заворачивайте их в функцию и собирайте в obj. тс какой-то наркоман, я конечно понимаю что в делфи строки удобные, только зачем с ними работать и тем более зачем хранить строки когда можно хранить индексы, против делфи как языка ничего не имею, но вот пишущие на нем зачастую калеки. |
|
Создано: 08 июля 2018 23:10 · Личное сообщение · #14 |
|
Создано: 08 июля 2018 23:21 · Поправил: f13nd · Личное сообщение · #15 shellstorm пишет: добавили асм вставку с мыслями гыгылол тупой конпилятор и тем самым на@бнули оптимизатор Это отладочная штука оказалась, правда в официальной сборке програмы, непонятно зачем глухой тупняк вызывать, тот же мессаджбокс с этим справился бы лучше. Не оптимизация вобщем. ----- 2 оттенка серого |
|
Создано: 09 июля 2018 00:07 · Личное сообщение · #16 f13nd пишет: Все сишники так говорят, а потом в mr. exodia's debugger'е контекстные меню с лагом отрисовываются У него по большей части архитектурные проблемы, там UI как спрут, опутал практически все компоненты отладчика, а Qt не претендует на рекордный отклик, толстый рантайм с медленным рендером. Проблема в целом похожа на проблему ТС, только у одного помешательство на UI, у другого на строках. | Сообщение посчитали полезным: Bronco |
|
Создано: 09 июля 2018 01:49 · Поправил: dosprog · Личное сообщение · #17 f13nd пишет: dosprog пишет: Тут и оптимизаций никаких не требуется, всё и так нормально. Все сишники так говорят, а потом в mr. exodia's debugger'е контекстные меню с лагом отрисовываются Таки требуется? Ну, сделай, - интересно, как оно будет выглядеть. f13nd пишет: ЗЫ: на правах хохмы --> Link <-- В далеком 2009 сделал этот скриншот, иногда на него посматриваю и до сих пор не понял что за треш тут происходит и чьих это рук дело: разработчика или компилятора. А может трюк для системы предсказания ветвлений интела, что это вообще. Такого добра полно обычно, это нормально. Это код из библиотеки, которая транслировалась с дефайнами. Причём слелано было так, чтобы размер кода в обоих случаях (0/1) был одинаков. Примерно так: Code:
|
|
Создано: 09 июля 2018 02:52 · Поправил: f13nd · Личное сообщение · #18 dosprog пишет: Ну, сделай, - интересно, как оно будет выглядеть. Кто будет выглядеть? Еще один клон ольги? Хороший понт конечно дороже денег, но меня это к сожалению на подвиг не вдохновляет Можно просто на слово поверить, что мои менюшки, сделанные на апи, не тормозят. Если речь идет о приведенной функции, то я в том же посте обозначил, что если мы выжимаем максимум, ее вообще быть не должно там. dosprog пишет: Такого добра полно обычно, это нормально. Это код из библиотеки, которая транслировалась с дефайнами. Ну может быть потерялось там что-то из-за отключенного дефайна, тоже правдоподобная версия. ----- 2 оттенка серого |
|
Создано: 09 июля 2018 03:18 · Поправил: dosprog · Личное сообщение · #19 Ничего там не потерялось, всё на месте. f13nd пишет: Кто будет выглядеть? Еще один клон ольги? Хороший понт конечно дороже денег, но меня это к сожалению на подвиг не вдохновляет Какие клоны? Какие понты? Выглядеть будет не кто, а что - оптимизированная тобой функция byte2hex(), которая первоначально оттранслирована MSVC и её дизасм-листинг из отладчика был выложен тут в Там ты хоть вывернись, а сколько-нибудь существенной оптимизации не добьёшься. Ну, убрать пару обращений к памяти - так это пыль. |
|
Создано: 09 июля 2018 03:27 · Поправил: f13nd · Личное сообщение · #20 dosprog пишет: Там ты хоть вывернись, а сколько-нибудь существенной оптимизации не добьёшься. В третий раз говорю: объявлю буфер размером *ста мегабайт, кратным полю хеш-суммы и по мере заполнения буду выбрасывать на диск, итого 0 тактов процессора на преобразование в текст. Неплохо оптимизировано? ЗЫ: ну и если уж на то пошло, вижу 2 выборки указателя из памяти в этом листинге. Знаю, что кэш-память и всё такое, и скорей всего реального обращения к ОЗУ там каждый раз не будет, но сама инструкция выборки это тоже процессорное время. Да к тому же это еще и функция, то есть адрес возврата+аргументы туда-сюда по стеку гоняются, та же история. Так что вывернуться ещё как можно, был бы резон это делать. ----- 2 оттенка серого |
|
Создано: 09 июля 2018 05:12 · Поправил: Bronco · Личное сообщение · #21 f13nd пишет: а потом в mr. exodia's debugger'е контекстные меню с лагом отрисовываются +1 если в цикле больше 5-10к чего угодно, адские потери по времени, пока гуй синхронизируется. приходиться гальмовать доуевентами и принтами в статус бар, чтоб не так скучно было. с shellstorm, согласен полностью, это не сишный код, это гуй кьюта задумчивый. вот она теневуха крос платформы. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 09 июля 2018 10:03 · Поправил: dosprog · Личное сообщение · #22 |
|
Создано: 09 июля 2018 13:01 · Поправил: user99 · Личное сообщение · #23 Isaev, если еще есть вопрос по конвертации, то достаточно быстрый способ такой: Code:
Я эту функцию тестил на каком-то допотопном компе, получалось 70к байт конвертировались в HEX-строку не более 5мс. |
|
Создано: 09 июля 2018 17:01 · Личное сообщение · #24 16 байт и если out буффер предопределен. Ну, то есть сами под себя смотрите. Прок изначально написана под 8 байт пришлось добавить луп, тут надо бы AnsiChar, чтоб сразу вот 16 махом, но сначала войти в курс что такое psllw xmm0, 12 И вообще эту развертку реверсить. Code:
|
|
Создано: 09 июля 2018 18:06 · Личное сообщение · #25 какой-то херней маетесь. юзать сомнительные асм вставки с хмм регистрами и тут же похерив всю "оптимизацию"(?), дёрнув SetLength shellstorm пишет: но вот пишущие на нем зачастую калеки. юзаю дельфи лет 10-15, глаза/конечности на месте, ливер в порядке. спускать постоянно в трубу месяцы на разработку уи на апи(+ желательно чтоб оно работало), это не по мне, так и за всю жизнь можно ничего не написать, но вообще дураков работа любит |
|
Создано: 09 июля 2018 18:21 · Поправил: shellstorm · Личное сообщение · #26 SReg пишет: спускать постоянно в трубу месяцы на разработку уи на апи(+ желательно чтоб оно работало), это не по мне, так и за всю жизнь можно ничего не написать, но вообще дураков работа любит с каких пор в билдере UI стало сложнее делать? калеки в том смысле, что подавляющие большинство не могут реализовать самые банальные алгоритмы, не утверждаю, что все, но большинство, нет компонента, все, конец света. сам язык лучше многих и даже из прода, мне не нравится аудитория этого языка. Crawler все же равнозначного дизайнера нет ни у кого, даже у Qt уступает по скорости сделать хоть какой нибудь UI. у nana его вообще нет, у wxwidget привет из нулевых, gtk такая же история, сделать быстро и красиво, пожалуй только Qt с билдером. есть еще варианты с js декларативом, на этих фреймворках написаны почти все морды основных ав вендоров, но скорость работы оставляет желать лучшего, не electron но скоростями не удивляет. |
|
Создано: 09 июля 2018 18:24 · Личное сообщение · #27 |
|
Создано: 09 июля 2018 18:35 · Личное сообщение · #28 |
|
Создано: 09 июля 2018 18:43 · Личное сообщение · #29 |
|
Создано: 09 июля 2018 18:59 · Личное сообщение · #30 shellstorm Начнём с того, что C/C++ созданы не для того, чтобы рисовать интерфейсы. Написал ядро, которое быстро работает, а обвесить его можно уже чем угодно, ИМХО. ----- Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей. | Сообщение посчитали полезным: SReg |
|
Создано: 09 июля 2018 19:30 · Личное сообщение · #31 Crawler пишет: Начнём с того, что C/C++ созданы не для того, чтобы рисовать интерфейсы. кто сказал тебе такую глупость? ознакомься с историей языка, на момент его создания его хейтили за прожорливость и неповоротливость готового софта, современные хипстерские языки повторяют историю. ничего, что подавляющие большинство осевых морд написаны на сишке, как и игровых движков. с++ вообще решает архитектурные проблемы с. можно, но кто будет обвешивать гипотетически можно и уехм гвоздь забить. |
<< . 1 . 2 . 3 . 4 . 5 . >> |
eXeL@B —› Программирование —› ByteToHex |