Сообщение от Spectator:
шифрация/дешифрация, аудио-видео кодеки, игры
это и есть тяжелая математика. дискриминант тыщу раз в секунду можно и так посчитать...
Сообщение от pwei: Насколько рационально сегодня знать asm?
Открываем hh.ru и смотрим статистику востребованности.
Что удивительно есть вакансии http://hh.ru/applicant/searchvacancy...riod=30&page=0
Правда есть ряд "Но":
1) много вакансий для ебмеддеров, а у них зп низкие. На большие деньги надо иметь вагон опыта работы и кучу знаний по смежным областям, асм тут как-то сбоку припеку
2) вакансии во всякие НПО "Вектор". Много legacy кода безумного и прочие радости гос контор
3) вариант - тот кто составлял вакансию в теме не разбирается, написал до кучи много страшных слов
PS:
Мое личное мнение: асм остался только там, где без него совсем нельзя. List comprehension в python экономит мне кучу времени и места на экране, и мне плевать влезает оно в кеш или нет. Больше в теме отписываться не буду, дабы спор по избитой теме не поддерживать. Извините, если что, за то что стал невольным инициатором ее. Всем удачи!
[Ответ]
Что то не пропустил это сообщение изначально, случайно только что заметил.
Для LoadLibrary что dll что exe - суть одно. Это файлы одного формата, разница только в том что в dll обычно нет "точки входа". Ну и не документируются обычно exe, в отличае от стандартных системных DLL.
А так вполне можно влезть с дизассемблером / отладчиком в любой exe, найти там нужную функцию, немного модифицировать PE секцию и пожалуйста - используй любую функцию, существующую в программе.
В общем и целом - вполне себе преимущество человека, знающего ассемблер.
Вполне можно представить себе ситуации, когда это будет полезно (правда, не совсем законно ).
[Ответ]
Spectator 22:18 01.02.2012
Сообщение от Pengvin:
это и есть тяжелая математика. дискриминант тыщу раз в секунду можно и так посчитать...
А если надо не "тыщу"? А миллион? Вот надо и всё, в середине алгоритма есть цикл в котором надо посчитать 1 000 000 дискриминантов.
Вполне реальная ситуация, из практики, только там была не задача посчитать дискриминант, но тоже достаточно простая с математической точки зрения. Но! чем больше раз можно сделать определенную операцию, тем эффективнее работал алгоритм, у которого было ограничение сверху по времени. Т.е. , грубо говоря, у нас есть минута, за нее мы должны найти наиболее оптимальный вариант, минута закончилась - какой из оцененых был наилушим на тот момент, тот и "выплевываем". Как в Брейн-Ринге (или Что-Где-Когда, если кто не застал Брейн-Ринг Козлова).
Сообщение от Pengvin:
Мое личное мнение: асм остался только там, где без него совсем нельзя. List comprehension в python экономит мне кучу времени и места на экране, и мне плевать влезает оно в кеш или нет. Больше в теме отписываться не буду, дабы спор по избитой теме не поддерживать. Извините, если что, за то что стал невольным инициатором ее. Всем удачи!
Инициатором темы Вы не были, можете не переживать, я давно хотел организовать отдельную флеймильню по этому поводу.
[Ответ]
silly 22:20 01.02.2012
Сообщение от Spectator:
А так вполне можно влезть с дизассемблером / отладчиком в любой exe, найти там нужную функцию, немного модифицировать PE секцию и пожалуйста - используй любую функцию, существующую в программе.
Подобная техника используется в Multi Theft Auto и нескольких похожих проектах, но там решается больно уж специфическая задача. Я больше заинтересован в том, чтобы послушать реальные примеры использования от Dart_Sergius, даже если это мелкие поделки (и любые другие примеры тоже).
[Ответ]
Spectator 22:33 01.02.2012
Сообщение от silly:
Подобная техника используется в Multi Theft Auto и нескольких похожих проектах, но там решается больно уж специфическая задача. Я больше заинтересован в том, чтобы послушать реальные примеры использования от Dart_Sergius, даже если это мелкие задачи (и любые другие примеры тоже).
Да я могу за него с 99% вероятностью ответить. Смотри - есть у тебя Lingvo, в Lingvo есть функция, которая ДОПУСТИМ, переводит слово с английского на русский.
Пример чисто гипотетический, поскольку на практике когда я вопрос изучал, есть Open Source продукты со словариками получше Lingvo. Хотя-хотя, есть и в лингво вкусные вещи, приходилось мне с этим возиться.
Так вот - вместо того чтобы изобретать велосипед, ты ставишь Lingvo, находишь нужную тебе функцию и вуаля - безо всяких открытых API используешь функционал Lingvo для решения собственных задач.
Имея набитую руку и опыт работы с определенными программами, всё это решается за считанные часы. Сравнительно с тем чтобы самому с нуля всё писать, за годик - другой, согласись, разница есть.
Понятно что ситуация скорее гипотетическая, чем реальная и ежедневно возникающая. Но, тем не менее, я, например, таким макаром изучал защиту чужих shareware програм, чтобы на основе полученной информации защитить свои.
[Ответ]
Hopkroft 22:56 01.02.2012
Сообщение от Spectator:
Так вот - вместо того чтобы изобретать велосипед, ты ставишь Lingvo, находишь нужную тебе функцию и вуаля - безо всяких открытых API используешь функционал Lingvo для решения собственных задач.
Имея набитую руку и опыт работы с определенными программами, всё это решается за считанные часы. Сравнительно с тем чтобы самому с нуля всё писать, за годик - другой, согласись, разница есть.
Пропагандируешь Хаки? Не самая лучшая идея в программировании Открытые API на то и открытые потому-что позволяют, программисту контролировать ресурсы и не выкидывают необъяснимые фрюли в самые неожиданные моменты.
Тогда уж лучше OpenSource продукты изучить, пользы больше будет.
[Ответ]
Spectator 23:09 01.02.2012
Сообщение от Hopkroft:
Пропагандируешь Хаки? Не самая лучшая идея в программировании Открытые API на то и открытые потому-что позволяют, программисту контролировать ресурсы и не выкидывают необъяснимые фрюли в самые неожиданные моменты.
Тогда уж лучше OpenSource продукты изучить, пользы больше будет.
Не пропагандирую, просто пример. Один из.
Остальные я уже писал, наше всё Билли M$ Гейтс очень любит плодить недокументированные функции, которые позволяют разрабам из самой M$ создавать более высокопроизводительные продукты из-за доступа к этим функциям. Инфа 100%. Проверена и мною лично + если порыться в сети по этому вопросу, можно ОЧЕНЬ много интересного найти и забавного.
Мнение о том что эти функции использовать не стоит - безусловно, правильно, со своей стороны, только НЕ из-за того что "выкидывает фрюли". Просто дядя Билли не гарантирует что функции, не включенные в официальный API, будут поддерживать в следующих версиях ОС.
По факту, программа написанная под XP с большой вероятностью и так не будет работать под последующими версиям ОС. Так что на это можно смело плевать.
[Ответ]
Hopkroft 00:12 02.02.2012
Сообщение от Spectator:
Билли M$ Гейтс очень любит плодить недокументированные функции, которые позволяют разрабам из самой M$ создавать более высокопроизводительные продукты из-за доступа к этим функциям. Инфа 100%.
Да знаю об этом. Но просто представь, заказчик решит поставить твою программу на свой ноутбук с новой Виндоуз. В которой вместо используемой функции будет заглушка. Ну и последствия соответствующие. как-то всё желание отпадает.
Вспомни, про undefined behavior в C. Я думаю, сейчас какой-то случай из практики всплыл в памяти, и думаю не особо приятный
В случае с С, есть вероятность докопаться до истины через Стандарт или форумы. А вот с библиотекой думаю будет не так всё просто.
[Ответ]
Spectator 00:30 02.02.2012
Сообщение от Hopkroft:
Да знаю об этом. Но просто представь, заказчик решит поставить твою программу на свой ноутбук с новой Виндоуз. В которой вместо используемой функции будет заглушка.
Заглушка - это вызов НОВОЙ функции с дополнительными параметрами.))
WinExec - это заглушка для CreateProcess, к примеру. Документированная и открытая.
Сообщение от Hopkroft:
Ну и последствия соответствующие. как-то всё желание отпадает.
Вспомни, про undefined behavior в C. Я думаю, сейчас какой-то случай из практики всплыл в памяти, и думаю не особо приятный
В случае с С, есть вероятность докопаться до истины через Стандарт или форумы. А вот с библиотекой думаю будет не так всё просто.
Не совсем понимаю, о чем ты. Конкретизируй. Понятие undefined behavior относится скорее к API функциям, чем к внутренним функциям/операторам языка, C/C++ или каких-либо других.
[Ответ]
X0R 01:11 02.02.2012
Сообщение от Spectator:
По факту, программа написанная под XP с большой вероятностью и так не будет работать под последующими версиям ОС. Так что на это можно смело плевать.
есть мнение, что эта программа написана криворукими программистами...
[Ответ]
Hopkroft 07:54 02.02.2012
Сообщение от Spectator:
Заглушка - это вызов НОВОЙ функции с дополнительными параметрами.))
WinExec - это заглушка для CreateProcess, к примеру. Документированная и открытая.
И введённая для совместимости с Win16. Хотя судя по ответам в форумах довольно много примеров которые используют именно WinExec вместо CreateProcess.
Да здравствует, Copy/Past
Сообщение от Spectator:
Не совсем понимаю, о чем ты. Конкретизируй. Понятие undefined behavior относится скорее к API функциям, чем к внутренним функциям/операторам языка, C/C++ или каких-либо других.
Имелось ввиду использование недокументированных функций. Вот представь, что для повышения быстродействия, в один прекрасный момент, функция назначает высокий приоритет процессу, и начинает в быстром темпе забирать всю используемую память.
Про undefined behavior, может не совсем конкретный пример. Просто я хотел показать что под разной архитектурой недокументированная функция может вести себя по разному.
Хотя также встречал много мануалов от программистов как можно использовать Хаки. Причём достаточно успешно.
[Ответ]
Spectator 08:32 02.02.2012
Сообщение от X0R:
есть мнение, что эта программа написана криворукими программистами...
Ты про Windows? Согласен)))
Задумайся - зачем в Windows XP есть галочка в ярлыке "Запускать в режиме совместимости с Windows 95"? [Ответ]
Spectator 08:38 02.02.2012
Сообщение от Hopkroft:
И введённая для совместимости с Win16. Хотя судя по ответам в форумах довольно много примеров которые используют именно WinExec вместо CreateProcess.
Да здравствует, Copy/Past
Это называется - обратная совместимость.
Сообщение от Hopkroft:
Имелось ввиду использование недокументированных функций. Вот представь, что для повышения быстродействия, в один прекрасный момент, функция назначает высокий приоритет процессу, и начинает в быстром темпе забирать всю используемую память.
Функции, которые это делают, прекрасно документированы. Правда, не совсем понял как связан приоритет и потребление памяти))))
Сообщение от Hopkroft:
Про undefined behavior, может не совсем конкретный пример. Просто я хотел показать что под разной архитектурой недокументированная функция может вести себя по разному.
Хотя также встречал много мануалов от программистов как можно использовать Хаки. Причём достаточно успешно.
Может, но скорее всего не будет. Причем, это касается и документированных функций, особенно если их использовали с не совсем корректными параметрами.
[Ответ]
aerin 09:19 02.02.2012
Spectator, можно пример недокументированной функции, которая позволила вам создать "более высокопроизводительные продукты"? Сдается мне, что вы путаете недокументированный и Native API.
[Ответ]
X0R 10:45 02.02.2012
Сообщение от Spectator:
Ты про Windows? Согласен)))
это еще большой вопрос что кривее)))
Сообщение от Spectator:
Задумайся - зачем в Windows XP есть галочка в ярлыке "Запускать в режиме совместимости с Windows 95"?
много ли ты программ знаешь которым она помогла? И если разбирать до конца, то следовали ли разработчики программ рекомендациям MS?
Сообщение от aerin: Spectator, можно пример недокументированной функции, которая позволила вам создать "более высокопроизводительные продукты"? Сдается мне, что вы путаете недокументированный и Native API.
К сожалению, на 100% - нет, исходники были утеряны, всвязи с гибелью винта. С тех пор бэкаплюсь на почту, а не на тот же винт, но исходники этим не вернуть. Так что только по памяти, отчетливо помню что использовал NtGetTickCount при анимации, и вызывалась эта функция ОЧЕНЬ часто.
Можешь попробовать найти ее описание в MSDN))))
Сообщение от X0R:
много ли ты программ знаешь которым она помогла? И если разбирать до конца, то следовали ли разработчики программ рекомендациям MS?
СЕЙЧАС таких программ уже не найти, факт, Windows XP сколько годиков? Больше 10. Всё что нужно уже переписали, всё что не нужно - уже не нужно никому. А на заре появления хрюши только этим и спасался.
Сообщение от Spectator:
К сожалению, на 100% - нет, исходники были утеряны, всвязи с гибелью винта. С тех пор бэкаплюсь на почту, а не на тот же винт, но исходники этим не вернуть. Так что только по памяти, отчетливо помню что использовал NtGetTickCount при анимации, и вызывалась эта функция ОЧЕНЬ часто.
Можешь попробовать найти ее описание в MSDN))))
Называя вещи своими именами, крайне глупый выбор для программы пользовательского режима, она не дает выигрыша в разрешении по сравнению с GetTickCount(), не говоря уж о QueryPerformanceCounter(). И если уж юзать низкоуровневые инструменты, то тогда уж логичнее было остановиться на KeQueryTickCount(), выдающей на выходе LARGE_INTEGER и прекрасно описанной в wdk.
Сообщение от :
Можешь попробовать найти ее описание в MSDN))))
Гы. Посмотрел. Оказывается именно из-за конвертации 64 бит, возвращаемых KeTickCount(), в 32 бита, возвращаемых NtGetTickCount(), винда может рухнуть после года аптайма Пруф[Ответ]
Spectator 14:54 02.02.2012
Сообщение от aerin:
Называя вещи своими именами, крайне глупый выбор для программы пользовательского режима, она не дает выигрыша в разрешении по сравнению с GetTickCount(), не говоря уж о QueryPerformanceCounter(). И если уж юзать низкоуровневые инструменты, то тогда уж логичнее было остановиться на KeQueryTickCount(), выдающей на выходе LARGE_INTEGER и прекрасно описанной в wdk.
Окситись, это та же самая функция что и GetTickCount, вернее - GetTickCount вызывает NtGetTickCount. Точность мне была достаточна 1/25 секунды))) Про QueryPerformanceCounter() я прекрасно знаю)
Смысл вызова NtGetTickCount в том чтобы миновать вызов GetTickCount.
Сообщение от aerin:
Гы. Посмотрел. Оказывается именно из-за конвертации 64 бит, возвращаемых KeTickCount(), в 32 бита, возвращаемых NtGetTickCount(), винда может рухнуть после года аптайма Пруф
Это уже проблемы винды) Программа была рассчитана на пользовательские компьютеры, это раз, если уж говорить о годе аптайма - я никогда не видел чтобы какой-либо реально выполняющий какие-то задачи сервер работал дольше недели)
[Ответ]
aerin 14:59 02.02.2012
Сообщение от Spectator:
Окситись, это та же самая функция что и GetTickCount, вернее - GetTickCount вызывает NtGetTickCount. Точность мне была достаточна 1/25 секунды))) Про QueryPerformanceCounter() я прекрасно знаю)
Тогда тем более не понятен выбор NtGetTickCount().
Сообщение от :
Это уже проблемы винды) Программа была рассчитана на пользовательские компьютеры, это раз, ...
Вот и не ясно, почему было не использовать нормальные пользовательские функции.
Сообщение от :
...если уж говорить о годе аптайма - я никогда не видел чтобы какой-либо реально выполняющий какие-то задачи сервер работал дольше недели)
Если ты не видел, еще не значит, что их нет.
[Ответ]
aerin 15:08 02.02.2012
Пока отвечал, ты исходное сообщение подправил.
Сообщение от :
Смысл вызова NtGetTickCount в том чтобы миновать вызов GetTickCount.
Смысл от меня, если честно, ускользает. Что не так с GetTickCount() и почему в таком случае нельзя юзать QueryPerformanceCounter() или на худой конец, функцию из библиотеки winmm?
[Ответ]
Spectator 15:14 02.02.2012
Сообщение от aerin:
Пока отвечал, ты исходное сообщение подправил.
Смысл от меня, если честно, ускользает. Что не так с GetTickCount() и почему в таком случае нельзя юзать QueryPerformanceCounter() или на худой конец, функцию из библиотеки winmm?
Ничего я не правил.
На вызов функции УХОДИТ ВРЕМЯ. ЗАЧЕМ вызывать GetTickCount, которая вызовет NtGetTickCount, если можно вызвать СРАЗУ NtGetTickCount???
[Ответ]
aerin 16:23 02.02.2012
Spectator, экономия на спичках: таймер высокого разрешения не используем, зато нас очень сильно беспокоит время выполнения функции, призванной по определению давать тики в режиме плюс-минус лапоть. Для кого в MSDN написано:
Сообщение от :
...
If you need a higher resolution timer, use a multimedia timer or a high-resolution timer.
...
Сообщение от aerin: Spectator, экономия на спичках: таймер высокого разрешения не используем, зато нас очень сильно беспокоит время выполнения функции, призванной по определению давать тики в режиме плюс-минус лапоть. Для кого в MSDN написано:?
Повторяю в третий раз: Точность мне была достаточна 1/25 секунды
И - я знаю ВСЕ возможные и невозможные средства замера времени, ожидания с определенным промежутком и т.д. Тебе найти статью, в которой описано ДЕСЯТЬ разных способов замера времени, включая с точностью до тактов процессора?
[Ответ]
aerin 18:05 02.02.2012
Spectator, да хоть в десятый, замерять интервалы времени в пользовательском приложении через NtGetTickCount(), это есть пресловутое "удаление гланд через жопу автогеном".
[Ответ]
Spectator 18:10 02.02.2012
Сообщение от aerin: Spectator, да хоть в десятый, замерять интервалы времени в пользовательском приложении через NtGetTickCount(), это есть пресловутое "удаление гланд через жопу автогеном".
Она для того и предназначена, вообще-то))) Нечто вроде секундомера, только с большей точностью. Через некоторое время перенесу нашу милую беседу в флудилку.
[Ответ]
Pengvin, не палите контору, у нас разговор только начался [Ответ]
Spectator 19:54 02.02.2012
Сообщение от Pengvin:
Ой простите не могу удержаться.
А почему тогда не
Повторюсь - я в вопросе разбирался досконально. Далее:
Внимание, вопрос - в чем выдает время rdtsc ?
Внимание, ответ: http://www.dtf.ru/articles/print.php?id=40520 TSC отсчитывает такты процессора с начала запуска ядра (reset). Тут нужно заметить, что некоторые процессоры могут снижать частоту для сокращения потребления энергии, поэтому в приложении необходимо пересчитывать скорость TSC каждую секунду, синхронизируясь с часами.
Для того чтобы семплировать выполнение потоков на многоядерных системах, необходимо перехватывать прерывание на каждом процессоре по отдельности, иначе увидим только потоки, выполняющиеся на первом ядре.
Нужно иметь в виду, что значение TSC на разных ядрах может не совпадать. Это, кстати, приводит к проблемам в старых играх, которые используют RDTSC в качестве таймера. При мигрировании потока с ядра на ядро, игра может получать отрицательные дельты времени. Чтобы избежать этой проблемы, в новых процессорах Intel и Athlon X2 TSC считает постоянно, даже когда ядро остановлено.
Не очень тривиальная задача, не правда ли? Из всех перепробованных мною методов (включая приведенные Performance Counters и ряда других) наиболее оптимальным, как это ни странно, оказался банальный GetTickCount.
А на основе rdtsc я соорудил набор макросов, из которых сделал довольно любопытный механизм распределения затрат времени на различные участки кода, который считал их в попугаях, но, зато можно было увидеть насколько увенчалась успехом твоя оптимизация на данном конкретном компьютере.
Сообщение от Spectator:
Повторюсь - я в вопросе разбирался досконально.
Предполагается, что в этом месте нужно упасть на колени перед великим гуру?
Вставив кусок статьи
Сообщение от :
...Нужно иметь в виду, что значение TSC на разных ядрах может не совпадать. Это, кстати, приводит к проблемам в старых играх, которые используют RDTSC в качестве таймера. При мигрировании потока с ядра на ядро, игра может получать отрицательные дельты времени. Чтобы избежать этой проблемы, в новых процессорах Intel и Athlon X2 TSC считает постоянно, даже когда ядро остановлено.
что же ты не стал цитировать следующий абзац:
Сообщение от :
Чтобы не заморачиваться с синхронизацией TSC, я решил пожертвовать точностью и на втором ядре использовать отсчеты первого ядра:
?
Сообщение от Spectator:
Не очень тривиальная задача, не правда ли? Из всех перепробованных мною методов (включая приведенные Performance Counters и ряда других) наиболее оптимальным, как это ни странно, оказался банальный GetTickCount.
Это все вода. "В вопросе я разобрался досконально/из всех перепробованных мной/..." - ни разу не аргументы.
Сообщение от Spectator:
А на основе rdtsc я соорудил набор макросов, из которых сделал довольно любопытный механизм распределения затрат времени на различные участки кода, который считал их в попугаях, но, зато можно было увидеть насколько увенчалась успехом твоя оптимизация на данном конкретном компьютере.
Клево, а про профайлеры мьсе не слышал?
Сообщение от Spectator:
Для каждой задачи есть свои инструменты.
С этим соглашусь, но добавлю, что изобретать велосипеды нужно только в крайних случаях.
[Ответ]