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

Откуда:
Сообщений: 30895
mayton
Изопропил, ого букв. А можно какой-то анализ с каментами по поводу профилирования?

буквы - самодокументированы, если что по gprof - материалов выше крыши

краткий анализ - основные затраты времени - в tracer
самые популярная операции - скалярное произведение и сложение ,
gcc - сам справляется(излишние телодвижения ему только мешают), а остальным поможет их заиинлайнить руками.
нормирование - внутри условия, исполняется редко, можно не трогать.
                        Vector vp = new Vector(o.x-k,o.y,o.z-j-4);//o + new Vector(-k, 0, -j - 4);
                        Double b = vp.x * d.x + vp.y * d.y + vp.z * d.z;//vp % d;
                        //Double c = vp.x * vp.x + vp.y * vp.y + vp.z * vp.z - 1; //vp % vp - 1;
                        Double q = b * b - (vp.x * vp.x + vp.y * vp.y + vp.z * vp.z) + 1;  //b*b-c;
6 сен 15, 18:16    [18115429]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 3773
mayton
По поводу Pascal. Нужны скриптики для сборки. И инструкция. Какое ПО надо ставить.
Какие ключики компилляции.

По поводу js. Тоже самое.

какая система предполагается, win?
установка fpc от системы зависит, под современными дистрами linuх, вроде входит в большинство дистрибутивов
здесь можно скачать последний релиз

сборка под текущую платформу
fpc
fpc -CX -O3 -XX -vewnhi -Fi. -Fu. -FU. card_raytracer.lpr
6 сен 15, 18:23    [18115436]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Изопропил
Member

Откуда:
Сообщений: 30895
По поводу Java - версии - при замене операций на методы - имена человеческие методам дайте -
dotProduct, crossProduct, normalize
(калька с целочисленных - диковато выглядит)
6 сен 15, 18:29    [18115450]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 3773
Dima T
Вникаю постепенно в суть, задача очень хорошо параллелится. Интересно было бы оценить решение на GPU (CUDA, OpenCL). Может кто попробует?

очень плохо получается, GPU плохо "на поворотах" идёт, а тут их много
Intel вроде как спонсирует исследования этих алгоритмов, что-бы получить хорошее обоснование на многоядерность центрального процессора
6 сен 15, 18:34    [18115456]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
mayton
Member

Откуда: loopback
Сообщений: 38329
Изопропил
Double b = vp.x * d.x + vp.y * d.y + vp.z * d.z;

Насколько я понимаю, данную операцию можно представить как
почленное умножение учетверённых слов в формате floating point

QWORD-1 * QWORD-2, QWORD-3 * QWORD-4, QWORD-5 * QWORD-6, QWORD-7 * QWORD-8

с последующим сложением 4х QWORDS-s при условии что 4-й член всегда будет равен 0.

Если компиллятор просекает этот момент то од по идее может заюзать 2 команды из
набора SSE1/2/3/4.

Я не уверен на 100% что такие команды (для floating point) существуют в наборе
но пускай знающие меня поправят если что.
6 сен 15, 18:34    [18115457]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
mayton
Member

Откуда: loopback
Сообщений: 38329
kealon(Ruslan)
какая система предполагается, win?
установка fpc от системы зависит, под современными дистрами linuх, вроде входит в большинство дистрибутивов
здесь можно скачать последний релиз

сборка под текущую платформу
fpc
fpc -CX -O3 -XX -vewnhi -Fi. -Fu. -FU. card_raytracer.lpr

Win или не win я не знаю пока. У кого - что. У меня есть виртуалка с CentOS.
Кое-что могу попробовать но не обещаю что будет быстро.
6 сен 15, 18:45    [18115487]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 3773
хороший пост, стоит почитать
6 сен 15, 19:17    [18115556]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Dima T
Member

Откуда:
Сообщений: 13027
Ускорил C# сменой синтаксиса с 30 до 17 сек (оригинал на С++ 14 сек).
Дальше начинается какая-то мистика, в коде есть отладочные счетчики, хотел их выкинуть, но без них 19 сек.
Зафиксировал с ними. Кто будет тестить, попробуйте закаментить эти строки и сравните время (у меня +2 сек. без них)
        static void Main(string[] args) {
...
            Console.WriteLine("cntAdd = {0}", Vector.cntAdd);
            Console.WriteLine("cntMul = {0}", Vector.cntMul);

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

Откуда: loopback
Сообщений: 38329
Dima T, с тебя тоже сборочный скриптик для шарпов.
6 сен 15, 20:01    [18115751]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Изопропил
Member

Откуда:
Сообщений: 30895
Dima T,

        public void Not()
        {
            Double l = Math.Sqrt(x * x + y * y + z * z);
            x /= l;
            y /= l;
            z /= l;
        }

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

Откуда:
Сообщений: 673
Dima T
Это затестить не смог
[MethodImpl(MethodImplOptions.AggressiveInlining)]

Затести насколько эта строчка влияет.

Укажи пространство имён:
using System.Runtime.CompilerServices;

У меня совершенно не влияет. Поэтому можно не заморачиваться.
Хотя, это как компилятор решит, встраивать метод или нет.

Dima T
Console.WriteLine("cntAdd = {0}", Vector.cntAdd);
Console.WriteLine("cntMul = {0}", Vector.cntMul);

String.Format работает очень медленно. Потому что в рантайме происходит парсинг строки, поиск мест вставки, потом строка собирается...
В данном случае банальная конкатенация будет быстрее:
"cntAdd = " + Vector.cntAdd

Или можно так:
Console.Write("cntAdd = ");
Console.WriteLine(Vector.cntAdd);
6 сен 15, 20:12    [18115826]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Dima T
Member

Откуда:
Сообщений: 13027
mayton
Dima T, с тебя тоже сборочный скриптик для шарпов.

Добавил файлы проекта. В C# 2010 с ними компилируется (нажать F6). Как оно пойдет в других версиях не знаю.
6 сен 15, 20:13    [18115831]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
petalvik
Member

Откуда:
Сообщений: 673
mayton
Но задачу с мультипоточностью хотелось бы изучить потом. Когда получим хотя-бы данные по нашим
однопоточным процессам.

Поддерживаю. Многопоточку и IO лучше отложить на потом.
6 сен 15, 20:14    [18115842]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Dima T
Member

Откуда:
Сообщений: 13027
Изопропил
какова семантика "Not"?

не понял вопроса.
Исходно было:
	Vector operator!() {
		return *this * (1 / sqrt(*this % *this));
	}

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

Откуда: loopback
Сообщений: 38329
Изопропил
Dima T,

        public void Not()
        {
            Double l = Math.Sqrt(x * x + y * y + z * z);
            x /= l;
            y /= l;
            z /= l;
        }

какова семантика "Not"?

Расчитываем длину вектора l по пифагору. Потом каждую из компонент вектора делим на длину.
Эээ... по сути получаем малюсенький вектор коллинеарный (совпадающий по направлению в пространстве)
предыдущему но который имеет единичную длину.

На самом деле никакой это не Not. Это я ошибся выбрав название исходя из восклицательного
знака в сях.
6 сен 15, 20:18    [18115859]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Dima T
Member

Откуда:
Сообщений: 13027
petalvik
Dima T
Это затестить не смог
[MethodImpl(MethodImplOptions.AggressiveInlining)]

Затести насколько эта строчка влияет.

Укажи пространство имён:
using System.Runtime.CompilerServices;

В MSDN смотрел, нет AggressiveInlining для .Net 4.0.
В 4.5 появилось

petalvik
Dima T
Console.WriteLine("cntAdd = {0}", Vector.cntAdd);
Console.WriteLine("cntMul = {0}", Vector.cntMul);

String.Format работает очень медленно. Потому что в рантайме происходит парсинг строки, поиск мест вставки, потом строка собирается...

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

Откуда:
Сообщений: 30895
Dima T
переписал по образу и подобию.

и абсолютно бездумно.

в данном случае - это не отрицание, а нормализация вектора

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

Откуда: loopback
Сообщений: 38329
Dima T
mayton
Dima T, с тебя тоже сборочный скриптик дaля шарпов.

Добавил файлы проекта. В C# 2010 с ними компилируется (нажать F6). Как оно пойдет в других версиях не знаю.

Хм.. это зря. Я думал ты найдешь консольный сценарий сборки. Вроде в старых ВижуалСтудиях это было возможно.
Не хотелось тащить в SVN зависимости от сред. Я-то сам собираю Java-порт в IntellijIdea но публикую только
maven-сценарий.
6 сен 15, 20:21    [18115872]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
mayton
Member

Откуда: loopback
Сообщений: 38329
Изопропил
Dima T
переписал по образу и подобию.

и абсолютно бездумно.

в данном случае - это не отрицание, а нормализация вектора

--------------------------------
минимум два человека приступили к кодированию не обращая внимания на алгоритм.
тоже подход.

Коллеги. Это завтык. Давайте переименуем not() в norm() во всех проектах.
6 сен 15, 20:22    [18115878]     Ответить | Цитировать Сообщить модератору
 Re: Тяпничный бенчмарк CPU (part-1)  [new]
Изопропил
Member

Откуда:
Сообщений: 30895
petalvik
String.Format работает очень медленно. Потому что в рантайме происходит парсинг строки, поиск мест вставки, потом строка собирается...
В данном случае банальная конкатенация будет быстрее:
"cntAdd = " + Vector.cntAdd


Или можно так:
Console.Write("cntAdd = ");
Console.WriteLine(Vector.cntAdd);

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

Откуда:
Сообщений: 30895
mayton
Коллеги. Это завтык. Давайте переименуем not() в norm() во всех проектах.

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

Откуда:
Сообщений: 13027
Изопропил
в данном случае - это не отрицание, а нормализация вектора

Если претензия к замене оператора ! на метод Not(). То да, имя взято от ! без вдумывания что там в коде. Если честно я не понял что там.
ТЗ было:
mayton
  • При портировании Card-raytraсer можно в принципе менять код для удобства воспроизведения
    в конкретном ЯП. Можно менять типы float -> double, юзать другие структуры данных и дженерики
    с шаблонами. Единственное ограничение - алгоритм а в особенности его сложность
    должны остаться без изменения.
    ...

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

    Откуда: loopback
    Сообщений: 38329
    Изопропил
    mayton
    Коллеги. Это завтык. Давайте переименуем not() в norm() во всех проектах.

    dotProduct, crossProduct - заодно, пожалуйста

    Эээ... не против но ... как-то длинно. После инфиксной формы все выражения
    стали в километр.

    Может просто prod и vprod (sprod). Скалярное и векторное. ?
    6 сен 15, 20:31    [18115926]     Ответить | Цитировать Сообщить модератору
     Re: Тяпничный бенчмарк CPU (part-1)  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13027
    mayton
    Хм.. это зря. Я думал ты найдешь консольный сценарий сборки.

    Поищу. Я C# знаю на уровне чайника, а ты такие сложные вопросы задаешь :)
    6 сен 15, 20:33    [18115934]     Ответить | Цитировать Сообщить модератору
     Re: Тяпничный бенчмарк CPU (part-1)  [new]
    Кузнецов Евгений
    Guest
    mayton
    Насколько я понимаю, данную операцию можно представить как
    почленное умножение учетверённых слов в формате floating point


    1) Регистры SSE - 128 бит, т.е. 4 double не получится одновременно обработать. В AVX, наверное, можно, но это относительно новая технология
    2) SSE можно только в unmanaged - т.е создаем преимущество для С++
    3) Команды для вычисления скалярного произведения для float/double есть в SSE 4.1 - _mm_dp_ps/_mm_dp_pd тынц
    SSE 4.1 для AMD поддерживается только в новых процессорах, что вредит универсальности теста.
    6 сен 15, 20:35    [18115946]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7 8 9 10 .. 41   вперед  Ctrl
    Все форумы / Программирование Ответить