Как установить и использовать в расчетах OpenCL

MetaQuotes | 21 июня, 2013

OpenCL в клиентском терминале MetaTrader 5

Прошло уже больше года как стало возможным писать программы для OpenCL в MQL5, и теперь при старте терминала MetaTrader 5 в Журнал выводятся сообщения о найденных устройствах с поддержкой OpenCL, как показано на картинке.

Сообщения в Журнале терминала MetaTrader 5 о найденных OpenCL устройствах

В данном случае терминал MetaTrader 5 определил, что для запуска OpenCL расчетов прямо из MQL5-программы доступно 4 способа: две видеокарты от NVIDIA (OpenCL 1.1) и AMD (OpenCL 1.2), а также на выбор два варианта использования центрального процессора Intel Core-i7 - в зависимости от специально установленного драйвера.

Если на вашем компьютере уже есть подходящее устройство с поддержкой OpenCL версии 1.1 и выше, то можете смело пропускать описание и сразу же переходить к разделу Сравнение производительности, чтобы своими глазами увидеть выигрыш в скорости для задач, допускающих распараллеливание.


OpenCL - это интересно!

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

Все дело в том, что для запуска любой MQL5 программы, использующей OpenCL, необходимо установить соответствующее программное обеспечение. Поэтому многие так и не сумели запустить скрипт расчета фрактала Мандельброта и многие другие программы, представленные на форуме MQL5.community.

В этой статье мы покажем, как установить OpenCL на Ваш персональный компьютер, чтобы Вы смогли лично убедиться в преимуществах использования параллельных вычислений в MQL5. Здесь мы не будем рассматривать подробности написания программ для OpenCL в MQL5 - на эту тему на сайте уже имеются две замечательные статьи:


Что такое OpenCL

OpenCL - это открытый стандарт параллельного программирования, разработанный консорциумом Khronos Group в 2008 году. Этот стандарт позволяет создавать приложения, которые могли бы выполняться параллельно на различных по архитектуре графических (GPU) или центральных (CPU) процессорах, расположенных в некоторой гетерогенной системе.

Другими словами OpenCL позволяет задействовать для вычислений одной задачи все ядра центрального процессора или все вычислительные мощности видеокарты, что, в конечном счете, уменьшает время выполнения программы. И поэтому использование OpenCL является очень полезным для задач, связанных с трудоемкими и ресурсозатратными вычислениями.

Например, применительно к MQL5, увеличение быстродействия может быть очень полезно для некоторого скрипта (индикатора или эксперта), который проводит сложный и длительный анализ исторических данных по нескольким символам и таймфреймам (здесь стоит отметить, что MQL5 программа, претендующая на параллельное исполнение, должна быть написана специальным образом при помощи OpenCL API).


Поддержка OpenCL

Поддержка OpenCL в MQL5 начинается с версии стандарта 1.1, который появился в июне 2010 года. Поэтому, для использования параллельных вычислений, необходимо иметь относительно свежее программное и аппаратное обеспечение, соответствующее этому стандарту.

При всем этом важно отметить, что для использования OpenCL совсем не обязательно иметь видеокарту на Вашем ПК - вполне достаточно будет и наличия центрального процессора. А это значит, что практически каждый пользователь имеет возможность использовать OpenCL для сокращения времени выполнения своих MQL5 программ.

Конечно, по быстродействию распределенных вычислений центральные процессоры значительно уступают своим соперникам из "графического цеха", однако и хорошего многоядерного центрального процессора Вам будет вполне достаточно для получения значительного увеличения быстродействия. Но мы отвлеклись, идем дальше.

Как уже говорилось выше, для параллельных вычислений можно использовать как видеокарты, так и центральные процессоры. На рынке производителей соответствующего устройств есть три основных компании лидера - это Intel, AMD и NVidia. В следующей таблице представлена информация об устройствах и операционных системах, которые поддерживают OpenCL 1.1 для каждого из этих трех производителей:

Производитель Устройства Операционные системы
Intel Процессоры:

Core i3, i5, i7 - для ПК;
Xeon - для серверов;
Xeon Phi - для сопроцессоров (подробнее здесь).
Windows 7, 8;
openSUSE;
Red Hat.
AMD Видеокарты:

AMD Radeon HD Graphics начиная с серии 6400;
ATI Radeon HD Graphics начиная с серии 5400;
ATI FirePro Graphics серии A300, S, W, V;
ATI Mobility Radeon HD начиная с серии 5400;
ATI FirePro M7820 M5800 (подробнее здесь).

Процессоры семейства K8 и старше:

Opteron, Athlon 64, Athlon 64 FX, Athlon 64 X2, Sempron, Turion 64, Turion 64 X2, Phenom, Phenom II (подробнее здесь).

APU (гибридный процессор, включающий в себя центральный и графический процессоры):

Процессоры серий A, C, E, E2, G, R.
Windows Vista SP2, 7, 8;
openSUSE 11.x;
Ubuntu 11.04;
Red Hat 6.x.
NVidia Видеокарты (использующие архитектуру CUDA):

Tesla, Quadro, GeForce (подробнее здесь).
Windows XP, Vista, 7, 8
Linux и Mac OS
(подробнее здесь)
Также на официальном сайте разработчика Khronos Group вы можете ознакомиться с полной информацией о том, какие устройства и софт необходимы для поддержки стандарта OpenCL для каждой из версий.

Проверьте, установлено ли на вашем персональном компьютере хотя бы одно устройство (CPU или GPU) и операционная система, которые поддерживают OpenCL 1.1. Если таковые имеются, то Вы смело можете переходить к следующему параграфу, который описывает процедуру настройки OpenCL в зависимости от производителя аппаратного обеспечения.

 

Настройка OpenCL

Если на Вашем ПК установлено необходимое оборудование и операционная система, то для использования параллельных вычислений в MetaTrader 5 нужно сделать всего один шаг -  настроить OpenCL для одного из Ваших устройств.

Процедура настройки OpenCL различается в зависимости от того какое аппаратное обеспечение Вы собрались использовать - видеокарту или центральный процессор. Если терминал MetaTrader 5 распознал видеокарту с поддержкой OpenCL, то достаточно сделать апдейт ее драйвера до последней версии.

Ставить для центрального процессора специальный комплект средств разработки (SDK) потребуется только в том случае, если на компьютере не установлена подходящая видеокарта.

Важно: Если уже есть установленная видеокарта с поддержкой OpenCL, то ставить софтверную версию для эмуляции OpenCL на центральном процессоре не нужно!

Ну, разве что для проведения экспериментов, так как видеокарты для использования OpenCL имеют безусловное преимущество.

Следующие параграфы описывают процедуру настройки OpenCL в зависимости от производителя. Вы можете перейти сразу на интересующую Вас инструкцию настройки, нажав на соответствующую ссылку:



1. Intel

Для использования OpenCL на процессорах Intel необходимо скачать и установить "Intel SDK for OpenCL Applications". Для этого перейдем на страницу сайта разработчика, с которой это можно сделать.

Рис. 1.1. Страница загрузки Intel SDK для OpenCL.

Рис. 1.1. Страница загрузки Intel SDK для OpenCL.

Здесь представлена общая информация об OpenCL, а также список доступных пакетов для скачивания. Чтобы скачать представленные пакеты нужно нажать на кнопку "Compare and Download Products" в правом верхнем углу страницы.

Рис. 1.2. Информация о доступных пакетах и требованиях для установки.

Рис. 1.2. Информация о доступных пакетах и требованиях для установки.

После нажатия на кнопку появится окошко, в котором будет представлена информация о том, для каких типов процессоров и операционных систем подходят указанные пакеты. Выбираем и загружаем подходящий пакет, нажав на кнопку "Download" над его изображением.

Рис. 1.3. Ссылки для скачивания SDK.

Рис. 1.3. Ссылки для скачивания SDK.

Появится еще одно окошко с ссылками для скачивания - выбираем и загружаем SDK нужной битности. Ждем несколько минут и, после завершения загрузки, запускаем полученный файл. Подтверждаем установку компонентов SDK и распаковываем файлы для установки в один из каталогов.

