Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];

Вниз

переменная string. Поменять местами некоторые данные   Найти похожие ветки 

 
Jeer ©   (2005-05-20 18:08) [40]

Defunct:

0 [ns] - s2 := PChar(s1);
0 [ns] - w := PWord(@s2[0])^;
12 [ns] - PWord(@s2[0])^ := PWord(@s2[3])^;
45 [ns] - PWord(@s2[3])^ := w;


 
Jeer ©   (2005-05-20 18:11) [41]

Sha:
0 [ns]-  p:=pointer(s);
0 [ns]-  q:=p+3;
0 [ns]-  w:=pword(p)^;
10[ns]-  pword(p)^:=pword(q)^;
44[ns]-  pword(q)^:=w;


 
Sha ©   (2005-05-20 18:11) [42]

> Jeer ©   (20.05.05 18:04) [39]

44 нс на 2ГГц пентиуме - это 88 тактов CPU.
Не могут 6 мувов в цикле исполняться такое время.


 
Sha ©   (2005-05-20 18:12) [43]

Ты чем таким меришь, что у тебя такая дискретность?


 
Jeer ©   (2005-05-20 18:13) [44]

Jeer:
6 [ns]-   s[3] := s[1];
11[ns]-   s[6] := s[2];
17[ns]-   s[1] := s[4];
24[ns]-   s[2] := s[5];
30[ns]-   s[4] := s[3];
35[ns]-   s[5] := s[6];
44[ns]-   s[3] := ".";
49[ns]-   s[6] := ".";


 
Jeer ©   (2005-05-20 18:17) [45]

QueryPerformanceCounter;
Допускаю, конечно, наличие систематического сдвига.


 
Sha ©   (2005-05-20 18:18) [46]

> Jeer ©   (20.05.05 18:17) [45]

Код приведи.


 
Jeer ©   (2005-05-20 18:19) [47]

Так это выглядит:)
N := 10000001;
 tm.Clear;
 tm.Start;
 for i:=1 to N do begin
   s[3] := s[1];
   s[6] := s[2];
   s[1] := s[4];
   s[2] := s[5];
   s[4] := s[3];
   s[5] := s[6];
   s[3] := ".";
   s[6] := ".";
 end;
 tm.Stop;


 
Sha ©   (2005-05-20 18:26) [48]

Ну так ты меришь накладные расходы на организацию выполнения цикла :)

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

Попробуй своим способом измерить время работы оператора nop (0.5 такта CPU):
asm nop; end;


 
default ©   (2005-05-20 18:44) [49]

Sha ©   (20.05.05 17:43) [33]
"Локальные просто ссылаются на RO-строку (отсюда AV)"
"а глобальные копируют ее содержимое (поэтому все работает)."
зачем такое разделение?
кстати если локальной строке присвоить константу, то её счётчик ссылок равен $FFFFFFFF и AV в результате
если же попытатьcя изменить нелегеально значение строки, к примеру, со счётчиком ссылок 3, то нет никакого AV-а
:(


 
default ©   (2005-05-20 18:45) [50]

Sha ©   (20.05.05 17:43) [33]
"Локальные просто ссылаются на RO-строку (отсюда AV)"
"а глобальные копируют ее содержимое (поэтому все работает)."
зачем такое разделение?
кстати если локальной строке присвоить константу, то её счётчик ссылок равен $FFFFFFFF и AV в результате
если же попытатьcя изменить нелегеально значение строки, к примеру, со счётчиком ссылок 3, то нет никакого AV-а
:(


 
Sha ©   (2005-05-20 18:51) [51]

> default ©   (20.05.05 18:44) [49]
> "Локальные просто ссылаются на RO-строку (отсюда AV)"
> "а глобальные копируют ее содержимое (поэтому все работает)."
> зачем такое разделение?

Думаю, для совмести со старыми версиями.

> кстати если локальной строке присвоить константу, то её
> счётчик ссылок равен $FFFFFFFF и AV в результате

Ну, так я тебе сказал то же самое: RO-константы имеют счетчик ссылок -1.

> если же попытатьcя изменить нелегеально значение строки,
> к примеру, со счётчиком ссылок 3, то нет никакого AV-а

Ну ты понимаешь, конечно, что тем самым ты меняешь значения 3-х строк, а не одной? :)


 
default ©   (2005-05-20 18:53) [52]

+[50]
"кстати если локальной строке присвоить константу, то её счётчик ссылок равен $FFFFFFFF и AV в результате
если же попытатьcя изменить нелегеально значение строки, к примеру, со счётчиком ссылок 3, то нет никакого AV-а"
вот это кажется понял - в первом случае AV из-за изменения константы, во втором это уже не константа хоть и строка RO

первый вопрос остаётся?
почему глобальная переменная сразу готова к изменению, для локальной же обязательно избавляться от RO?


 
default ©   (2005-05-20 18:56) [53]

RO я понимал как Read Only(RefCount>1)
сначала подумал что RO это ReferenceOne:)
"Ну ты понимаешь, конечно, что тем самым ты меняешь значения 3-х строк, а не одной? :)"
да, конечно

RO-константы расшифруйте(


 
default ©   (2005-05-20 19:00) [54]

вообщем всё понял


 
Sha ©   (2005-05-20 19:02) [55]

> RO-константы расшифруйте(
Строки, которые при загрузке экзешника, размещаются на странице
памяти с доступом только на чтение.
Всегда имеют счетчик ссылок, установленный в -1.


 
default ©   (2005-05-20 19:05) [56]

Sha ©   (20.05.05 19:02) [55]
угу
это разделение нелогичное, конечно, впечатлило...


 
evvcom ©   (2005-05-20 22:36) [57]

Добрался до машины с Delphi... посмотрел CPU. Да... Век живи, век учись.


 
Defunct ©   (2005-05-21 01:20) [58]

> Jeer

Я, к сожалению, в этой ветке не участвовал ;>
Все лавры господину default"у!

PS: спасибо, что обо мне вспомнили, :)


 
Jeer ©   (2005-05-23 10:36) [59]

К сожалению, в пятницу, при проверке вышеприведенных методов система пребывала, как оказалось, в странном состоянии.
Собственно, это было видно по цифрам - явно разные по количеству тактов тесты стали давать примерно одинаковый результат.
(хотя для Marser и Jeer были сделаны верные оценки)

Дома, на досуге, перепроверил и, с учетом вызовов RDTSC,
function GetCPUTicks_:int64;
asm
   dw 310Fh // rdtsc
end;
, а также затрат на организацию цикла получаем:

Marser is = 2941.30 ns
Tcall  is = 88 ticks
Tcycle is = 2 ticks
Ttest  is = 5941 ticks

Jeer is = 47.53 ns
Tcall  is = 88 ticks
Tcycle is = 2 ticks
Ttest  is = 96 ticks

Sha is = 1.49 ns
Tcall  is = 88 ticks
Tcycle is = 2 ticks
Ttest  is = 3 ticks

Default is = 4.95 ns
Tcall  is = 88 ticks
Tcycle is = 2 ticks
Ttest  is = 10 ticks

Общее время теста выбиралось менее системного кванта (10 ms на w2k), чтобы снизить вероятность переключения задач.

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

Вполне понятно, что не ставилась задача выявления лучшего/худшего  алгоритмов.
Просто из "невинного" вопроса появилась возможность продемонстрировать разные способы решения одной и той же задачи, с чем все присутствующие с блеском справились.
А benchmark - это так, побочный эффект, но тоже полезный.

P.S.
Default/Defunct - я уже в вас путаюсь, не к добру это:)



Страницы: 1 2 вся ветка

Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.57 MB
Время: 0.016 c
14-1116315976
Alexander Panov
2005-05-17 11:46
2005.06.06
Раз и навсегда избавиться от вопроса STR-->PCHAR.


14-1116411476
Arkady
2005-05-18 14:17
2005.06.06
Delphi 2005


1-1116665446
злобная танька
2005-05-21 12:50
2005.06.06
нарисовать линию на скролбоксе


3-1115099064
_DB_
2005-05-03 09:44
2005.06.06
SQL запрос на выбор записей, начанающихся с определенного слова


1-1116823928
Владимир
2005-05-23 08:52
2005.06.06
Защита диска А:





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский