Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 [7] 8 9 10 11 .. 43   вперед  Ctrl
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Dima T
Member

Откуда:
Сообщений: 13717
mayton
Давайте переименуем not() в norm() во всех проектах.

Переименовал
6 сен 15, 20:37    [18115952]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
petalvik
Member

Откуда:
Сообщений: 678
mayton
Коллеги у кого среда с профайлером - прошу дать сведения где у нас самые интенсивные
вычисления.

Результаты встроенного анализатора.
Visual Studio 2013 Community

Function NameInclusive SamplesExclusive SamplesInclusive Samples %Exclusive Samples %
TestTraycer.Program.tracer91 40791 40782,0882,08
TestTraycer.Program.sampler105 6988 46894,927,60
[clr.dll]2 7542 7542,472,47
TestTraycer.Vector.op_Multiply1 8571 8571,671,67
System.Random.Sample1 6481 6481,481,48
TestTraycer.Program.Main110 8681 55699,561,40
TestTraycer.Vector.op_LogicalNot9859850,880,88
[msvcr120_clr0400.dll]8378370,750,75
TestTraycer.Vector.op_Addition7837830,700,70
TestTraycer.Vector.op_Modulus7497490,670,67
System.Random.NextDouble1661660,150,15
System.Random.InternalSample1211210,110,11
6 сен 15, 20:37    [18115953]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Изопропил
Member

Откуда:
Сообщений: 31163
mayton
Может просто prod и vprod (sprod). Скалярное и векторное. ?

можно sProd и vProd

топик возник то из срача об описании алгоритмов )
6 сен 15, 20:38    [18115955]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
petalvik
Member

Откуда:
Сообщений: 678
Чёрт, опять рано отправил.

Это анализ кода на C#. Собрано под .NET 4.5.
Часть результатов убрал, там тысячные доли процента.

Проще всего судить по последней колонке.
tracer 82% времени работает.
[clr.dll] - это работа рантайма, сборщик мусора, etc.
6 сен 15, 20:42    [18115990]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
mayton
Member

Откуда: loopback
Сообщений: 41068
Кузнецов Евгений, логонься бро. Ты нам нужен.
6 сен 15, 20:43    [18115992]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Изопропил
Member

Откуда:
Сообщений: 31163
Кузнецов Евгений
2) SSE можно только в unmanaged - т.е создаем преимущество для С++


сторонники JIT - говорят что одно из достоинств их технологии - адаптируемость к текущему железу
6 сен 15, 20:47    [18116019]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
mayton
Member

Откуда: loopback
Сообщений: 41068
petalvik
Проще всего судить по последней колонке.
tracer 82% времени работает.
[clr.dll] - это работа рантайма, сборщик мусора, etc.

Спасибо за анализ. 82% - это почти закон Парето :)

В задачах оптимизации будем исходить из того что нужно глядеть в tracer.
6 сен 15, 20:48    [18116024]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Изопропил
Member

Откуда:
Сообщений: 31163
не забывайте указывать - x64 или x86
есть нюансы
6 сен 15, 20:51    [18116032]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Кузнецов Евгений
Guest
mayton, я не зарегистрирован.
Спрашивайте, отвечу, если знаю.
6 сен 15, 20:57    [18116053]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Кузнецов Евгений
Guest
Изопропил,
на самом деле это очень неочевидно.
Автоматически параллелить код далеко не все компиляторы умеют.
Плюс из-за побочных эффектов он может не быть строго эквивалентным.
Вроде, в новой версии компилятора C# собирались SSE на уровне intrinsic поддержать
6 сен 15, 21:01    [18116065]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
mayton
Member

Откуда: loopback
Сообщений: 41068
Кузнецов Евгений
mayton, я не зарегистрирован.
Спрашивайте, отвечу, если знаю.

Спрашиваю.

Знаешь D, GoLang ?
6 сен 15, 21:03    [18116072]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Кузнецов Евгений
Guest
mayton, нет, к сожалению
6 сен 15, 21:05    [18116077]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Изопропил
Member

Откуда:
Сообщений: 31163
Кузнецов Евгений
Плюс из-за побочных эффектов он может не быть строго эквивалентным.

это к любой серьёзной оптимизации относится.
6 сен 15, 21:06    [18116080]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
petalvik
Member

Откуда:
Сообщений: 678
Изопропил
сторонники JIT - говорят что одно из достоинств их технологии - адаптируемость к текущему железу

Вроде давно уже перестали говорить. Увы и ах... Печально на самом деле с этим.
Так-то в Mono давно можно использовать векторные операции. Ну и в последнее время в .NET начались подвижки. В новом RyuJIT появилась поддержка SIMD.

Но, наверно, лучше оставить алгоритм как есть. Чтобы все языки были в более-менее равных условиях.
6 сен 15, 21:10    [18116094]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Изопропил
Member

Откуда:
Сообщений: 31163
не думаю, что сильно ускорится от замены пары умножений на одно mulpd
_ZN6VectorrmES_:
.LFB15:
	.seh_endprologue
	movsd	8(%rdx), %xmm0
	movsd	8(%rcx), %xmm1
	mulsd	%xmm0, %xmm1
	movsd	(%rdx), %xmm0
	mulsd	(%rcx), %xmm0
	addsd	%xmm1, %xmm0
	movsd	16(%rdx), %xmm1
	mulsd	16(%rcx), %xmm1
	addsd	%xmm1, %xmm0
	ret
	.seh_endproc

придётся проверять
6 сен 15, 21:18    [18116138]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Изопропил
Member

Откуда:
Сообщений: 31163
petalvik
Чтобы все языки были в более-менее равных условиях.

языки то может и окажутся - начнётся битва компиляторов и процессоров
6 сен 15, 21:21    [18116159]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Кузнецов Евгений
Guest
У меня такое впечатление, что код выиграл бы (и по быстродействию, и по читаемости), если бы перенести все вычисления из методов/операторов Vector в вызывающий код
6 сен 15, 21:22    [18116167]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
mayton
Member

Откуда: loopback
Сообщений: 41068
Коллеги. По поводу перегрузки операций и имен. Пока мы не запутались в терминах.

Прошу сделать рефакторинг Vector в соотвествии с этой табличкой.
C++ operationRaname to...Comment
operator+(Vector r)sum()сумма векторов
operator*(double r)prod()умножение вектора на скаляр
operator%(Vector r)sprod()скалярное произведение 2х векторов
operator^(Vector r)vprod()векторное произведение 2х векторов
operator!()norm()нормирование вектора
6 сен 15, 21:24    [18116178]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Dima T
Member

Откуда:
Сообщений: 13717
Изопропил
не забывайте указывать - x64 или x86
есть нюансы

у меня x86. C# и C++.

ИМХУ интереснее распараллелить, и то и другое. Завтра попробую. Жалко OpenCL негде попробовать, не игрун :(
6 сен 15, 21:25    [18116185]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
petalvik
Member

Откуда:
Сообщений: 678
mayton
сборочный скриптик для шарпов

Мнэ-э... С одной стороны, скриптик элементарен:
csc TestTraycer.cs /o
/o = /optimize - включаем оптимизацию.

С другой - путь до компилятора C# по умолчанию не задан, если запускать просто cmd.
Можно указать путь либо до компилятора в папке с фреймворком (имеется даже если не установлена Visual Studio):
"%WINDIR%\Microsoft.NET\Framework\v4.0.30319\csc.exe" TestTraycer.cs

либо путь к MsBuild:
"%PROGRAMFILES%\MSBuild\12.0\Bin\csc.exe" TestTraycer.cs
Причём версию нужно указать правильную.

Либо нужно запускать Developer Command Prompt for VS. Находится в папке Visual Studio Tools. Но тут тоже возможен разнобой названий в разных версиях Винды и Студии. Может быть папка .NET SDK или что-то в этом духе. Патамушта удобный ГУЙ, не рассчитанный на консоль.
6 сен 15, 22:07    [18116336]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Кузнецов Евгений
Guest
Насколько я вижу, порядок выполнения цикла в tracer не важен, там проход по всем ненулевым битам слов из массива G, а далее используем номер слова и номер бита. Тогда можно было бы сократить число итераций более чем в 2 раза, предобработав массив G.
Т.е. получаем некоторый int[] P, где в старших 16 битах - номер слова, в младших - номер бита. Итерация будет происходить только по единичным битам в одиночном for + уйдет ветвление из-за if.
6 сен 15, 22:08    [18116337]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
mayton
Member

Откуда: loopback
Сообщений: 41068
petalvik, спасибо. То что нужно. Я закоммичу самый тривиальный вариант сборочного
скриптика а там уже позже разберёмся чо как.
6 сен 15, 22:14    [18116371]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
mayton
Member

Откуда: loopback
Сообщений: 41068
kealon(Ruslan)
хороший пост, стоит почитать

Добавлю. Любопытная статья Андрея Аксёнова. Ей уже более 10 лет
и она писалась под Pentium/MMX. Но в ней есть некоторые обзоры
терминологии из области 3D графики и hints & tips.

http://algolist.manual.ru/graphics/3dfaq/index.php
6 сен 15, 22:25    [18116419]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
wst
Member

Откуда:
Сообщений: 202
Если уж предобрабатывать, то уж до массива из Vector-ов с центрами сфер для каждого бита. Кстати, кроме паскалевских - больше ни для каких языков опции компилятора что-то не видать.
6 сен 15, 22:44    [18116471]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Изопропил
Member

Откуда:
Сообщений: 31163
Кузнецов Евгений,

да, помогло
6 сен 15, 22:45    [18116473]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 [7] 8 9 10 11 .. 43   вперед  Ctrl
Все форумы / Программирование Ответить