Рис. 1.4. Начало установки Intel SDK для OpenCL.

Рис. 1.4. Начало установки Intel SDK для OpenCL.

На экране появится окно установки "Intel SDK for OpenCL Applications" с поддержкой OpenCL 1.2. Жмем "Next" и следуем инструкции по установке.

Рис. 1.5. Принятие лицензионного соглашения.

Рис. 1.5. Принятие лицензионного соглашения.

Соглашаемся с условиями лицензионного соглашения. После этого в окне отобразятся компоненты, которые будут установлены - нажимаем "Next" и идем далее.

Рис. 1.6. Интеграция SDK c Visual Studio.

Рис. 1.6. Интеграция SDK c Visual Studio.

Если на Вашем ПК установлена "Microsoft Visual Studio" начиная с 2008 года, то будет предложено провести интеграцию для использования OpenCL также внутри нее. Далее остается лишь выбрать для каких пользователей будут доступны установленные компоненты и путь для установки SDK, после чего нажать "Install".

Рис. 1.7. Процесс установки.

Рис. 1.7. Процесс установки.

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

Рис. 1.8. Завершение установки.

Рис. 1.8. Завершение установки.

 

2.1. Видеокарты и APU от AMD

Для установки OpenCL на видеокарту от AMD обновим ее драйвер до последней версии. Для этого переходим на страницу загрузки драйверов.

Рис. 2.1.1. Страница загрузки драйвера AMD.

Рис. 2.1.1. Страница загрузки драйвера AMD.

Если вы знаете характеристики Вашей видеокарты, то драйвер можно найти, заполнив форму в левой части страницы. После выбора нужных строк из списков, жмем на "Display Results" для поиска подходящего драйвера.

Рис. 2.1.2. Загрузка AMD Catalyst.

Рис. 2.1.2. Загрузка AMD Catalyst.

Система подберет несколько драйверов в наборе "Catalyst Software Suite", в том числе и драйвер для OpenCL. Загружаем "Catalyst" и запускаем полученный файл.

Рис. 2.1.3. Страница загрузки приложения для определения типа видеокарты и версии драйвера.

Рис. 2.1.3. Страница загрузки приложения для определения типа видеокарты и версии драйвера.

Также можно воспользоваться системой автоматического поиска драйверов, нажав на соответствующую ссылку в правом верхнем углу страницы (рис. 2.1.1.). Вам будет предложено загрузить приложение "AMD Driver Autodetect" - делаем это. Затем запускаем загруженное приложение.

Рис. 2.1.4. Приложение для определения и загрузки подходящего драйвера.

Рис. 2.1.4. Приложение для определения и загрузки подходящего драйвера.

Приложение проведет анализ системы и предложит загрузить подходящий драйвер для видеокарты. Загружаем его и запускаем полученный файл. Программа установки предложит выбрать директорию для распаковки файлов - выбираем и нажимаем "Install".

Рис. 2.1.5. Программа установки AMD Catalyst.

Рис. 2.1.5. Программа установки AMD Catalyst.

Появится окошко с лицензионным соглашением - принимаем его. Далее выбираем режим быстрой установки, каталог для установки "AMD Catalyst" и нажимаем далее.

Рис. 2.1.6. Процесс установки.

Рис. 2.1.6. Процесс установки.

Процесс установки займет пару минут, после чего появится уведомление об успешном завершении.

Рис. 2.1.7. Завершение установки.

Рис. 2.1.7. Завершение установки.

 

2.2. Процессоры от AMD

Для установки OpenCL на процессор от AMD необходимо скачать и установить "AMD APP SDK" последней версии. Для этого переходим на следующую страницу на официальном сайте разработчика.

Рис. 2.2.1. Страница загрузки AMD APP SDK.

Рис. 2.2.1. Страница загрузки AMD APP SDK.

На этой странице есть некоторая информация о самом SDK и о том, что представляет собой OpenCL. Нас же интересует ссылка "Go to Downloads" внизу описания - переходим по ней.

Рис. 2.2.2. Таблица доступных для скачивания SDK.

