тест с матрицами - 2
От: Pavel Dvorkin Россия  
Дата: 30.09.05 06:49
Оценка:
Подумал я и решил исследовать, как зависит время от размера матрицы.

Release

nSize C++ C#

100 0.16 0.14
200 0.39 0.42
300 0.66 0.71
400 0.92 2.80
500 1.72 6.50
600 3.00 5.46
700 5.23 10.14
800 7.95 51.7
900 12.3 1'22"
1000 17.7 4'11"

На небольших nSize C# ничем не уступает C++. Правда, обращает на себя странная аномалия — при переходе от 500 к 600 время уменьшается. Это не артефакт — проверял дважды.
Резкий рост времени на С# начинается с 800. Переход к 900 — нормальный рост. Переход к 1000 — опять всплеск.

Помолился я тут богу, и запусти еще один тест

1500 6'6"" 18'55"


Вот такие дела...
With best regards
Pavel Dvorkin
Re: тест с матрицами - 2
От: Andrbig  
Дата: 30.09.05 07:00
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Подумал я и решил исследовать, как зависит время от размера матрицы.

<skip>
PD>Вот такие дела...

Посмотри http://www.rsdn.ru/article/dotnet/GCnet.xml
Автор(ы): Игорь Ткачев
Дата: 06.12.2002
Алгоритм работы сборщика мусора (garbage collector, далее просто GC), являющегося частью CLR, подробно описан в книге Джефри Рихтера (Jeffrey Richter) «Applied Microsoft .NET Framework Programming». Мы не будем приводить здесь столь же подробное описание этого алгоритма, но обязательно остановимся на некоторых ключевых моментах.
— там тоже баловались сравнением скорости C++ и C#. И результаты были как у тебя — начиная с определенного размера GC стал сдавать. Так что Америку ты не открыл.
Re[2]: тест с матрицами - 2
От: Mab Россия http://shade.msu.ru/~mab
Дата: 30.09.05 07:38
Оценка:
Здравствуйте, Andrbig, Вы писали:

A>Посмотри http://www.rsdn.ru/article/dotnet/GCnet.xml
Автор(ы): Игорь Ткачев
Дата: 06.12.2002
Алгоритм работы сборщика мусора (garbage collector, далее просто GC), являющегося частью CLR, подробно описан в книге Джефри Рихтера (Jeffrey Richter) «Applied Microsoft .NET Framework Programming». Мы не будем приводить здесь столь же подробное описание этого алгоритма, но обязательно остановимся на некоторых ключевых моментах.
— там тоже баловались сравнением скорости C++ и C#. И результаты были как у тебя — начиная с определенного размера GC стал сдавать. Так что Америку ты не открыл.


Т.е. в проделываемом тесте на каждой итерации матрица создается заново? Но это же безобразие.
Re[3]: тест с матрицами - 2
От: Andrbig  
Дата: 30.09.05 07:44
Оценка:
Здравствуйте, Mab, Вы писали:

Mab>Здравствуйте, Andrbig, Вы писали:


A>>Посмотри http://www.rsdn.ru/article/dotnet/GCnet.xml
Автор(ы): Игорь Ткачев
Дата: 06.12.2002
Алгоритм работы сборщика мусора (garbage collector, далее просто GC), являющегося частью CLR, подробно описан в книге Джефри Рихтера (Jeffrey Richter) «Applied Microsoft .NET Framework Programming». Мы не будем приводить здесь столь же подробное описание этого алгоритма, но обязательно остановимся на некоторых ключевых моментах.
— там тоже баловались сравнением скорости C++ и C#. И результаты были как у тебя — начиная с определенного размера GC стал сдавать. Так что Америку ты не открыл.


Mab>Т.е. в проделываемом тесте на каждой итерации матрица создается заново? Но это же безобразие.


Т.е. автору теста стоит ознакомиться с текстом, возможно тот натокнет его на некие выводы. А что уж там у него создается — я не знаю.
Re[2]: тест с матрицами - 2
От: Pavel Dvorkin Россия  
Дата: 30.09.05 09:48
Оценка:
Здравствуйте, Andrbig, Вы писали:

A>Посмотри http://www.rsdn.ru/article/dotnet/GCnet.xml
Автор(ы): Игорь Ткачев
Дата: 06.12.2002
Алгоритм работы сборщика мусора (garbage collector, далее просто GC), являющегося частью CLR, подробно описан в книге Джефри Рихтера (Jeffrey Richter) «Applied Microsoft .NET Framework Programming». Мы не будем приводить здесь столь же подробное описание этого алгоритма, но обязательно остановимся на некоторых ключевых моментах.
— там тоже баловались сравнением скорости C++ и C#. И результаты были как у тебя — начиная с определенного размера GC стал сдавать. Так что Америку ты не открыл.


Да я и не претендую на лавры Колумба. Хотя и не понимаю — почему здесь GC вообще вмешивается. Я-то здесь никакие объекты не создаю и не освобождаю.
With best regards
Pavel Dvorkin
Re: тест с матрицами - 2
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 30.09.05 10:07
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:
Re[6]: тест с матрицами
Автор: Serginio1
Дата: 29.09.05

Кроме как промаха кэша и его сброса нет очевидных причин, т.к. последовательно проходит на ура.
Какова кстати ситуация с Re: тест с матрицами
Автор: GlebZ
Дата: 29.09.05
... << RSDN@Home 1.1.4 stable rev. 510>>
и солнце б утром не вставало, когда бы не было меня
Re[2]: тест с матрицами - 2
От: Pavel Dvorkin Россия  
Дата: 30.09.05 11:39
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Pavel Dvorkin, Вы писали:

S>Re[6]: тест с матрицами
Автор: Serginio1
Дата: 29.09.05

S> Кроме как промаха кэша и его сброса нет очевидных причин, т.к. последовательно проходит на ура.

Что-то странно он промахивается.

S> Какова кстати ситуация с Re: тест с матрицами
Автор: GlebZ
Дата: 29.09.05


http://www.rsdn.ru/Forum/Message.aspx?mid=1410501&amp;only=1
Автор: Pavel Dvorkin
Дата: 30.09.05
With best regards
Pavel Dvorkin
Re[3]: тест с матрицами - 2
От: GlebZ Россия  
Дата: 30.09.05 14:14
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Что-то странно он промахивается.

Скорее всего это перенос из популяций в популяцию. Просмотреть можно через Performance. Там выбрать как "Performance object" — NET CRL Memory, Counters — %Time In GC и допустим #Gen n Collections и можно еще кучу counterов подключить. Они могут показать сколько времени занимает GC, и сколько сборок мусора делает.

С уважением, Gleb.
Re: тест с матрицами - 2
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.05 23:58
Оценка: +1
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Вот такие дела...


Назовите модель своего процессора сэр. А народ должен знать чего лучше никогда не покупать.

Попробую угадать его марку Цэ-лерон или какой-нить Симпсон. Короче то у чего кэш успевает закончиться даже не начавшись.

ЗЫ

У меня:
Size:  100 Time: 00:00:00.0156246
Size:  200 Time: 00:00:00.0468738
Size:  300 Time: 00:00:00.1718706
Size:  400 Time: 00:00:00.5937348
Size:  400 Time: 00:00:00.5937348
Size:  500 Time: 00:00:01.3280910
Size:  600 Time: 00:00:01.9062012
Size:  700 Time: 00:00:03.4686390
Size:  800 Time: 00:00:06.2341755
Size:  900 Time: 00:00:10.5621620
Size: 1000 Time: 00:00:16.5463455

то есть нармальная квадратичная зависимость.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: тест с матрицами - 2
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.09.05 23:58
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Скорее всего это перенос из популяций в популяцию. Просмотреть можно через Performance. Там выбрать как "Performance object" — NET CRL Memory, Counters — %Time In GC и допустим #Gen n Collections и можно еще кучу counterов подключить. Они могут показать сколько времени занимает GC, и сколько сборок мусора делает.


Нет. ЖЦ тут вообще ни на что не влияет. Там объектов то копейки и занимаются они все до перемножения. Так что время действтилеьно уходит на промахи в кэше и может еще на райт-барьер.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: тест с матрицами - 2
От: GlebZ Россия  
Дата: 01.10.05 11:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>то есть нармальная квадратичная зависимость.

У меня PIV(2Г) — тоже самое, квадратичная последовательность. А вообще, именно перемножением матриц меряют эффективность сопроцессора.

С уважением, Gleb.
Re[3]: тест с матрицами - 2
От: GlebZ Россия  
Дата: 01.10.05 13:09
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, VladD2, Вы писали:


VD>>то есть нармальная квадратичная зависимость.

GZ>У меня PIV(2Г) — тоже самое, НЕ квадратичная последовательность. А вообще, именно перемножением матриц меряют эффективность сопроцессора.

Одно слово забыл, а смысл обратный.
Просто варьирует на 1000 от 2 минут до 3. Стабильного времени алгоритма нет.
С уважением, Gleb.
Re[2]: тест с матрицами - 2
От: Alexey Axyonov Украина  
Дата: 01.10.05 21:43
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Вот такие дела...


VD>Назовите модель своего процессора сэр. А народ должен знать чего лучше никогда не покупать.


VD>Попробую угадать его марку Цэ-лерон или какой-нить Симпсон. Короче то у чего кэш успевает закончиться даже не начавшись.


VD>ЗЫ


VD>У меня:

VD>
VD>Size:  100 Time: 00:00:00.0156246
VD>Size:  200 Time: 00:00:00.0468738
VD>Size:  300 Time: 00:00:00.1718706
VD>Size:  400 Time: 00:00:00.5937348
VD>Size:  400 Time: 00:00:00.5937348
VD>Size:  500 Time: 00:00:01.3280910
VD>Size:  600 Time: 00:00:01.9062012
VD>Size:  700 Time: 00:00:03.4686390
VD>Size:  800 Time: 00:00:06.2341755
VD>Size:  900 Time: 00:00:10.5621620
VD>Size: 1000 Time: 00:00:16.5463455
VD>

VD>то есть нармальная квадратичная зависимость.

Аналогично.

Athlon 64 3500+ (x86 режим) 512k L2 cache:

.NET 2.0.50727.26

Time 100 = 0,005173283
Time 200 = 0,04024897
Time 300 = 0,1676054
Time 400 = 0,6383289
Time 500 = 1,538195
Time 600 = 2,267745
Time 700 = 4,143095
Time 800 = 7,288717
Time 900 = 11,97331
Time 1000 = 18,38258

.NET 1.1.4322 SP1

Time 100 = 0,004150248
Time 200 = 0,0351419
Time 300 = 0,1544269
Time 400 = 0,6232547
Time 500 = 1,514088
Time 600 = 2,23681
Time 700 = 4,097188
Time 800 = 7,187719
Time 900 = 11,99186
Time 1000 = 18,31991
... << RSDN@Home 1.2.0 alpha rev. 618>>
Re[2]: тест с матрицами - 2
От: Pavel Dvorkin Россия  
Дата: 02.10.05 03:41
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Вот такие дела...


VD>Назовите модель своего процессора сэр. А народ должен знать чего лучше никогда не покупать.


Извольте, сэр! А покупать его не удастся — машине 3 года, увы

VD>Попробую угадать его марку Цэ-лерон или какой-нить Симпсон. Короче то у чего кэш успевает закончиться даже не начавшись.


Pentium IV 1600 MHz.

А может, попробовать Size 2000 — 3000 ? Интересно, что будет. Дело не в размере ведь...

И еще вопрос. А С++ на твоей машине для этих же размеров что дает ?
With best regards
Pavel Dvorkin
Re[4]: тест с матрицами - 2
От: Pavel Dvorkin Россия  
Дата: 02.10.05 03:48
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>>У меня PIV(2Г) — тоже самое, НЕ квадратичная последовательность. А вообще, именно перемножением матриц меряют эффективность сопроцессора.


Во времена оные классическим тестом считалось 50-кратное обращение матрицы.

GZ>Одно слово забыл, а смысл обратный.

GZ>Просто варьирует на 1000 от 2 минут до 3. Стабильного времени алгоритма нет.
GZ>С уважением, Gleb.

Вообще-то интересный эффект. На моих 1600 и твоих 2000 — примерно одна и та же картина, резко отличающаяся от того, что у VladD2 и Alexey Axyonov (он, правда, не сказал, какой у него процессор). А между тем С++ дает нормальные результаты.

Может, .Net специально на старых процессорах помедленнеее работает ? Чтобы апгрейдили их побыстрее ?
With best regards
Pavel Dvorkin
Re: тест с матрицами - 2
От: Pavel Dvorkin Россия  
Дата: 02.10.05 07:35
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

Пропустил я сейчас эти 2 теста для nSize = 1000 на других машинах

Pentium IV, 1.8 GHz, 736 Mb
С++ 16 сек.
C# 140 сек

Pentium IV, 2.8 GHz, 1 Gb

C++ 10 сек
C# 18 сек.

Таким образом, для машин с частотой <= 2GHz имеет место то, о чем я писал в исходном сообщении. Для машин с частотой порядка 3 GHz — то, о чем писал VladD2 и др.

Попробовал для nSize = 3000, на Pentium IV, 2.8 GHz, 1 Gb

С++ 296 сек.

С# 887 сек.

Помолился я богу и поставил nSize = 5000. Делать мне сегодня нечего, у нас олимпиада проходит, до конца ее еще 1.5 часа, мое вмешательство не требуется, все автоматизировано

С++ 2346 сек.

Для С# было ясно, что результатов я не дождусь. Поэтому изменил самый внешний цикл, поставив там 50 вместо 5000. Время для этого теста 124 сек. Так что на полный тест ориентировочное время 12400 сек.

Так что впечатление, что дело здесь не в процессоре. Просто на более мощном процессоре эффект проявляется тот же, только при больших размерах матрицы. На моей слабой машине тоже ведь разнийы практически не было при размерах до 300.
With best regards
Pavel Dvorkin
Re[2]: тест с матрицами - 2
От: Pavel Dvorkin Россия  
Дата: 02.10.05 07:56
Оценка:
2Vlad2D: Если имеешь время, повтори для 3000 хотя бы. Интересно сравнить.
With best regards
Pavel Dvorkin
Re[5]: тест с матрицами - 2
От: Alexey Axyonov Украина  
Дата: 02.10.05 08:10
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

>PD Alexey Axyonov (он, правда, не сказал, какой у него процессор).


Как это не сказал?

Athlon 64 3500+ (x86 режим) 512k L2 cache


Писал в обоих сообщениях.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Re[3]: тест с матрицами - 2
От: Alexey Axyonov Украина  
Дата: 02.10.05 08:25
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>2Vlad2D: Если имеешь время, повтори для 3000 хотя бы. Интересно сравнить.


Athlon 64 3500+ (Winchester) 512k L2


Time 1000 = 18,20987
Time 2000 = 214,3378

Дальше тенденция понятна.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Re[6]: тест с матрицами - 2
От: GlebZ Россия  
Дата: 02.10.05 08:55
Оценка:
Здравствуйте, Alexey Axyonov, Вы писали:

.Хе-хе. У Влада тоже Athlon 64.
Интересно что JIT нерил на строчку temp += a[i][k] * b[k][j] ассемблера.

С уважением, Gleb.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.