Re[6]: тест с матрицами - 2
От: GlebZ Россия  
Дата: 03.10.05 08:48
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Сопроцессоры начиная с 486 DX встрены в процессор и являются его неотемлемой частью.

Кто бы возражал. Но инструкции сопроцессора ведь остались.

GZ>>Посмотри дизассемблер через cordbg с оптимизацией. У меня на Net 2.0 и movq встречаются.


VD>movq — это, если мне не изменяет память, команда ММХ. Причем совершенно целочисленная — пересылка данных между регистрами и памятью.

Это я так, для примера Просто не ожидал встретить MMX.

VD>Еще раз повторяю. Тест не содержит плавающей точки в принципе.

Это еще почему. Как тебе такое:
 [020b] fmul        dword ptr [eax+ebp*4+8]
 [020f] fadd        dword ptr [esp+4]
 [0213] fstp        dword ptr [esp+4]


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

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


PD>А это к моему случаю не относится. Я не прохожу элементы diagonally or randomly.

Какая разница как это называется. Ты обращаешься к разным массивам. Значения распределены по месту и непоследовательны. Можно считать что диагональ обладает такими же свойствами.
 temp += a[i][k] * b[k][j];


С уважением, Gleb.
Re[5]: тест с матрицами - 2
От: Alexey Axyonov Украина  
Дата: 03.10.05 09:49
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, Alexey Axyonov, Вы писали:


AA>>Time 1000 = 18,20987

AA>>Time 2000 = 214,3378

PD>Не понял. Это C++ или C# ? И все же, просьба — проверь на 5000. На обоих языках. Внешний цикл до 50, внутренние до 5000 и результат умножь на 100.


Это был C#. Сегодня попробую запустить на AthlonXP 2500+ 512k cache.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Re[7]: тест с матрицами - 2
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.10.05 00:30
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А почему тогда этот маленький кэш не влияет на C++ ?


Пмяти меньше жрет. Вот и вылетает из кэша чаще. А П4 очень не любит сбороса кэша. В итоге такая разница.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: тест с матрицами - 2
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.10.05 00:30
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Я что-то плохо понимаю. Там же матрицы из float. Как же умножение их элементов идет, эмуляцией, что ли, как в добрые DOS-овскме времена ?


Ой, это я что-то напутал. Что-то в друг вголову засело, что массивы бвли целочисленные. Конечно массивы float... В общем фигню говорю.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: тест с матрицами - 2
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.10.05 00:30
Оценка:
Здравствуйте, GlebZ, Вы писали:

VD>>Еще раз повторяю. Тест не содержит плавающей точки в принципе.

GZ>Это еще почему. Как тебе такое:
GZ>
GZ> [020b] fmul        dword ptr [eax+ebp*4+8]
GZ> [020f] fadd        dword ptr [esp+4]
GZ> [0213] fstp        dword ptr [esp+4]
GZ>


Да это я что-то брежу. Не обратил внимания, что массиы то float.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: тест с матрицами - 2
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.10.05 00:30
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>256 Кб


Ну, вот и смотри зависимость. Самый быстрый оказался Pentium M 1.7 Ггц. Частота у него самая дохлая, но кэш метровый.
Воторой к финишу пришел AMD64 с реальной частотой 2.2 Ггц. Частота у него выше, но кэш полуметровый, т.е. в два раза меньший. Третьим к финишу пришел Pentium 4 3.0 Ггц. Частота у него заоблочная, а кэш четверть метра. При этом именно Pentium 4 очень боится сбросов кэша и конвеера команд, так как имеет очень длинный конвеер и его перезаполнение дико дорого. Видимо после какого-то раммера массива кэш и конвеер начинает сбрасываться и приходит приплызд.

По хорошему нужно бы поиграться с настройками компилятора С++. Задать ему генерацию кода под SSE/MMX и потом наоборот для Pentium (1). Ну, чтобы поглядеть какие при этом изменения в производительности происходят.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: тест с матрицами - 2
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.10.05 00:30
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

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



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


PD>Да здравствует Net Framework, который для кубического алгоритма обеспечивает квадратичную зависимость!


Не да здравсвтвует Интел который умудрился сделать процессор который хуже чем предыдущие поколения.

PD>P.S. А нельзя ли с его помощью NP-полные задачи свести к полиномиальным ?


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

VD>>Что-то больно сказочный результат. 16 секунд дохлятина вроде P4 1.8 выжать не должна. У меня на 3-х гигогерцовом процессоре результат был 13 секунд.


PD>Так ведь такой же результат был и на моем P4 1.6. Дает. Сказочный или нет, а дает.


Ага. А еще почти такой же на моем P4 3.0. Не кажется странным?

VD>>А это уже совсем сказочный результат. Тут данные уже должны были по любому выйти за кэш.


PD>Влад, я пишу то, что вижу. Сказочный или нет — не знаю.


Ну, значит кроме сброса кэша есть еще какая-то причина. Но чтобы ее осмыслить нужно уже совсем на разбор отдельных инструкций переходить.

Если интересно можно дизасемблировать код генерируемый джитом для разных процессоров и сравнить его с С++-ным. Но это уже очень серьезная задачка. К тому же я в новых инструкциях не очень секу. Да и вообще ассемблер недолюбливаю.

PD>Чем рассуждать о бессмысленности рассуждений, приведи лучше данные, какие у тебя получились на 5000. Для C++ и C#. Чтобы ты не говорил, что я предлагаю тебе четырехчасовой тест, сделай как и я — внешний цикл до 50, внутренние до 5000 и результат умножь на 100.


Да, мне пофигу что компьютеры делают когда меня нет. Ладно, запустил тут на P4 (на других процессорах разница в процентах от увеличения матрицы, после 800, не изменяется).
Итак 5000 на P4 C#:
7:33:45 (короче 7 с половиной часов :)) ).

С++:
04:12:45 (то есть 15165 сек).

То есть разница менее чем в два раза. Так что не знаю что там, у тебя получается. Конечно 2 раза это не 20 процентов, но и не 14 раз все же.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: тест с матрицами - 2
От: Pavel Dvorkin Россия  
Дата: 04.10.05 05:14
Оценка:
Здравствуйте, VladD2, Вы писали:


PD>>Чем рассуждать о бессмысленности рассуждений, приведи лучше данные, какие у тебя получились на 5000. Для C++ и C#. Чтобы ты не говорил, что я предлагаю тебе четырехчасовой тест, сделай как и я — внешний цикл до 50, внутренние до 5000 и результат умножь на 100.


VD>Да, мне пофигу что компьютеры делают когда меня нет. Ладно, запустил тут на P4 (на других процессорах разница в процентах от увеличения матрицы, после 800, не изменяется).

VD>Итак 5000 на P4

C#:
VD>
VD>7:33:45 (короче 7 с половиной часов :)) ).
VD>

VD>С++:
VD>[c#]
VD>04:12:45 (то есть 15165 сек).

А у меня на P4-2.8GHz — 2346 сек C++ и 12400.

(см.http://www.rsdn.ru/Forum/Message.aspx?mid=1413234&amp;only=1
Автор: Pavel Dvorkin
Дата: 02.10.05
)

Какая частота и кэш у этого P4 ? И можешь ли пропустить на Athlon-64 ?
With best regards
Pavel Dvorkin
Re[9]: тест с матрицами - 2
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 04.10.05 14:57
Оценка:
Здравствуйте, GlebZ, Вы писали:

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


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

S>> Вообще то влад ответил http://www.rsdn.ru/Forum/Message.aspx?mid=1412468&amp;only=1
Автор: VladD2
Дата: 30.09.05



Для сравнения запустил тот же код на VC++ 8.0 получилось 13 секунд. Так что не все такк страшно, как казлось.

В дебаге вообще 17 секунд, так что можно считать, что МС таки доводит джит до уровня С++-ного компилятора.



S>>обычный write barier. Да и по поведению в 1.1 vs 2.0 очень похоже.

GZ>Не понял, и где разница?здесь
Автор: Alexey Axyonov
Дата: 02.10.05


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