Рис. 2.2.2. Таблица доступных для скачивания SDK.

Внизу открывшейся страницы будет расположена таблица со списком последних версий SDK для разных операционных систем различной битности, а также ссылки для их скачивания. Выбираем подходящую версию, нажав на соответствующую ссылку. Появится страница с лицензионным соглашением -  принимаем его, после чего начнется процесс загрузки.

После запуска загруженного установщика Вам будет предложено распаковать файлы для установки в некоторую директорию. А далее начнется процесс установки уже знакомого нам "AMD Catalyst", содержащего внутри себя "AMD APP SDK" для вашего центрального процессора. Процедуру установки "Катализатора" можно посмотреть на рисунках 2.1.5 - 2.1.7 в пункте 2.1.

 

3. NVidia

Если у Вас имеется видеокарта от NVidia, то для установки OpenCL также необходимо обновить ее драйвер до последней версии. Для этого откроем страницу загрузки драйверов на сайте разработчика.

Рис. 3.1. Страница загрузки драйвера NVidia.

Рис. 3.1. Страница загрузки драйвера NVidia.

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

Рис. 3.2. Загрузка выбранного драйвера.

Рис. 3.2. Загрузка выбранного драйвера.

В автоматическом режиме нужно нажать на "Графические драйверы", после чего вам будет предложено выполнить сканирование вашей системы при помощи java-приложения "GPU_Reader".

Рис. 3.3. Запуск приложения для определения типа видеокарты и версии драйвера.

Рис. 3.3. Запуск приложения для определения типа видеокарты и версии драйвера.

Запускаем приложение, нажав на "Run". Ждем несколько секунд, после чего на странице появится информация о Вашей видеокарте, текущей версии установленного драйвера и версии самого свежего, рекомендованного для установки драйвера. Жмем на "Download" и попадаем на страницу загрузки, показанную на рисунке 3.2.

Рис. 3.4. Результат автоматического определения типа видеокарты и версии драйвера.

Рис. 3.4. Результат автоматического определения типа видеокарты и версии драйвера.

Нажимаем "Загрузить сейчас" и соглашаемся с лицензионным соглашением, нажав на "Принять и скачать".

Рис. 3.5. Принятие лицензионного соглашения и скачивание драйвера.

Рис. 3.5. Принятие лицензионного соглашения и скачивание драйвера.

Таким образом получаем последнюю версию драйвера для видеокарты. Далее запускаем полученный файл - Вам будет предложено распаковать файлы для установки драйвера в один из каталогов. Распаковываем файлы, после чего начинается процесс установки. Сначала нужно еще раз принять лицензионное соглашение.

Рис. 3.6. Принятие лицензионного соглашения на первом этапе установки.

Рис. 3.6. Принятие лицензионного соглашения на первом этапе установки.

Затем выбираем "Экспресс" режим установки и нажимаем "Далее". Дополнительно Вам будет предложено установить утилиту "NVidia Experience" - делать это не обязательно.

Рис. 3.7. Выбор режима установки.

Рис. 3.7. Выбор режима установки.

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

Рис. 3.8. Процесс установки.

Рис. 3.8. Процесс установки.

И всё, драйвер установлен, осталось лишь перезагрузить систему, и Вы сможете использовать OpenCL внутри терминала MetaTrader 5.

Рис. 3.9. Завершение установки.

Рис. 3.9. Завершение установки.

 

Сравнение производительности

Для того чтобы продемонстрировать преимущество использования OpenCL в MQL5, был написан скрипт OpenCL_Sample.mq5, который вычисляет значения функции от двух переменных на некотором множестве и отображает результат в окне графика при помощи графической метки (OBJ_BITMAP_LABEL). Вычисления проводятся двумя способами - с использованием OpenCL и без. Эти блоки оформлены соответственно в функциях WithOpenCL() и WithoutOpenCL():

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//...
   Print("\nРасчеты без OpenCL:");
   WithoutOpenCL(values1,colors1,w,h,size,const_1,const_2);
//--- расчеты с OpenCL
   Print("\nРасчеты с OpenCL:");
   WithOpenCL(values2,colors2,w,h,size,const_1,const_2);
//...
  }
//+------------------------------------------------------------------+
//| Проведение вычислений без использования OpenCL                   |
//+------------------------------------------------------------------+
void WithoutOpenCL(float &values[],uint &colors[],const uint w,const uint h,
                   const uint size,const uint const_1,const uint const_2)
  {
//--- запомним время начала расчетов
   uint x=GetTickCount();
//--- расчет значений функции
   for(uint i=0;i<h;i++)
      for(uint j=0;j<w;j++)
         values[i*w+j]=Func(InpXStart+i*InpXStep,InpYStart+j*InpYStep);
//--- распечатаем время расчета значений функции
   Print("Вычисление значений функции = "+IntegerToString(GetTickCount()-x)+" мс");
//--- определим минимальное значение, и разницу между 
//--- минимальным и максимальным значениями точек множества
   float min,dif;
   GetMinAndDifference(values,size,min,dif);
//--- запомним время начала расчетов
   x=GetTickCount();
//--- расчет цветов для раскраски множества
   uint a;
   for(uint i=0;i<size;i++)
     {
      a=(uint)MathRound(255*(values[i]-min)/dif);
      colors[i]=const_1*(a/16)+const_2*(a%16);
     }
//--- распечатаем время определения цветов для раскраски множества
   Print("Определение цветов раскраски = "+IntegerToString(GetTickCount()-x)+" мс");
  }
//+------------------------------------------------------------------+
//| Проведение вычислений с использованием OpenCL                    |
//+------------------------------------------------------------------+
void WithOpenCL(float &values[],uint &colors[],const uint w,const uint h,
                const uint size,const uint const_1,const uint const_2)
  {
//--- переменные для использования OpenCL
   int cl_ctx;
   int cl_prg;
   int cl_krn_1;
   int cl_krn_2;
   int cl_mem_1;
   int cl_mem_2;
//--- создание контекста для OpenCL (выбор девайса)
   if((cl_ctx=CLContextCreate(CL_USE_ANY))==INVALID_HANDLE)
     {
      Print("OpenCL not found");
      return;
     }
//--- создание программы на основе кода в строке cl_src
   if((cl_prg=CLProgramCreate(cl_ctx,cl_src))==INVALID_HANDLE)
     {
      CLContextFree(cl_ctx);
      Print("OpenCL program create failed");
      return;
     }
//--- создание кернела для расчета значений функции от двух переменных
   if((cl_krn_1=CLKernelCreate(cl_prg,"Func"))==INVALID_HANDLE)
     {
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL kernel_1 create failed");
      return;
     }
//--- кернел для раскраски точек множества на плоскости
   if((cl_krn_2=CLKernelCreate(cl_prg,"Grad"))==INVALID_HANDLE)
     {
      CLKernelFree(cl_krn_1);
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL kernel_2 create failed");
      return;
     }
//--- буфер OpenCL для получения значений функции
   if((cl_mem_1=CLBufferCreate(cl_ctx,size*sizeof(float),CL_MEM_READ_WRITE))==INVALID_HANDLE)
     {
      CLKernelFree(cl_krn_2);
      CLKernelFree(cl_krn_1);
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL buffer create failed");
      return;
     }
//--- буфер OpenCL для получения цветов точек
   if((cl_mem_2=CLBufferCreate(cl_ctx,size*sizeof(uint),CL_MEM_READ_WRITE))==INVALID_HANDLE)
     {
      CLBufferFree(cl_mem_1);
      CLKernelFree(cl_krn_2);
      CLKernelFree(cl_krn_1);
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL buffer create failed");
      return;
     }
//--- запомним время начала расчетов
   uint x=GetTickCount();
//--- массив задает индексы, начиная с которых будут проводиться расчеты 
   uint offset[2]={0,0};
//--- массив задает пределы, до которых будут проводиться расчеты
   uint work[2];
   work[0]=h;
   work[1]=w;
//--- расчет значений функции
//--- передадим значения в кернел
   CLSetKernelArg(cl_krn_1,0,InpXStart);
   CLSetKernelArg(cl_krn_1,1,InpYStart);
   CLSetKernelArg(cl_krn_1,2,InpXStep);
   CLSetKernelArg(cl_krn_1,3,InpYStep);
   CLSetKernelArgMem(cl_krn_1,4,cl_mem_1);
//--- запустим выполнение кернела
   CLExecute(cl_krn_1,2,offset,work);
//--- прочитаем полученные значения в массив
   CLBufferRead(cl_mem_1,values);
//--- распечатаем время расчета значений функции
   Print("Вычисление значений функции = "+IntegerToString(GetTickCount()-x)+" мс");
//--- определим минимальное значение, и разницу между 
//--- минимальным и максимальным значениями точек множества
   float min,dif;
   GetMinAndDifference(values,size,min,dif);
//--- запомним время начала расчетов
   x=GetTickCount();
//--- зададим пределы для вычислений
   uint offset2[1]={0};
   uint work2[1];
   work2[0]=size;
//--- расчет цветов для раскраски множества
//--- передадим значения в кернел
   CLSetKernelArg(cl_krn_2,0,min);
   CLSetKernelArg(cl_krn_2,1,dif);
   CLSetKernelArg(cl_krn_2,2,const_1);
   CLSetKernelArg(cl_krn_2,3,const_2);
   CLSetKernelArgMem(cl_krn_2,4,cl_mem_1);
   CLSetKernelArgMem(cl_krn_2,5,cl_mem_2);
//--- запустим выполнение кернела
   CLExecute(cl_krn_2,1,offset2,work2);
//--- прочитаем полученные значения в массив
   CLBufferRead(cl_mem_2,colors);
//--- распечатаем время определения цветов для раскраски множества
   Print("Определение цветов раскраски = "+IntegerToString(GetTickCount()-x)+" мс");
//--- удаление объектов OpenCL
   CLBufferFree(cl_mem_1);
   CLBufferFree(cl_mem_2);
   CLKernelFree(cl_krn_1);
   CLKernelFree(cl_krn_2);
   CLProgramFree(cl_prg);
   CLContextFree(cl_ctx);
  }

После выполнения скрипта, в окне графика на несколько секунд появится раскрашенное множество значений функции. Каждому из них сопоставляется один из тонов цвета, выбранного во входных параметрах (красный, зеленый или синий).

Результат работы скрипта для множества точек плоскости от -22 до 22 с шагом 0.1.

Результат работы скрипта для множества точек плоскости от -22 до 22 с шагом 0.1.

Помимо самой картинки в журнал "Эксперты" выводится время расчета функций каждым из способов, что позволяет легко убедиться в преимуществе и целесообразности использования OpenCL в MQL5. Увеличим значение шага и получим результаты работы скрипта:

Расчет значений функции и их раскраска двумя способами.

Расчет значений функции и их раскраска двумя способами.

Суммарное время расчета функций на CPU с OpenCL уменьшилось более чем в 5 раз, а ведь это еще далеко не предел! Хорошо известно, что расчеты на современных видеокартах с поддержкой OpenCL выполняются на порядок быстрее, чем на процессорах. Этот факт хорошо отражают результаты выполнения скрипта на разных устройствах с OpenCL, представленные в следующей таблице:

Устройство с OpenCL
Время выполнения без OpenCL в миллисекундах
Время выполнения с OpenCL в миллисекундах
Выигрыш
AMD Radeon HD 7970 20 361 мс
171 мс
 119.07 раз
NVidia GeForce GT 630
24 742 мс
578 мс
 42.8 раз
Intel Core i5 430M
27 222 мс
5 428 мс
 5.01 раз
AMD Athlon X2 Dual-Core QL-65
45 723 мс
9 516 мс  4.8 раз

Как видно, использование OpenCL на топовой видеокарте от AMD привело к сокращению времени расчетов более чем в 100 раз! Не менее значимы результаты и на чуть более старой видеокарте GeForce GT 630 от 2011 года - здесь разница во времени в 42 раза. Процессоры от Intel и AMD замыкают таблицу, однако достигаемое на них ускорение будет также очень и очень полезным для расчетов сложных задач.

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