информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 700 с лишним git-серверов пострадало... 
 От повторного пришествия Шаи-Хулуда... 
 Крупный сбой Azure и других сервисов... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] вот алгоритм - проверь у себя плз 18.04.02 01:54  Число просмотров: 1003
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
> NtQueryInformationThread(...)
> kotoraya ispolzuetsia po polnoi programme vezde
я не спорю.что она работает,но тогда проясні мне почему она мне нулі сует,а???
> > маркетинг не позволяет вікладівать точную инфу.Но
> тогда
> > помогает айс =))
>
> ???
> blah-blah-blah
имелся в виду отладчик SoftIce =))
> > я вот попробую через такті проца сделать =))
>
> A kak ty uznaesh kakie "такті" otnosiatsi k tvoeii thread?
не знаю пока.сам спросил про енто
<programming>
[Win32] 2 all - trables with GetThreadTimes 16.04.02 23:03  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
мне нужно провести хронометраж исполнения алгоритма поиска.Для ентого до начала поиска візіваю :
...
GetThreadTimes(GetCurrentThread(),&ftPlug,&ftPlug,&ftKrnlS,&ftUsrS)
...
возвращает некоторіе значения:
ftKrnlS - время,затраченное потоком на віполнение кода ОС
ftUsrS - время,затрач.потоком на віполнение своего кода
Потом идет:
...
ptrMatchedElemPos = _find(dwResArraySize);
...//по ходу єто функция поиска ел-та.При //большом N(N-кол-во записей в файле)может //искать долго,так как делает не меньше чем N-1
//сравнений
далее сразу же после єтого идет:
GetThreadTimes(GetCurrentThread(),&ftPlug,&ftPlug,&ftKrnlE,&ftUsrE)
и получается,что
ftKrnlE == ftKrnlS и ftUsrE = ftUserS
(спецом смотрел под дебуггером)
пробовал добавить кучу циклов,чтобі время проц впустую погонять - разница во времени віходит минимальная
какие будут предположения????
[win32] попробуй командой процессора rdtsc 17.04.02 18:08  
Автор: mijk Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Если у тебя пентиум и не нужен раздельный учет по kernel и user, можно использовать команду rdtsc, возвращающую количество машинных запусков от старта процессора в регистрах edx и eax. C++ ее не понимает, но, вроде, можно так:

inline unsigned _int64 GetCycleCount()
{
  _asm _emit 0x0F
  _asm _emit 0x31
}


---

Использование простое:
unsigned _int64 start = GetCycleCount();
..........
unsigned _int64 duration = GetCycleCount() - start;
[win32] попробуй командой процессора rdtsc 18.04.02 01:52  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
енто все великолепно,но для однозадачной среды.А как мне узнать,какие такты мои.а какие левых процессов.ведь я же не гарантирован,что между вызовами GettickCount() винда не переключит контекст проца на дрругой поток.
[Win32] 2 all - trables with GetThreadTimes 16.04.02 23:47  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
> мне нужно провести хронометраж исполнения алгоритма
> поиска.Для ентого до начала поиска візіваю :
> ...
> GetThreadTimes(GetCurrentThread(),&ftPlug,&ftPlug,&ftKrnlS,
> &ftUsrS)
> ...
> возвращает некоторіе значения:
> ftKrnlS - время,затраченное потоком на віполнение кода ОС
> ftUsrS - время,затрач.потоком на віполнение своего кода
> Потом идет:
> ...
> ptrMatchedElemPos = _find(dwResArraySize);
> ...//по ходу єто функция поиска ел-та.При //большом
> N(N-кол-во записей в файле)может //искать долго,так как
> делает не меньше чем N-1
> //сравнений
> далее сразу же после єтого идет:
> GetThreadTimes(GetCurrentThread(),&ftPlug,&ftPlug,&ftKrnlE,
> &ftUsrE)
> и получается,что
> ftKrnlE == ftKrnlS и ftUsrE = ftUserS
> (спецом смотрел под дебуггером)
> пробовал добавить кучу циклов,чтобі время проц впустую
> погонять - разница во времени віходит минимальная
> какие будут предположения????

Specialno prover u menia vse rabotaet.
vyvod odin: tvoi algoritm vypolniaetsia ochen bystro
vot moi test:
	FILETIME fc,fe,fk,fu,_fk,_fu;
	::GetThreadTimes(::GetCurrentThread(),&fc, &fe, &fk, &fu); 
	
	for(long ll =0;ll<100000;++ll)
	{
		buf = ::SysAllocStringByteLen(0,16);
	}
	::GetThreadTimes(::GetCurrentThread(),&fc, &fe, &_fk, &_fu); 
	printf("k-time = %d, u-time=%d\n", _fk.dwLowDateTime - fk.dwLowDateTime , _fu.dwLowDateTime, _fu.dwLowDateTime );


---
resultat: k-time = 400576, u-time=49971856
[Win32] я думаю дело не в моем алгоритме 17.04.02 15:58  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>

> Specialno prover u menia vse rabotaet.
> vyvod odin: tvoi algoritm vypolniaetsia ochen bystro
>
> vot moi test:
> 	FILETIME fc,fe,fk,fu,_fk,_fu;
> 	::GetThreadTimes(::GetCurrentThread(),&fc, &fe,
> &fk, &fu); 
>         
> 	for(long ll =0;ll<100000;++ll)
> 	{
> 		buf = ::SysAllocStringByteLen(0,16);
> 	}
> 	::GetThreadTimes(::GetCurrentThread(),&fc, &fe,
> &_fk, &_fu); 
> 	printf("k-time = %d, u-time=%d\n",
> _fk.dwLowDateTime - fk.dwLowDateTime , _fu.dwLowDateTime,
> _fu.dwLowDateTime );
> 
> 

---
> resultat: k-time = 400576, u-time=49971856
хех - дік я же говорю,что с циклами пустіми відает разницу.Я делал все енто проще даже-ставил цикл-пустішку-и все-равно есть разница.
Что значит слишком бістро-меньше 100 наносекунд ті хочешь сказать =))
врядли - видимо функция коряво ведет хронометраж.Я сначала поиск вінес в отдельній поток-так там она мне ваще нули возвращала,где бі я ее не візівал.Может кто подскажет как по другому сделать?????
[Win32] я думаю дело не в моем алгоритме 17.04.02 21:19  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
>
> > Specialno prover u menia vse rabotaet.
> > vyvod odin: tvoi algoritm vypolniaetsia ochen bystro
> >
> > vot moi test:
> >	FILETIME fc,fe,fk,fu,_fk,_fu;
> >	::GetThreadTimes(::GetCurrentThread(),&fc, &fe,
> > &fk, &fu); 
> >	     
> >	for(long ll =0;ll<100000;++ll)
> >	{
> >		buf = ::SysAllocStringByteLen(0,16);
> >	}
> >	::GetThreadTimes(::GetCurrentThread(),&fc, &fe,
> > &_fk, &_fu); 
> >	printf("k-time = %d, u-time=%d\n",
> > _fk.dwLowDateTime - fk.dwLowDateTime ,
> _fu.dwLowDateTime,
> > _fu.dwLowDateTime );
> > 
> > 

---
> > resultat: k-time = 400576, u-time=49971856
> хех - дік я же говорю,что с циклами пустіми відает
> разницу.Я делал все енто проще даже-ставил цикл-пустішку-и
> все-равно есть разница.
> Что значит слишком бістро-меньше 100 наносекунд ті хочешь
> сказать =))
> врядли - видимо функция коряво ведет хронометраж.Я сначала
> поиск вінес в отдельній поток-так там она мне ваще нули
> возвращала,где бі я ее не візівал.Может кто подскажет как
> по другому сделать?????

Esli ona vydaet eto znachenie znachit ono takoe i est`.
from MSDN:

These times do not include time spent executing system threads or waiting in a suspended or blocked state.

sledovatelno tvoi algorithm ispolzuet kakieto API kotorye ispolzuut system threads.
[Win32] вот алгоритм - проверь у себя плз 17.04.02 22:32  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
DWORD dwResArraySize = 0,*ptrMatchedElemPos = NULL,pos;
FILETIME ftKrnlS,ftKrnlE,ftUsrS,ftUsrE,ftPlug;
__int64 qwKrnlTm,qwUsrTm,qwTotal;
CString end,pars,rslts;
if(GetThreadTimes(GetCurrentThread(),&ftPlug,&ftPlug,&ftKrnlS,&ftUsrS)==0)
ERR

ptrMatchedElemPos = _find(dwResArraySize);
if(GetThreadTimes(GetCurrentThread(),&ftPlug,&ftPlug,&ftKrnlE,&ftUsrE)==0)
ERR
qwKrnlTm = FTtoQW(&ftKrnlE) - FTtoQW(&ftKrnlS);
qwUsrTm = FTtoQW(&ftUsrE) - FTtoQW(&ftUsrS);
qwTotal = qwKrnlTm + qwUsrTm;
wsprintf(end.GetBuffer(50),"Пошук завершено.Тривалість %lu %luХ100 наносекунд",pos = (DWORD)(qwTotal >> 32),(DWORD)qwTotal& 0xFFFFFFFF);
m_lstResults.AddString(end);
****************************************************
DWORD* CExSearch::_find(DWORD& dwSizeRA)
{
DWORD dwPosCount = m_pPhMgrDlg->m_pDataBox.GetCount(),*ptrMatchedElemPos = NULL;
for (DWORD pos = 0;pos < dwPosCount;pos++) {
if(m_bIsSearchByName)
if(!strstr(m_pPhMgrDlg->m_pDataBox[pos].name,(LPCTSTR)_strSearchByName))
continue;
if(m_bIsSearchByPhone)
if(!strstr(m_pPhMgrDlg->m_pDataBox[pos].phone,(LPCTSTR)strSearchByPhone))
continue;
if(m_bIsSearchByComments)
if(!strstr(m_pPhMgrDlg->m_pDataBox[pos].comments,(LPCTSTR)ь_strSearchByComments))
continue;
if(ptrMatchedElemPos == NULL)
if((ptrMatchedElemPos = (DWORD*) new DWORD[dwPosCount]) == NULL) {
ERR
return 0;
}
ptrMatchedElemPos[dwSizeRA++] = pos;
}
return ptrMatchedElemPos;
}
попробуй.Интернесно.А то,что написано в мСДН - не всегда верно на 100%.МСДН знаешь ли коммерческая штука.Иногда маркетинг не позволяет вікладівать точную инфу.Но тогда помогает айс =))
я вот попробую через такті проца сделать =))
[Win32] вот алгоритм - проверь у себя плз 17.04.02 23:25  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
> попробуй.Интернесно.А то,что написано в мСДН - не всегда
> верно на 100%.МСДН знаешь ли коммерческая штука.Иногда

Nu-nu, pokrainei mere ata function rabotaet ka i pologaetsia.
Kstat ata function just wrapper for NtQueryInformationThread(...)
kotoraya ispolzuetsia po polnoi programme vezde

> маркетинг не позволяет вікладівать точную инфу.Но тогда
> помогает айс =))

???
blah-blah-blah

> я вот попробую через такті проца сделать =))

A kak ty uznaesh kakie "такті" otnosiatsi k tvoeii thread?
[Win32] вот алгоритм - проверь у себя плз 18.04.02 01:54  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
> NtQueryInformationThread(...)
> kotoraya ispolzuetsia po polnoi programme vezde
я не спорю.что она работает,но тогда проясні мне почему она мне нулі сует,а???
> > маркетинг не позволяет вікладівать точную инфу.Но
> тогда
> > помогает айс =))
>
> ???
> blah-blah-blah
имелся в виду отладчик SoftIce =))
> > я вот попробую через такті проца сделать =))
>
> A kak ty uznaesh kakie "такті" otnosiatsi k tvoeii thread?
не знаю пока.сам спросил про енто
[Win32] вот алгоритм - проверь у себя плз 18.04.02 04:41  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
Ctho to ne vizhu I kokogo libo super-puper find.

Poslednii raz govoru chto eta function rabotaet i to chto ona vydaet i est to vremia kotoroe proshlo, i esli eto vremia malo ili null togda tak ono i est`!! A to chto obchee vrema gorazdo bolshe chem vremia poluchennoe cherez etu function, skoree vsego oznachaet chto tvoe thread rabotaet s drugoi thread( ili threads) a ta drugaia (drugie) pozhiraut eto vremia.

P.S.
e.p.r.s.t. blin
[Win32] вот алгоритм - проверь у себя плз 18.04.02 10:57  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
> Ctho to ne vizhu I kokogo libo super-puper find.
я же тебе говорил,что обычный перебор.По другому нельзя в данной ситуации.Там видишь ли задействованы все атрибуты,а сортированы данные только по одному.Вот и приходится
> Poslednii raz govoru chto eta function rabotaet i to chto
> ona vydaet i est to vremia kotoroe proshlo, i esli eto
> vremia malo ili null togda tak ono i est`!! A to chto
> obchee vrema gorazdo bolshe chem vremia poluchennoe cherez
> etu function, skoree vsego oznachaet chto tvoe thread
> rabotaet s drugoi thread( ili threads) a ta drugaia
> (drugie) pozhiraut eto vremia.
да интересно какие же потоки вызываются для нескольких операций сравнения.Или ты решил,что сравнение в ядре выполняется???
ясно сказано,что она возвращает время в 100-наносекундных интервалах-так ты хош сказать,что ентот перебор хотя бы для 100 елементов выполняется менее чем за 100 наносекунд - может быть=)).Проверю с профилировщиком
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach