Большой Воронежский Форум

Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел.
Вернуться   Большой Воронежский Форум » Компьютеры и все, что с ними связано » » Программирование
Философия, технологии, алгоритмы!

Ответ
 
Опции темы
Старый 01.02.2012, 19:02   #31   
IGBT
 
Аватар для Pengvin
 
Сообщений: 535
Регистрация: 09.10.2005

Pengvin вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
шифрация/дешифрация, аудио-видео кодеки, игры
это и есть тяжелая математика. дискриминант тыщу раз в секунду можно и так посчитать...
Цитата:
Сообщение от pwei Посмотреть сообщение
Насколько рационально сегодня знать asm?
Открываем hh.ru и смотрим статистику востребованности.
Что удивительно есть вакансии http://hh.ru/applicant/searchvacancy...riod=30&page=0
Правда есть ряд "Но":
1) много вакансий для ебмеддеров, а у них зп низкие. На большие деньги надо иметь вагон опыта работы и кучу знаний по смежным областям, асм тут как-то сбоку припеку
2) вакансии во всякие НПО "Вектор". Много legacy кода безумного и прочие радости гос контор
3) вариант - тот кто составлял вакансию в теме не разбирается, написал до кучи много страшных слов

PS:
Мое личное мнение: асм остался только там, где без него совсем нельзя. List comprehension в python экономит мне кучу времени и места на экране, и мне плевать влезает оно в кеш или нет. Больше в теме отписываться не буду, дабы спор по избитой теме не поддерживать. Извините, если что, за то что стал невольным инициатором ее. Всем удачи!

Последний раз редактировалось Pengvin; 01.02.2012 в 19:33.
  Ответить с цитированием
Старый 01.02.2012, 22:02   #32   
Форумец
 
Аватар для Spectator
 
Сообщений: 40,095
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от silly Посмотреть сообщение
Э… Как вот здесь http://sandsprite.com/CodeStuff/Usin..._as_a_dll.html? (Моя так не умеет, однако.) Нет, правда, где это на практике можно использовать?
Что то не пропустил это сообщение изначально, случайно только что заметил.
Для LoadLibrary что dll что exe - суть одно. Это файлы одного формата, разница только в том что в dll обычно нет "точки входа". Ну и не документируются обычно exe, в отличае от стандартных системных DLL.
А так вполне можно влезть с дизассемблером / отладчиком в любой exe, найти там нужную функцию, немного модифицировать PE секцию и пожалуйста - используй любую функцию, существующую в программе.
В общем и целом - вполне себе преимущество человека, знающего ассемблер.
Вполне можно представить себе ситуации, когда это будет полезно (правда, не совсем законно ).
  Ответить с цитированием
Старый 01.02.2012, 22:18   #33   
Форумец
 
Аватар для Spectator
 
Сообщений: 40,095
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от Pengvin Посмотреть сообщение
это и есть тяжелая математика. дискриминант тыщу раз в секунду можно и так посчитать...
А если надо не "тыщу"? А миллион? Вот надо и всё, в середине алгоритма есть цикл в котором надо посчитать 1 000 000 дискриминантов.
Вполне реальная ситуация, из практики, только там была не задача посчитать дискриминант, но тоже достаточно простая с математической точки зрения. Но! чем больше раз можно сделать определенную операцию, тем эффективнее работал алгоритм, у которого было ограничение сверху по времени. Т.е. , грубо говоря, у нас есть минута, за нее мы должны найти наиболее оптимальный вариант, минута закончилась - какой из оцененых был наилушим на тот момент, тот и "выплевываем". Как в Брейн-Ринге (или Что-Где-Когда, если кто не застал Брейн-Ринг Козлова).

Цитата:
Сообщение от Pengvin Посмотреть сообщение
Мое личное мнение: асм остался только там, где без него совсем нельзя. List comprehension в python экономит мне кучу времени и места на экране, и мне плевать влезает оно в кеш или нет. Больше в теме отписываться не буду, дабы спор по избитой теме не поддерживать. Извините, если что, за то что стал невольным инициатором ее. Всем удачи!
Инициатором темы Вы не были, можете не переживать, я давно хотел организовать отдельную флеймильню по этому поводу.
  Ответить с цитированием
Старый 01.02.2012, 22:20   #34   
highly mean
 
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35

silly вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
А так вполне можно влезть с дизассемблером / отладчиком в любой exe, найти там нужную функцию, немного модифицировать PE секцию и пожалуйста - используй любую функцию, существующую в программе.

Подобная техника используется в Multi Theft Auto и нескольких похожих проектах, но там решается больно уж специфическая задача. Я больше заинтересован в том, чтобы послушать реальные примеры использования от Dart_Sergius, даже если это мелкие поделки (и любые другие примеры тоже).
  Ответить с цитированием
Старый 01.02.2012, 22:33   #35   
Форумец
 
Аватар для Spectator
 
Сообщений: 40,095
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от silly Посмотреть сообщение
Подобная техника используется в Multi Theft Auto и нескольких похожих проектах, но там решается больно уж специфическая задача. Я больше заинтересован в том, чтобы послушать реальные примеры использования от Dart_Sergius, даже если это мелкие задачи (и любые другие примеры тоже).
Да я могу за него с 99% вероятностью ответить. Смотри - есть у тебя Lingvo, в Lingvo есть функция, которая ДОПУСТИМ, переводит слово с английского на русский.
Пример чисто гипотетический, поскольку на практике когда я вопрос изучал, есть Open Source продукты со словариками получше Lingvo. Хотя-хотя, есть и в лингво вкусные вещи, приходилось мне с этим возиться.
Так вот - вместо того чтобы изобретать велосипед, ты ставишь Lingvo, находишь нужную тебе функцию и вуаля - безо всяких открытых API используешь функционал Lingvo для решения собственных задач.
Имея набитую руку и опыт работы с определенными программами, всё это решается за считанные часы. Сравнительно с тем чтобы самому с нуля всё писать, за годик - другой, согласись, разница есть.

Понятно что ситуация скорее гипотетическая, чем реальная и ежедневно возникающая. Но, тем не менее, я, например, таким макаром изучал защиту чужих shareware програм, чтобы на основе полученной информации защитить свои.
  Ответить с цитированием
Старый 01.02.2012, 22:56   #36   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
Так вот - вместо того чтобы изобретать велосипед, ты ставишь Lingvo, находишь нужную тебе функцию и вуаля - безо всяких открытых API используешь функционал Lingvo для решения собственных задач.
Имея набитую руку и опыт работы с определенными программами, всё это решается за считанные часы. Сравнительно с тем чтобы самому с нуля всё писать, за годик - другой, согласись, разница есть.
Пропагандируешь Хаки? Не самая лучшая идея в программировании Открытые API на то и открытые потому-что позволяют, программисту контролировать ресурсы и не выкидывают необъяснимые фрюли в самые неожиданные моменты.
Тогда уж лучше OpenSource продукты изучить, пользы больше будет.
  Ответить с цитированием
Старый 01.02.2012, 23:09   #37   
Форумец
 
Аватар для Spectator
 
Сообщений: 40,095
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Пропагандируешь Хаки? Не самая лучшая идея в программировании Открытые API на то и открытые потому-что позволяют, программисту контролировать ресурсы и не выкидывают необъяснимые фрюли в самые неожиданные моменты.
Тогда уж лучше OpenSource продукты изучить, пользы больше будет.
Не пропагандирую, просто пример. Один из.
Остальные я уже писал, наше всё Билли M$ Гейтс очень любит плодить недокументированные функции, которые позволяют разрабам из самой M$ создавать более высокопроизводительные продукты из-за доступа к этим функциям. Инфа 100%. Проверена и мною лично + если порыться в сети по этому вопросу, можно ОЧЕНЬ много интересного найти и забавного.
Мнение о том что эти функции использовать не стоит - безусловно, правильно, со своей стороны, только НЕ из-за того что "выкидывает фрюли". Просто дядя Билли не гарантирует что функции, не включенные в официальный API, будут поддерживать в следующих версиях ОС.
По факту, программа написанная под XP с большой вероятностью и так не будет работать под последующими версиям ОС. Так что на это можно смело плевать.
  Ответить с цитированием
Старый 02.02.2012, 00:12   #38   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
Билли M$ Гейтс очень любит плодить недокументированные функции, которые позволяют разрабам из самой M$ создавать более высокопроизводительные продукты из-за доступа к этим функциям. Инфа 100%.
Да знаю об этом. Но просто представь, заказчик решит поставить твою программу на свой ноутбук с новой Виндоуз. В которой вместо используемой функции будет заглушка. Ну и последствия соответствующие. как-то всё желание отпадает.
Вспомни, про undefined behavior в C. Я думаю, сейчас какой-то случай из практики всплыл в памяти, и думаю не особо приятный
В случае с С, есть вероятность докопаться до истины через Стандарт или форумы. А вот с библиотекой думаю будет не так всё просто.
  Ответить с цитированием
Старый 02.02.2012, 00:30   #39   
Форумец
 
Аватар для Spectator
 
Сообщений: 40,095
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Да знаю об этом. Но просто представь, заказчик решит поставить твою программу на свой ноутбук с новой Виндоуз. В которой вместо используемой функции будет заглушка.
Заглушка - это вызов НОВОЙ функции с дополнительными параметрами.))
WinExec - это заглушка для CreateProcess, к примеру. Документированная и открытая.

Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Ну и последствия соответствующие. как-то всё желание отпадает.
Вспомни, про undefined behavior в C. Я думаю, сейчас какой-то случай из практики всплыл в памяти, и думаю не особо приятный
В случае с С, есть вероятность докопаться до истины через Стандарт или форумы. А вот с библиотекой думаю будет не так всё просто.
Не совсем понимаю, о чем ты. Конкретизируй. Понятие undefined behavior относится скорее к API функциям, чем к внутренним функциям/операторам языка, C/C++ или каких-либо других.
  Ответить с цитированием
Старый 02.02.2012, 01:11   #40   
старый хрыч
 
Аватар для X0R
 
Сообщений: 6,705
Регистрация: 17.12.2006
Возраст: 37

X0R вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
По факту, программа написанная под XP с большой вероятностью и так не будет работать под последующими версиям ОС. Так что на это можно смело плевать.
есть мнение, что эта программа написана криворукими программистами...
  Ответить с цитированием
Старый 02.02.2012, 07:54   #41   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
Заглушка - это вызов НОВОЙ функции с дополнительными параметрами.))
WinExec - это заглушка для CreateProcess, к примеру. Документированная и открытая.
И введённая для совместимости с Win16. Хотя судя по ответам в форумах довольно много примеров которые используют именно WinExec вместо CreateProcess.
Да здравствует, Copy/Past


Цитата:
Сообщение от Spectator Посмотреть сообщение
Не совсем понимаю, о чем ты. Конкретизируй. Понятие undefined behavior относится скорее к API функциям, чем к внутренним функциям/операторам языка, C/C++ или каких-либо других.
Имелось ввиду использование недокументированных функций. Вот представь, что для повышения быстродействия, в один прекрасный момент, функция назначает высокий приоритет процессу, и начинает в быстром темпе забирать всю используемую память.
Про undefined behavior, может не совсем конкретный пример. Просто я хотел показать что под разной архитектурой недокументированная функция может вести себя по разному.
Хотя также встречал много мануалов от программистов как можно использовать Хаки. Причём достаточно успешно.
  Ответить с цитированием
Старый 02.02.2012, 08:32   #42   
Форумец
 
Аватар для Spectator
 
Сообщений: 40,095
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от X0R Посмотреть сообщение
есть мнение, что эта программа написана криворукими программистами...
Ты про Windows? Согласен)))
Задумайся - зачем в Windows XP есть галочка в ярлыке "Запускать в режиме совместимости с Windows 95"?
  Ответить с цитированием
Старый 02.02.2012, 08:38   #43   
Форумец
 
Аватар для Spectator
 
Сообщений: 40,095
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
И введённая для совместимости с Win16. Хотя судя по ответам в форумах довольно много примеров которые используют именно WinExec вместо CreateProcess.
Да здравствует, Copy/Past
Это называется - обратная совместимость.

Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Имелось ввиду использование недокументированных функций. Вот представь, что для повышения быстродействия, в один прекрасный момент, функция назначает высокий приоритет процессу, и начинает в быстром темпе забирать всю используемую память.
Функции, которые это делают, прекрасно документированы. Правда, не совсем понял как связан приоритет и потребление памяти))))

Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Про undefined behavior, может не совсем конкретный пример. Просто я хотел показать что под разной архитектурой недокументированная функция может вести себя по разному.
Хотя также встречал много мануалов от программистов как можно использовать Хаки. Причём достаточно успешно.
Может, но скорее всего не будет. Причем, это касается и документированных функций, особенно если их использовали с не совсем корректными параметрами.
  Ответить с цитированием
Старый 02.02.2012, 09:19   #44   
бибизьян
 
Аватар для aerin
 
Сообщений: 3,031
Регистрация: 17.02.2004

aerin вне форума Не в сети
Spectator, можно пример недокументированной функции, которая позволила вам создать "более высокопроизводительные продукты"? Сдается мне, что вы путаете недокументированный и Native API.
  Ответить с цитированием
Старый 02.02.2012, 10:45   #45   
старый хрыч
 
Аватар для X0R
 
Сообщений: 6,705
Регистрация: 17.12.2006
Возраст: 37

X0R вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
Ты про Windows? Согласен)))
это еще большой вопрос что кривее)))

Цитата:
Сообщение от Spectator Посмотреть сообщение
Задумайся - зачем в Windows XP есть галочка в ярлыке "Запускать в режиме совместимости с Windows 95"?
много ли ты программ знаешь которым она помогла? И если разбирать до конца, то следовали ли разработчики программ рекомендациям MS?


Spectator, зацени http://www.x-drivers.ru/blog/vasya/93.html
Кармак передает тебе привет))))
  Ответить с цитированием
Старый 02.02.2012, 12:14   #46   
Форумец
 
Аватар для Spectator
 
Сообщений: 40,095
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от aerin Посмотреть сообщение
Spectator, можно пример недокументированной функции, которая позволила вам создать "более высокопроизводительные продукты"? Сдается мне, что вы путаете недокументированный и Native API.
К сожалению, на 100% - нет, исходники были утеряны, всвязи с гибелью винта. С тех пор бэкаплюсь на почту, а не на тот же винт, но исходники этим не вернуть. Так что только по памяти, отчетливо помню что использовал NtGetTickCount при анимации, и вызывалась эта функция ОЧЕНЬ часто.
Можешь попробовать найти ее описание в MSDN))))

Цитата:
Сообщение от X0R Посмотреть сообщение
много ли ты программ знаешь которым она помогла? И если разбирать до конца, то следовали ли разработчики программ рекомендациям MS?
СЕЙЧАС таких программ уже не найти, факт, Windows XP сколько годиков? Больше 10. Всё что нужно уже переписали, всё что не нужно - уже не нужно никому. А на заре появления хрюши только этим и спасался.

Цитата:
Сообщение от X0R Посмотреть сообщение
Spectator, зацени http://www.x-drivers.ru/blog/vasya/93.html
Кармак передает тебе привет))))
)))
  Ответить с цитированием
Старый 02.02.2012, 14:13   #47   
бибизьян
 
Аватар для aerin
 
Сообщений: 3,031
Регистрация: 17.02.2004

aerin вне форума Не в сети
Цитата:
Сообщение от Spectator
К сожалению, на 100% - нет, исходники были утеряны, всвязи с гибелью винта. С тех пор бэкаплюсь на почту, а не на тот же винт, но исходники этим не вернуть. Так что только по памяти, отчетливо помню что использовал NtGetTickCount при анимации, и вызывалась эта функция ОЧЕНЬ часто.
Можешь попробовать найти ее описание в MSDN))))
Называя вещи своими именами, крайне глупый выбор для программы пользовательского режима, она не дает выигрыша в разрешении по сравнению с GetTickCount(), не говоря уж о QueryPerformanceCounter(). И если уж юзать низкоуровневые инструменты, то тогда уж логичнее было остановиться на KeQueryTickCount(), выдающей на выходе LARGE_INTEGER и прекрасно описанной в wdk.

Цитата:
Можешь попробовать найти ее описание в MSDN))))
Гы. Посмотрел. Оказывается именно из-за конвертации 64 бит, возвращаемых KeTickCount(), в 32 бита, возвращаемых NtGetTickCount(), винда может рухнуть после года аптайма
Пруф
  Ответить с цитированием
Старый 02.02.2012, 14:54   #48   
Форумец
 
Аватар для Spectator
 
Сообщений: 40,095
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от aerin Посмотреть сообщение
Называя вещи своими именами, крайне глупый выбор для программы пользовательского режима, она не дает выигрыша в разрешении по сравнению с GetTickCount(), не говоря уж о QueryPerformanceCounter(). И если уж юзать низкоуровневые инструменты, то тогда уж логичнее было остановиться на KeQueryTickCount(), выдающей на выходе LARGE_INTEGER и прекрасно описанной в wdk.
Окситись, это та же самая функция что и GetTickCount, вернее - GetTickCount вызывает NtGetTickCount. Точность мне была достаточна 1/25 секунды))) Про QueryPerformanceCounter() я прекрасно знаю)
Смысл вызова NtGetTickCount в том чтобы миновать вызов GetTickCount.

Цитата:
Сообщение от aerin Посмотреть сообщение
Гы. Посмотрел. Оказывается именно из-за конвертации 64 бит, возвращаемых KeTickCount(), в 32 бита, возвращаемых NtGetTickCount(), винда может рухнуть после года аптайма
Пруф
Это уже проблемы винды) Программа была рассчитана на пользовательские компьютеры, это раз, если уж говорить о годе аптайма - я никогда не видел чтобы какой-либо реально выполняющий какие-то задачи сервер работал дольше недели)
  Ответить с цитированием
Старый 02.02.2012, 14:59   #49   
бибизьян
 
Аватар для aerin
 
Сообщений: 3,031
Регистрация: 17.02.2004

aerin вне форума Не в сети
Цитата:
Сообщение от Spectator
Окситись, это та же самая функция что и GetTickCount, вернее - GetTickCount вызывает NtGetTickCount. Точность мне была достаточна 1/25 секунды))) Про QueryPerformanceCounter() я прекрасно знаю)
Тогда тем более не понятен выбор NtGetTickCount().
Цитата:
Это уже проблемы винды) Программа была рассчитана на пользовательские компьютеры, это раз, ...
Вот и не ясно, почему было не использовать нормальные пользовательские функции.
Цитата:
...если уж говорить о годе аптайма - я никогда не видел чтобы какой-либо реально выполняющий какие-то задачи сервер работал дольше недели)
Если ты не видел, еще не значит, что их нет.
  Ответить с цитированием
Старый 02.02.2012, 15:08   #50   
бибизьян
 
Аватар для aerin
 
Сообщений: 3,031
Регистрация: 17.02.2004

aerin вне форума Не в сети
Пока отвечал, ты исходное сообщение подправил.
Цитата:
Смысл вызова NtGetTickCount в том чтобы миновать вызов GetTickCount.
Смысл от меня, если честно, ускользает. Что не так с GetTickCount() и почему в таком случае нельзя юзать QueryPerformanceCounter() или на худой конец, функцию из библиотеки winmm?
  Ответить с цитированием
Старый 02.02.2012, 15:14   #51   
Форумец
 
Аватар для Spectator
 
Сообщений: 40,095
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от aerin Посмотреть сообщение
Пока отвечал, ты исходное сообщение подправил.

Смысл от меня, если честно, ускользает. Что не так с GetTickCount() и почему в таком случае нельзя юзать QueryPerformanceCounter() или на худой конец, функцию из библиотеки winmm?
Ничего я не правил.

На вызов функции УХОДИТ ВРЕМЯ. ЗАЧЕМ вызывать GetTickCount, которая вызовет NtGetTickCount, если можно вызвать СРАЗУ NtGetTickCount???
  Ответить с цитированием
Старый 02.02.2012, 16:23   #52   
бибизьян
 
Аватар для aerin
 
Сообщений: 3,031
Регистрация: 17.02.2004

aerin вне форума Не в сети
Spectator, экономия на спичках: таймер высокого разрешения не используем, зато нас очень сильно беспокоит время выполнения функции, призванной по определению давать тики в режиме плюс-минус лапоть. Для кого в MSDN написано:
Цитата:
...
If you need a higher resolution timer, use a multimedia timer or a high-resolution timer.
...
?
  Ответить с цитированием
Старый 02.02.2012, 18:00   #53   
Форумец
 
Аватар для Spectator
 
Сообщений: 40,095
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от aerin Посмотреть сообщение
Spectator, экономия на спичках: таймер высокого разрешения не используем, зато нас очень сильно беспокоит время выполнения функции, призванной по определению давать тики в режиме плюс-минус лапоть. Для кого в MSDN написано:?
Повторяю в третий раз:
Точность мне была достаточна 1/25 секунды
И - я знаю ВСЕ возможные и невозможные средства замера времени, ожидания с определенным промежутком и т.д. Тебе найти статью, в которой описано ДЕСЯТЬ разных способов замера времени, включая с точностью до тактов процессора?
  Ответить с цитированием
Старый 02.02.2012, 18:05   #54   
бибизьян
 
Аватар для aerin
 
Сообщений: 3,031
Регистрация: 17.02.2004

aerin вне форума Не в сети
Spectator, да хоть в десятый, замерять интервалы времени в пользовательском приложении через NtGetTickCount(), это есть пресловутое "удаление гланд через жопу автогеном".
  Ответить с цитированием
Старый 02.02.2012, 18:10   #55   
Форумец
 
Аватар для Spectator
 
Сообщений: 40,095
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от aerin Посмотреть сообщение
Spectator, да хоть в десятый, замерять интервалы времени в пользовательском приложении через NtGetTickCount(), это есть пресловутое "удаление гланд через жопу автогеном".
Она для того и предназначена, вообще-то))) Нечто вроде секундомера, только с большей точностью. Через некоторое время перенесу нашу милую беседу в флудилку.
  Ответить с цитированием
Старый 02.02.2012, 18:13   #56   
бибизьян
 
Аватар для aerin
 
Сообщений: 3,031
Регистрация: 17.02.2004

aerin вне форума Не в сети
Удачи в измерениях!
  Ответить с цитированием
Старый 02.02.2012, 18:43   #57   
IGBT
 
Аватар для Pengvin
 
Сообщений: 535
Регистрация: 09.10.2005

Pengvin вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
Ничего я не правил.

На вызов функции УХОДИТ ВРЕМЯ. ЗАЧЕМ вызывать GetTickCount, которая вызовет NtGetTickCount, если можно вызвать СРАЗУ NtGetTickCount???
Ой простите не могу удержаться.
А почему тогда не
Цитата:
#pragma intrinsic(__rdtsc)
Провел синтетический тест:
Цитата:
Call time:
QueryPerformanceCounter: 0.011851 us
__rdtsc() : 0.002661 us
Prefomance boost: 0,00919 us
Зато в 4 (ЧЕТЫРЕ!!!) раза быстрей. Экономия .
Цитата:
Call time:
standart call: 0.006829 us
inline call: 0.005775 us
Prefomance boost: 0,001054 us
Нет экономии .
  Ответить с цитированием
Старый 02.02.2012, 18:58   #58   
бибизьян
 
Аватар для aerin
 
Сообщений: 3,031
Регистрация: 17.02.2004

aerin вне форума Не в сети
Pengvin, не палите контору, у нас разговор только начался
  Ответить с цитированием
Старый 02.02.2012, 19:54   #59   
Форумец
 
Аватар для Spectator
 
Сообщений: 40,095
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от Pengvin Посмотреть сообщение
Ой простите не могу удержаться.
А почему тогда не
Повторюсь - я в вопросе разбирался досконально. Далее:

Внимание, вопрос - в чем выдает время rdtsc ?
Внимание, ответ:
http://www.dtf.ru/articles/print.php?id=40520
TSC отсчитывает такты процессора с начала запуска ядра (reset). Тут нужно заметить, что некоторые процессоры могут снижать частоту для сокращения потребления энергии, поэтому в приложении необходимо пересчитывать скорость TSC каждую секунду, синхронизируясь с часами.

Для того чтобы семплировать выполнение потоков на многоядерных системах, необходимо перехватывать прерывание на каждом процессоре по отдельности, иначе увидим только потоки, выполняющиеся на первом ядре.

Нужно иметь в виду, что значение TSC на разных ядрах может не совпадать. Это, кстати, приводит к проблемам в старых играх, которые используют RDTSC в качестве таймера. При мигрировании потока с ядра на ядро, игра может получать отрицательные дельты времени. Чтобы избежать этой проблемы, в новых процессорах Intel и Athlon X2 TSC считает постоянно, даже когда ядро остановлено.


Не очень тривиальная задача, не правда ли? Из всех перепробованных мною методов (включая приведенные Performance Counters и ряда других) наиболее оптимальным, как это ни странно, оказался банальный GetTickCount.

А на основе rdtsc я соорудил набор макросов, из которых сделал довольно любопытный механизм распределения затрат времени на различные участки кода, который считал их в попугаях, но, зато можно было увидеть насколько увенчалась успехом твоя оптимизация на данном конкретном компьютере.

Для каждой задачи есть свои инструменты.
  Ответить с цитированием
Старый 02.02.2012, 20:15   #60   
бибизьян
 
Аватар для aerin
 
Сообщений: 3,031
Регистрация: 17.02.2004

aerin вне форума Не в сети
Цитата:
Сообщение от Spectator
Повторюсь - я в вопросе разбирался досконально.
Предполагается, что в этом месте нужно упасть на колени перед великим гуру?

Вставив кусок статьи
Цитата:
...Нужно иметь в виду, что значение TSC на разных ядрах может не совпадать. Это, кстати, приводит к проблемам в старых играх, которые используют RDTSC в качестве таймера. При мигрировании потока с ядра на ядро, игра может получать отрицательные дельты времени. Чтобы избежать этой проблемы, в новых процессорах Intel и Athlon X2 TSC считает постоянно, даже когда ядро остановлено.
что же ты не стал цитировать следующий абзац:
Цитата:
Чтобы не заморачиваться с синхронизацией TSC, я решил пожертвовать точностью и на втором ядре использовать отсчеты первого ядра:
?

Цитата:
Сообщение от Spectator
Не очень тривиальная задача, не правда ли? Из всех перепробованных мною методов (включая приведенные Performance Counters и ряда других) наиболее оптимальным, как это ни странно, оказался банальный GetTickCount.
Это все вода. "В вопросе я разобрался досконально/из всех перепробованных мной/..." - ни разу не аргументы.

Цитата:
Сообщение от Spectator
А на основе rdtsc я соорудил набор макросов, из которых сделал довольно любопытный механизм распределения затрат времени на различные участки кода, который считал их в попугаях, но, зато можно было увидеть насколько увенчалась успехом твоя оптимизация на данном конкретном компьютере.
Клево, а про профайлеры мьсе не слышал?

Цитата:
Сообщение от Spectator
Для каждой задачи есть свои инструменты.
С этим соглашусь, но добавлю, что изобретать велосипеды нужно только в крайних случаях.
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind