|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Привет котики! С пятницей всех. Сегодня ваш кот придумал Proof-of-Concept. Обсудите. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Что будем обсуждать - возможности. Что здесь обсуждать не будем - причины. Go-Go! P.S. Спрасибо Андрейке за каламбур. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 18:16 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
А зачем "<Void,Void>" ? Как концепт - оригинально Замечание к концепту: буилдер должен буилдить (копилить) а выполнять наверное нужно метод Run Недостатки - компиляция/построение в момент выполнения: проблемы с безопасностью проблемы с отладкой (бреак поинты поставить не получится) перформанс (если правильно буилдить один раз при запуске приложение, не критично) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 18:33 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
mayton Что будем обсуждать - возможности. А чего тут обсуждать, ничего не возможного я не вижу главное, что бы у сегмента памяти не стояло галочки запрета выполнения. А так: создал в памяти, перешел, выполнилось https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc https://docs.microsoft.com/en-us/windows/win32/memory/memory-protection-constants PAGE_EXECUTE Enables execute access to the committed region of pages. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 18:35 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Если это переписать так Код: java 1.
и объявить синглтоном то вопросы перформанса уходят. Остаётся просто технический стек. Собрать это через "as/nasm" в рантайме. Положить в локальный фолдер helloWorld.o, и вызвать через обычный native как java делает с библиотеками. Здесь просто важно чтобы бинарник был создан до того как будет вызван статик-конструктор JNI-переходника. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 18:37 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
mayton Собрать это через "as/nasm" в рантайме. Если все равно имплементить все команды в виде ф-ций, то нафиг нужен as/nasm ? сразу машинный код. mayton Положить в локальный фолдер helloWorld.o, и вызвать через обычный native как java делает с библиотеками просто в память ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 18:40 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev mayton Собрать это через "as/nasm" в рантайме. Если все равно имплементить все команды в виде ф-ций, то нафиг нужен as/nasm ? сразу машинный код. 100% ты прав. Я сразу думал о динамической компилляции. Просто думаю что не потяну чисто по человечески. Фигли. Свой компиллятор создать и линкер. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 18:41 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Что здесь обсуждать не будем - причины. Без этого это очередной вброс и флейм ни о чем Делать реализацию ассемблера x86 или amd64 - лично я смысла не вижу НО сделать реализацию авторподмножества команд, например: MMX, SSE2 - IMHO смысл уже появляется. Команд меньше, реально сделать реализацию и протестировать на какой нибудь более-менее осмысленной задаче. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 18:44 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Мда... сделать упор на SIMD и векторизацию. При чем я предполагал что такой софистический пример как HelloWorld это просто tech-demo. На деле-же он никому не нужен. А вот циклический расчет какого-то алгоритма на AVX-512 регистрах может быть интересен. При чем цикл должен быть внутри ассемблерного бинарника. Иначе накладные на JNI сожрут весь полезный эффект. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:05 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
mayton Мда... сделать упор на SIMD и векторизацию. При чем я предполагал что такой софистический пример как HelloWorld это просто tech-demo. На деле-же он никому не нужен. А вот циклический расчет какого-то алгоритма на AVX-512 регистрах может быть интересен. При чем цикл должен быть внутри ассемблерного бинарника. Иначе накладные на JNI сожрут весь полезный эффект. И цикл и, самое главное (сложное), memory model. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:10 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Проблемы чисто "кодинга", как я вижу: Минимум две архитектуры процессора (коды инструкций): x86 amd64 Минимум две ОС (выделение памяти, установка PAGE_EXECUTE): Windows Linux (POSIX?) Оптимально реализовывать две ветки: Бинарный код (трансляция и бинарное выполнение) Полностью софтовый (будет жутко медленно, но появляется возможность дебага/обучения) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:12 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Мда... тут насчет Windows/Linux это серъезный пласт работы. Много нудоства. Я-бы оформил базовые интерфейсы. А кто-то бы наполнил имплементацию. Но кто доброволец? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:16 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
mayton, Такой код Винда любит намеренно ломать, т.к. он похож на то, чем любят заниматься эксплоиты. Как/когда это сломается, и как это обойти - доков не будет (зачем мсофту образовывать хакеров себе в ущерб). Общая философия - любой машинный (или .Net) код который не прошел через канал Вин-лоадера считается неправомерным, и подлежит остановке. Как это на других платформах, я не знаю. Помню что кому-то приходилось библиотеку regex переписывать, когда такие трюки с генерацией кода на лету в ОС запретили. Однако можно на лету создать ДЛЛ и подгрузить ее в процесс. Проходит через лоадер - официально поддерживается, кроме некоторых залоченых систем. Минимальная PE-DLL для винды не слишком велика. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:16 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Список инструкций SSE2: https://docs.oracle.com/cd/E18752_01/html/817-5477/epmpv.html Мда... тут насчет Windows/Linux это серъезный пласт работы. Много нудоства. для начала можно ограничится одним вариантом amd64 + Windows. Linux и backport to 32 бита если что-то заведется ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:20 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
MMX - уже сильно устарел SSE3,4,5....100500 - можно и потом добавить в общем, SSE2 наверное золотая середина для 2000-ных годов ))) /а кто скажет, что 2020 не 2000-ые пусть первым бросит в меня камень ))) / ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:21 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Да насчет AVX-512 я поторопился. Это слишком новая технология. А я хотел чтоб была совместимость с моим Ryzen-5. Пожалуй сделаю шаг назад. Да и нужно какой-то алгоритм интересный взять для демо. Я мог-бы взять проверку простоты числа. Но он для SIMD не подходит. Тут надо какое-то действие над массивом делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:24 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
mayton, Решение в поиске задачи? :) Нейронную сеть сделайте. Они модные, и там массивы больше. Из простого - объемную диффузию посчитать от разнородных источников. Легко раскрасить для демо. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 20:18 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Да. Нейронка это мысль. Но там - умножение матриц - это 1 слой. Надо будет соединять несколько слоёв. +Функции активации. На ассемблере я врядли такой сложности код сразу напишу. Хотелось-бы в качестве демо что-то попроще. И чтобы цикл был внутри ассемблера. Что такое объемная диффузия - не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 21:04 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
А что, 21-е прерывание в Windows еще живет? Или это JVM под DOS, кстати, есть такая? Не, понятно, это не вопрос к концепту, просто к слову пришлось. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 21:07 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
shalamyansky А что, 21-е прерывание в Windows еще живет? Или это JVM под DOS, кстати, есть такая? Не, понятно, это не вопрос к концепту, просто к слову пришлось. Не обращайте внимание на 21 прерывание. Это просто я скопи-пастил чтоб показать возможности инлайн ассемблера. Конечно в данном примере практического смысла никакого нет. Надо искать задачи которые в Java раскрывают возможности современного процессора. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 21:09 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Может сделать упор на FPU ? https://en.wikibooks.org/wiki/X86_Assembly/Floating_Point Красиво. 80битная вещественная точность. И заодно вспомню калькулятор МК-60. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 21:33 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Up. Без elf-генерации тут не обойтись. И хотя спека не выглядит уж слишком сложной https://ru.wikipedia.org/wiki/Executable_and_Linkable_Format я начал искать парсеры. Почему парсеры? Ну... чтобы правильно генерить надо сначала понять как он устроен внутри. Идея такая. Я беру ассемблер GNU assembler. Пишу на нем хейлохты-ворлд и просто смотрю как он устроен. Особо меня интересуют всякие формальные шапки и декларации и соглашения по вызову. Как только я пойму его минимальную структуру которая нужна - вставка ассемблера будет задачей итеративной. По сути я даже предполагаю что ассемблер будет жлобский и ограниченный. Далее я расчитываю что опенсорц-сообщество поможет его доделать. По поводу парсеров. Есть такая технология kaitai struct https://kaitai.io/ Я вчера ее опробовал. Вобщем идея такая. Вы формируете некий декларативный описатель формата. Например для *.dbf файлов (фрагмент). Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
И по этому описателю фреймворк kaitai генерирует парсер. Поддерживаются языки Код: java 1.
Тоесть описатель почти полностью гетерогенный. Вчера с тогоже сайта стянул описание формата .elf и попробовал парсить свой каталог /usr но валят ошибки. Предполагаю что у меня 64х битная Linux, а образец elf.ksy исторически как демо пример был создан для 32х битных архитектур. Еще не разбирался. Я программирую на java, но будет демократичным дать форуму тоже возможность пощупать парсер. Поэтому я сделаю под csharp, python, cpp_stl тоже в качестве примера и приаттачу сюда. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 16:06 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Зачем какие-то форматы, парсеры? Код, это просто byte[]. Ассемблер просто инструкцию в byte преобразовывает. Выделить память, заполнить кодом, поставить признак executable... запустить... словить GPF error ))) Скорее тут надо хорошая идея по работе с данными для алгоритмов. Т.к. заталкивание данных heap <--> native самое долгое и ресурсозатратное. IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 16:09 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Я предвидел вопрос о JNI и взаимодействии java-heap - native. Я скажу так что нужно в ассемблер переносить не 1 инструкцию а целый алгоритм. С циклами. И с ощутимым временем отклика хотя бы в 1 порядок превышающим накладные на JNI. Осилит ли java-ист написание целого алгоритма на assembler - я не знаю. Этот вопрос - за кадром. Но я вобщем и не спрашиваю. Собственно тема интересна только тем разработчикам которые хотя-бы что-то в этом знают и ищут. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 16:16 |
|
|
start [/forum/topic.php?fid=16&tid=1339711]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
others: | 246ms |
total: | 417ms |
0 / 0 |