Загадки мозга

Тема в разделе "WASM.HEAP", создана пользователем Blackbeam, 19 июн 2011.

  1. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    802
    Юный, активный, не нужный.

    Дельфя не код, это УГ. Тут не годится.

    :sarcastic:
     
  2. schuler

    schuler New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2021
    Сообщения:
    17
    Код (Text):
    1.  
    2. function StrLen(tStr:PChar):integer;  
    3. asm
    4.   PUSH  EBX
    5.   MOV  EDX,EAX  
    6. @L1:  MOV  EBX,[EAX]  
    7.   ADD  EAX,4  
    8.   LEA  ECX,[EBX-$01010101]  
    9.   NOT  EBX  
    10.   AND  ECX,EBX  
    11.   AND  ECX,$80808080  
    12.   JZ  @L1  
    13.   TEST  ECX,$00008080  
    14.   JZ  @L2
    15.   SHL  ECX,16  
    16.   SUB  EAX,2
    17. @L2:  SHL  ECX,9  
    18.   SBB  EAX,EDX  
    19.   POP  EBX
    20. end;
    21.  
    Код (Pascal):
    1.  
    2. function StrLen(tStr: PChar): integer;
    3. begin
    4.     result := 0;
    5.     while tStr[result] <> #0 do
    6.           if tStr[result + 1] <> #0 then
    7.              if tStr[result + 2] <> #0 then
    8.                if tStr[result + 3] <> #0 then
    9.                 inc(result, 4)
    10.              else
    11.              begin
    12.                  inc(result, 3);
    13.                  exit;
    14.              end
    15.             else
    16.             begin
    17.                 inc(result, 2);
    18.                 exit;
    19.              end
    20.          else
    21.          begin
    22.              inc(result);
    23.              exit;
    24.          end;
    25. end;
    26.  
    Разницы в скорости почти нет
     
  3. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    802
    Tech,

    Братишка а ты знаешь что этот человек f13 протекторов порешал больше, чем ты прожил ?

    Этот форум, люди было есчо когда ты в детский сад ходил и не тебе правила задавать.
     
    Последнее редактирование: 12 июн 2026
  4. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    802
    Tech,

    Тебя забанят, ты хочешь сломать то, что наработано годами.
     
  5. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    802
    Tech,

    Ты не понимаешь, этот скрипт убожество", сорян за термин, другой не применим:

    После сборки это превратится в билд чепухи. И это только длину строки узнать.

    > А что наработано то?

    Мы знаем архитектуру, сам я создал инструменты анализа, методы(картирование, наследование), работы по виртам, виксам.
    А вы сюда пришли с галимым паскалем без понятия даже что такое визор или профайлер. Не зная истории форума. Благодаря мне ты можешь редактировать свои сообщения.
     
  6. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    802
    Tech,

    Судя по скрипту, алго, ты умственно отсталый либо же школьник. Про select:case не слышал?

    А еще есть осевые интерфейсы для таких примитивов.

    Предлагаю таких сразу в бан.
     
    Последнее редактирование: 12 июн 2026
  7. schuler

    schuler New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2021
    Сообщения:
    17
    Ahimov, Это мой копипаст из сети, просто замерил скорость выполнения на делфи и на асме, никакой разницы не заметил по скорости. Вернее разница есть, но она не существенна.
     
  8. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    802
    schuler,

    А должна быть разница в профайле, про шедулер слыхал что такое поточное квантование ?

    Что за школосходка!?
     
  9. schuler

    schuler New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2021
    Сообщения:
    17
    Ahimov, В Delphi 7 нет встроенного профайлера, замерял через GetTickCount, а надо было через QueryPerformanceCounter ? Какое поточное квантование? с школьным уровнем 9го класса, конечно не слышал. Просто ковырялся в старье начала 2000х годов и нарвался на этот код
     
  10. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    802
    schuler,

    Понятно, сразу бы сказал.

    Замер профайла бывает двух видов. Первый реализован архитектурно - взводится высокопр. таймер, он вызывает прерывания. Процедура обработки берет адрес останова потока и матем. индексирует счетчик в адресном массиве. Так мы видим где задача, тоесть поток провел больше времени. Мы это называем - обеспечить покрытие кода(cover).
    Второй тип - замер в цикле. Но тут нужно понимать что есть задача, поток и это дискретно. Система дает квант времени, затем забирает примерно 20ms задача исполняется, затем уходит в сон.
    Замер в цикле ты увидешь поточное квантование и и расчет производительности будет неверен, матем ошибка без учета планирования.

    Простой пример - есть решения, это конструкторы, с виксов. Ты на вход даешь код, он формирует граф и пересобирает код назад, обычно мутация еще, но не суть.
    Так для оптимизации сборки необходим механизм BDO, тут есть моя тема и я нашел решение. Но не суть - использовался примитивный механизм, уменьшаем ветвление и ребилдим весь граф. Был использован профайлер, который показал этот косяк.

    Наверно много написал, сорян за опечатки я с сенсора :)
     
    schuler нравится это.
  11. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.436
    Ты сделал мой день. У индия к сожалению перья не держатся, приходится постоянно втыкать по делу и без.
     
  12. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    372
    Если хотите измерить время выполнения блока кода, просто создайте для этого благоприятную среду. Тогда и планировщик может не отобрать 30 мл/сек квант вашего потока. Шедулер передаёт управление только активным потокам в очереди, которые реально исполняются на данный момент. Если у вас открыто хоть 100 окон с разными приложениями, но все они находятся в фоне, планировщик не переключится ни на один из них, а будет постоянно отдавать квант только вашему профайлеру, окно которого висит на переднем плане.

    Но если в момент тестов у вас параллельно идёт, например, длительное копирование данных, тогда система отберёт ваш квант, и на такое-же время передаст его потоку копирования, после чего опять вернёт его вам. В общем случае нужно:

    1. Включить в биосе таймер HPET, чтобы получить от QueryPerfFreq() макс частоту 14 МГц.
    2. Закрыть все остальные приложения
    3. При помощи SetProcessAffinityMask(-1,1) оставить только 1 ядро ЦП
    4. Установить высокий приоритет своему потоку через SetPriorityClass(-1,HIGH_PRIORITY_CLASS), тогда у вас точно не отберут квант.
    5. Перед каждым замером очищать конвейер ЦП, например инструкцией lfence или cpuid.
    6. Иметь ввиду, что профилирование кода любыми методами не даёт 100% результата - всегда имеется погрешность.

    Вот небольшое приложение на fasm'e, которое измеряет длительность инструкций rdtsc, lfence, и api Sleep(500). Каждый тест производится не 1, а 5 раз подряд, после чего нужно выбрать наибольшее значение. Код показывает и частоту счётчика QPC - если она меньше 10 Мгц, значит HPET в системе не работает, и нужно включить его через bcd.

    profiler.png
     

    Вложения:

    • Profiler.zip
      Размер файла:
      5,5 КБ
      Просмотров:
      84
    Mikl___, Ahimov и schuler нравится это.
  13. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    802
  14. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    372
    Ahimov, нет.. я там не зареган.
     
  15. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.436
    Вместо сбора секций можно было LTO обойтись, не? (-flto) Ну и говоря о еще меньшем размере, Цэ/Плюсы то будет попроще без стандартных библиотек собрать, чем Паскали.
     
  16. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    802
    Tech,

    Размеры двух яп нельзя сравнить, так си использует импорт системных длл. Например для печати дробных чисел вызывается процедура из ртл, в нэйтив нет возможности печати математики(printf() не полноценна). В паскале это возможно билдится сразу, сравнение не корректно.

    На счет мин размера есть тема, там выполнен анализ загрузчика.

    дипсик сломали, из за перегрузки серверов выключили доступ в сети и файлы :dntknw:
     
  17. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    802
    Tech,

    Попробуй распечатать 1/3, поймешь о чем я. Может на счет билда не точно, я не знаю как у дельфи. Можешь проверить.

    Системная ntdll.Xprintf не поддерживает /e, f
     
  18. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    802
    Tech,

    Так ты делаешь чепуху, не рассматривая содержимое файлов, сравниваешь размер. Может там вообще область без ничего в 20кб.

    Сишное приложение завязано на системные длл, соотв. оно в любом случае меньше размером, тк часть кода уже встроена в систему. Открывай дизом и смотри содержимое.

    > Просто перепиши это:

    Это не работает на андроиде, параметры описаны в спецификации. Если лень читать, спроси у бота. Мне за тебя это делать не интересно.
     
  19. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.436
    Минимальный размер хеллоу ворлда будет 4кб без объединения секций.
    --- Сообщение объединено, 13 июн 2026 ---
    Код (C):
    1.  
    2. #include <windows.h>
    3. void EntryPoint() {
    4.     MessageBoxA(NULL, "Hello World", "Hello World", MB_OK);
    5.     ExitProcess(0);
    6. }
    7.  
    Код (Text):
    1.  
    2. x86_64-w64-mingw32-gcc -o ./test.exe -O3 -Os -flto -nostdlib -s ./test.c -eEntryPoint -lkernel32 -luser32
    3. wine ./test.exe
    4.  
    Код (Text):
    1.  
    2. > ls -l
    3. -rw-r--r-- 1 user user  124 июн 13 15:26 test.c
    4. -rwxr-xr-x 1 user user 3584 июн 13 15:31 test.exe
    5. -rw-r--r-- 1 user user  101 июн 13 15:30 test.sh
    6.  
     
  20. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.275