DirectX - страница 2

 
Rorschach:

https://www.mql5.com/ru/forum/227736

Перенес в шейдер. Первые 15 секунд работает исходный код на cpu, затем запускается версия на gpu.

"Необходимо перед компиляцией в файле Canvas.mqh перенести массив m_pixels[] из protected: в public:"

хмм. Интересно. Получается одинаковая скорость. Видимо потому, что нет никаких 3D преобразований.

Нужно попробовать с этим кодом.


ЗЫ используйте такую конструкцию, чтобы не исправлять оригинальные библиотеки

#define protected public
#include <Canvas\Canvas.mqh>
#undef protected

ЗЫЗЫ

Ой, нет! Прошу прощения - cделал ошибку в коде и поэтому не заметил, что CPU-часть совсем не выполнялась. Исправил.
Результат - через GPU в 2.5 раза быстрее.

Очень радует. Спасибо большое за данную реализацию. Чуть ее подправил.

Файлы:
 
Rorschach:

https://www.mql5.com/ru/forum/227736

Перенес в шейдер. Первые 15 секунд работает исходный код на cpu, затем запускается версия на gpu.

Интересно с этим кодом сделать тоже самое и посмотреть как меняется выигрыш в производительности в зависимости от усложнения вычислений (увеличения центров гравитации).

В этом коде не используется массив синусов для ускорения работы, а просто вычисляется синус. А также можно менять количество вращающихся гравитационных центров.

Файлы:
Swirl2.mq5  5 kb
 
Nikolai Semko:

Нужно попробовать с этим кодом.

Хочу сделать расчет индикатора полностью на гпу, надо разобраться как такие объемы данных пересылать.

Nikolai Semko:

Результат - через GPU в 2.5 раза быстрее.

Nikolai Semko:

В этом коде не используется массив синусов для ускорения работы, а просто вычисляется синус

XRGB(uchar(128+127*sin(d*45)),uchar(128+127*sin(d*70)),uchar(128+127*sin(d*25)));

Кстати, в шейдере я использую эту формулу, так что ускорение ~10 раз.

Nikolai Semko:

Интересно с этим кодом сделать тоже самое и посмотреть как меняется выигрыш в производительности в зависимости от усложнения вычислений (увеличения центров гравитации).

Попробую сделать.

 
Rorschach:

Хочу сделать расчет индикатора полностью на гпу, надо разобраться как такие объемы данных пересылать.

Кстати, в шейдере я использую эту формулу, так что ускорение ~10 раз.

Попробую сделать.

Думаю результаты должны вдохновить.

Да, это, действительно, очень офигенное дополнение к MQL5! Спасибо команде MQ за это.

Ведь простым включением ресурса в программу можно добиться увеличения производительности математических вычислений в разы благодаря использованию ресурсов видеокарты. При этом разгружается сам процессор. Т.е. для маркета супер вариант.

Причем если для OpenCL нужны определенные действия со стороны пользователя по установке софта, то DirectX уже установлен в Windows по умолчанию. И самое удивительное - я посмотрел на сколько увеличивается ex5 файл при использовании DirectX и не увидел вообще увеличения файла. Очень круто!!! Будем изучать и юзать.

 
Nikolai Semko:

Думаю результаты должны вдохновить.

Да, это, действительно, очень офигенное дополнение к MQL5! Спасибо команде MQ за это.

Ведь простым включением ресурса в программу можно добиться увеличения производительности математических вычислений в разы благодаря использованию ресурсов видеокарты. При этом разгружается сам процессор. Т.е. для маркета супер вариант.

Причем если для OpenCL нужны определенные действия со стороны пользователя по установке софта, то DirectX уже установлен в Windows по умолчанию. И самое удивительное - я посмотрел на сколько увеличивается ex5 файл при использовании DirectX и не увидел вообще увеличения файла. Очень круто!!! Будем изучать и юзать.

Кстати да, DX получается более универсальным, чем OCL. Те же возможности + 3D. Есть режим работы на CPU и не нужно для этого ставить драйвер на проц.

 
Rorschach:

Кстати, в шейдере я использую эту формулу, так что ускорение ~10 раз.

Все таки надо считать 2.5 раза. На цпу оптимизация повлияла, а на гпу нет.

Nikolai Semko:

Интересно с этим кодом сделать тоже самое и посмотреть как меняется выигрыш в производительности в зависимости от усложнения вычислений (увеличения центров гравитации).

В этом коде не используется массив синусов для ускорения работы, а просто вычисляется синус. А также можно менять количество вращающихся гравитационных центров.

Я включил оптимизацию. Код переделал на 3 цикла, чтобы легче было переносить. Ограничение 512 центров. По умолчанию запускается сразу на гпу.

Файлы:
pixel.zip  1 kb
 
Rorschach:

Все таки надо считать 2.5 раза. На цпу оптимизация повлияла, а на гпу нет.

Я включил оптимизацию. Код переделал на 3 цикла, чтобы легче было переносить. Ограничение 512 центров. По умолчанию запускается сразу на гпу.

Спасибо большое!
в 2.5 раза просто на простых вычислениях - тоже очень хороший результат. На 3D, я думаю, будет еще круче результат. 

 
Rorschach:

Все таки надо считать 2.5 раза. На цпу оптимизация повлияла, а на гпу нет.

Я включил оптимизацию. Код переделал на 3 цикла, чтобы легче было переносить. Ограничение 512 центров. По умолчанию запускается сразу на гпу.

Вы просили реализацию на OpenCl. Кое-что получилось. Пардоньте за код, некогда было причёсывать. Главное, что работает.

__kernel void Func(int N, __global double *XP, __global double *YP, __global uchar *h, __global uint *buf)
{
   size_t X = get_global_id(0);
   size_t Width = get_global_size(0);
   size_t Y = get_global_id(1);
   
   float2 p;
   double D=0,S1=0,S2=0;
   
   for(int w=0;w<N;w++){ 
      p.x = XP[w]-X;
      p.y = YP[w]-Y;
      D = fast_length(p);
      S2+=D;
      if(w<N/2)
         S1+=D;
   }   
   //
   double d=S1/S2;
   buf[Y*Width+X] = upsample(upsample((uchar)0xFF,(uchar)h[(int)(d*11520)]),upsample((uchar)h[(int)(d*17920)],(uchar)h[(int)(d*6400)]));
}
Файлы:
Swirl2_OCL.mq5  14 kb
test_002.zip  1 kb
 
Serhii Shevchuk:

Вы просили реализацию на OpenCl. Кое-что получилось. Пардоньте за код, некогда было причёсывать. Главное, что работает.

ВАУ! Вот это да! Неожиданно для меня, признаться честно. Выигрыш более чем в 10 раз с моей скромной видеокартой.
Спасибо большое!

 
Serhii Shevchuk:

Вы просили реализацию на OpenCl. Кое-что получилось. Пардоньте за код, некогда было причёсывать. Главное, что работает.

Большое спасибо!

У вас расчеты в double идут? Тогда результат особенно впечатляющий.
Причина обращения: