Hesaplamalar için OpenCL Nasıl Yüklenir ve Kullanılır?

MetaQuotes | 13 Ocak, 2022

MetaTrader 5 İstemci Terminalinde OpenCL

MQL5'te OpenCL için program yazmanın mümkün hale gelmesinin üzerinden bir yıl geçti. Bulunan herhangi bir OpenCL aygıtının girişleri artık aşağıda gösterildiği gibi MetaTrader 5 terminal açılışında Günlükte görülebilir.

Bulunan OpenCL cihazlarına ilişkin MetaTrader 5 terminalindeki günlük girişleri

Bu durumda, MetaTrader 5 terminali, OpenCL'yi doğrudan bir MQL5 programından başlatmak için kullanılabilen 4 yöntem algılamıştır: NVIDIA'dan (OpenCL 1.1) ve AMD'den (OpenCL 1.2) bir grafik kartı ve yüklü sürücüye bağlı olarak iki Intel Core-i7 CPU yardımcı program seçeneği. Bilgisayarınıza halihazırda uygun bir OpenCL aygıtı sürüm 1.1 veya daha üzeri varsa, açıklama kısmını güvenli bir şekilde geçebilir ve paralel hesaplamaya olanak sağlayan görevler için performans kazanımınızı görebilmek için doğrudan Performans Karşılaştırması bölümüne ilerleyebilirsiniz.


OpenCL Büyüleyici!

Ancak pek çok kullanıcı, sunulan yeni imkanların farkında olmadıkları ve gerekli bilgiye sahip olmadıkları için Uzman Danışmanlarında, göstergelerinde veya betiklerinde paralel hesaplama kullanmanın avantajından yararlanmamıştır.

Mesele şu ki, OpenCL kullanan herhangi bir MQL5 programının başlatılması uygun yazılımın yüklenmesini gerektirir. Bu nedenle, birçok kullanıcı Mandelbrot set betiği ve MQL5.community forumunda bulunan diğer birçok programı çalıştıramamıştır.

Bu makalede, MQL5'te paralel hesaplama kullanma avantajlarını ilk elden görebilmeniz için bilgisayarınıza OpenCL'yi nasıl yükleyeceğinizi göstereceğiz. Web sitesinde halihazırda bu konuyu kapsayan iki harika makale yer aldığından, MQL5'te OpenCL için program yazmanın ayrıntılarını değerlendirmeyeceğiz:


OpenCL nedir?

OpenCL, 2008'de Khronos Group konsorsiyumu tarafından geliştirilen paralel programlama için açık standarttır. Bu standart, heterojen bir sistemde farklı mimariye sahip GPU'lar veya CPU'lar üzerinde paralel olarak çalıştırılabilen uygulamalar geliştirmenize olanak sağlar.

Diğer bir deyişle, OpenCL, bir görevi hesaplarken tüm CPU çekirdeklerini veya GPU'nun muazzam bilgi işlem kapasitesini kullanmayı mümkün kılarak program yürütme süresini azaltır. Bu nedenle, zahmetli ve kaynak tüketen hesaplamalarla ilişkili görevler ile uğraşırken OpenCL kullanımı oldukça faydalıdır.

Örneğin, MQL5'ten bahsetmişken, birkaç sembol ve zaman aralığı ile geçmiş verilerin karmaşık ve uzun bir analizini gerçekleştiren belirli bir betiği (gösterge veya Uzman Danışman) kullanırken performans kazanımı oldukça ödüllendirici olabilir (burada, paralel yürütme yapması amaçlanan bir MQL5 programının OpenCL API kullanılarak özel bir şekilde yazılması gerektiği unutulmamalıdır).


OpenCL Desteği

MQL5'te OpenCL desteği, Haziran 2010'da yayınlanan 1.1 sürümünden itibaren sağlanmaktadır. Dolayısıyla, paralel hesaplamayı kullanmak için, standarda uygun nispeten yeni bir yazılım ve donanımınız olması gerekir.

Bununla birlikte, OpenCL kullanmaya başlamak için, PC'nizde bir grafik kartının olup olmamasının gerçekten önemli olmadığına dikkat edilmelidir - bir CPU da iş görecektir. Bu, OpenCL'nin, MQL5 programlarının yürütme süresini kısaltmak isteyen hemen hemen her kullanıcı için kullanılabilir olduğu anlamına gelir.

CPU'lar, dağıtılmış bilgi işlem hızı açısından grafik rakiplerinin kesinlikle çok gerisindedir. Ancak, iyi bir çok çekirdekli CPU, önemli bir hız artışı elde etmede gayet iyi iş görmelidir. Ancak, tartışmamızın konusuna geri dönelim.

Daha önce belirtildiği gibi, paralel bilgi işlem için hem grafik kartlarını hem de CPU'ları kullanabilirsiniz. Piyasada ilgili cihazların üç büyük üreticisi vardır: Intel, AMD ve NVidia. Aşağıdaki tablo, üç üreticinin her biri için OpenCL 1.1'i destekleyen cihazlar ve işletim sistemlerine dair bilgi sağlar:

Üretici Cihazlar İşletim Sistemleri
Intel CPU'lar:

Core i3, i5, i7 - PC'ler için;
Xeon - sunucular için;
Xeon Phi - yardımcı işlemciler için (devamını oku).
Windows 7, 8;
openSUSE;
Red Hat.
AMD Grafik Kartları:

6400 serisi ve üzeri AMD Radeon HD Graphics;
5400 serisi ve üzeri ATI Radeon HD Graphics;
ATI FirePro Graphics A300, S, W, V serisi;
5400 serisi ve üzeri ATI Mobility Radeon HD;
ATI FirePro M7820 M5800 (devamını oku).

K8 mimarisi ve daha üzeri temelli CPU'lar:

Opteron, Athlon 64, Athlon 64 FX, Athlon 64 X2, Sempron, Turion 64, Turion 64 X2, Phenom, Phenom II (devamını oku).

APU (hibrit CPU/GPU işlemcisi):

CPU serisi A, C, E, E2, G, R.
Windows Vista SP2, 7, 8;
openSUSE 11.x;
Ubuntu 11.04;
Red Hat 6.x.
NVidia GPU'lar (CUDA Mimarisi ile):

Tesla, Quadro, GeForce (devamını oku).
Windows XP, Vista, 7, 8
Linux ve Mac OS
(devamını oku)
Ayrıca, Khronos Group geliştiricisinin resmi web sitesi , her bir OpenCL sürümü için gerekli donanım ve yazılıma dair tam bilgi sağlamaktadır.

Bilgisayarınızda en az bir aygıt (CPU veya GPU) bulunduğundan emin olun ve bu aygıtın ve yüklenmiş işletim sisteminin OpenCL 1.1'i destekleyip desteklemediğini kontrol edin. Bu gereklilikler karşılanırsa, donanım üreticisine bağlı olarak OpenCL'nin nasıl yükleneceğini açıklayan sonraki bölüme güvenle geçebilirsiniz.

 

OpenCL'yi Kurma

Bilgisayarınızda gerekli donanım ve yazılımlar yüklüyse MetaTrader 5'te paralel bilgi işlemi kullanmaya başlamak için tek yapmanız gereken OpenCL'yi cihazlarınızdan biri için kurmaktır.

OpenCL kurulum prosedürü, kullanmayı düşündüğünüz donanıma - GPU veya CPU - göre değişiklik gösterir. MetaTrader 5 terminali OpenCL destekli bir grafik kartı bulmuşsa, bunun sürücülerini en son sürüme güncellemeniz yeterlidir.

Yalnızca bilgisayarınızda uygun grafik kartı yoksa CPU için bir SDK yüklemeniz gerekecektir.

Önemli: OpenCL desteği yüklü bir grafik kartınız halihazırda varsa, CPU üzerinde OpenCL öykünmesi için bir yazılım sürümü yüklemeniz gerekmez!

Denemeler için gerekli olmadıkça, OpenCL için grafik kartları tartışılmaz avantajlar sunar.

Aşağıdaki paragraflar, üreticiye bağlı olarak OpenCL kurulum prosedürünü açıklamaktadır. İlgili bağlantıyı kullanarak ilgili kurulum talimatlarına gidebilirsiniz:



1. Intel

OpenCL'yi Intel CPU'lar üzerinde kullanabilmek için, OpenCL Uygulamaları için Intel SDK indirmeniz ve yüklemeniz gerekir. Bunun için, resmi geliştirici indirme sayfasına gidin.

Şekil 1.1. OpenCL için Intel SDK indirme sayfası.

Şekil 1.1. OpenCL için Intel SDK indirme sayfası.

Burada, OpenCL hakkında genel bilgilerin yanı sıra indirilebilecek ürünlerin listesini bulabilirsiniz. Kullanılabilir ürünleri indirmek için, sayfanın sağ üst köşesindeki Ürünleri Karşılaştır ve İndir düğmesine tıklayın.

Şekil 1.2. Kullanılabilir ürünler ve yükleme gerekliliklerine dair bilgiler.

Şekil 1.2. Kullanılabilir ürünler ve yükleme gerekliliklerine dair bilgiler.

Tıklamanın ardından, desteklenen işlemci türleri ve işletim sistemleri ile ilgili ürün gerekliliklerine dair bilgi içeren bir pencere göreceksiniz. Ürün simgesinin üzerindeki İndir düğmesine tıklayarak uygun bir ürünü seçin ve indirin.

Şekil 1.3. SDK indirme bağlantıları

Şekil 1.3. SDK indirme bağlantıları

İndirme bağlantılarını içeren başka bir pencere açılacaktır. 32 bit veya 64 bit SDK'yi seçin ve indirin. Birkaç dakika bekleyin ve indirme tamamlandığında elde edilen dosyayı çalıştırın. SDK bileşenlerinin yüklemesini onaylayın ve dosyaları klasörlerden birine çıkarın.

Şekil 1.4. OpenCL için Intel SDK yüklemesini başlatma.

Şekil 1.4. OpenCL için Intel SDK yüklemesini başlatma.

OpenCL 1.2 desteği ile OpenCL Uygulamaları için Intel SDK yazısı bulunan yükleme sayfasını göreceksiniz. Sonraki düğmesine tıklayın ve yükleme talimatlarını izleyin.

Şekil 1.5. Son Kullanıcı Lisans Sözleşmesini Kabul Etme.

Şekil 1.5. Son Kullanıcı Lisans Sözleşmesini Kabul Etme.

Lisans Sözleşmesi hüküm ve koşullarını kabul etme. Bunun ardından yüklenecek bileşenler pencerede görüntülenecektir: Devam etmek için Sonraki düğmesine tıklayın.

Şekil 1.6. SDK'nin Visual Studio ile entegrasyonu.

Şekil 1.6. SDK'nin Visual Studio ile entegrasyonu.

Microsoft Visual Studio 2008 yazılımı (veya sonraki sürümleri) PC'nizde halihazırda varsa, OpenCL için bununla entegrasyon yapmanız istenecektir. Daha sonra, yalnızca yüklü bileşenlere erişebilecek kullanıcıları seçmeniz, SDK yükleme konumunu belirtmeniz ve Yükle seçeneğine tıklamanız gerekir.

Şekil 1.7. Yükleme.

Şekil 1.7. Yükleme.

Yükleme birkaç dakika alacak. Başarıyla tamamlandığında sonucu ekranda göreceksiniz. Yükleme sürecini tamamlamak için Bitir düğmesine tıklayın.

Şekil 1.8. Yüklemeyi tamamlama.

Şekil 1.8. Yüklemeyi tamamlama.

 

2.1. AMD Grafik Kartları ve APU

Bir AMD grafik kartı için OpenCL yüklemek için, bunun sürücüsünü mevcut en son sürüme güncelleyelim. Bu, sürücü indirme sayfasından yapılabilir.

Şekil 2.1.1. AMD sürücü indirme sayfası.

Şekil 2.1.1. AMD sürücü indirme sayfası.

Grafik kartınızın özelliklerini biliyorsanız, sürücü, sayfanın sol tarafında bulunan formun doldurulması ile kolaylıkla bulunabilir. Form alanlarının tamamında gerekli seçenekleri seçtikten sonra, uygun sürücüyü bulmak için Sonuçları görüntüle seçeneğine tıklayın.

Şekil 2.1.2. AMD Catalyst indirme.

Şekil 2.1.2. AMD Catalyst indirme.

Sistem, Catalyst Yazılım Paketinde OpenCL sürücüsü dahil olmak üzere birkaç sürücü sunacaktır. Catalyst'i indirin ve elde edilen dosyayı çalıştırın.

Şekil 2.1.3. Grafik kartı türü ve sürücü sürümünün tanımlanması için uygulama indirme sayfası.

Şekil 2.1.3. Grafik kartı türü ve sürücü sürümünün tanımlanması için uygulama indirme sayfası.

Sayfanın sağ üst köşesindeki ilgili bağlantıya tıklayarak Otomatik Sürücü Bulma sistemini de kullanabilirsiniz (Şekil 2.1.1.). AMD Otomatik Sürücü Bulma uygulamasını indirmeniz istenecektir; bunu yapın ve uygulamayı başlatın.

Şekil 2.1.4. Uygun sürücüyü algılama ve indirme uygulaması.

Şekil 2.1.4. Uygun sürücüyü algılama ve indirme uygulaması.

Uygulama, sistemi analiz edecek ve size uygun grafik kartı sürücüsünü indirmenizi önerecektir. Bunu indirin ve elde edilen dosyayı çalıştırın. Yükleme Yöneticisi, dosyaları çıkarmak için klasör seçmenizi isteyecektir; seçim yapın ve Yükle seçeneğine tıklayın.

Şekil 2.1.5. AMD Catalyst Yükleme Yöneticisi.

Şekil 2.1.5. AMD Catalyst Yükleme Yöneticisi.

Son Kullanıcı Lisans Sözleşmesi bir açılır pencerede görünecektir. Şartlarını ve koşullarını kabul etmelisiniz. Ayrıca Hızlı yüklemeyi seçiyoruz, AMD Catalyst yükleme konumunu belirtiyoruz ve İleri seçeneğine tıklıyoruz.

Şekil 2.1.6. Yükleme.

Şekil 2.1.6. Yükleme.

Yükleme birkaç dakika alacak. Tamamlandığında, ekranda ilgili mesajı göreceksiniz.

Şekil 2.1.7. Yüklemeyi tamamlama.

Şekil 2.1.7. Yüklemeyi tamamlama.

 

2.2. AMD CPU'lar

Bir AMD CPU için OpenCL'yi yüklemek için AMD APP SDK'nin son sürümünü indirip yüklemeniz gerekir. Bunun için, geliştiricinin resmi web sitesindeki aşağıdaki sayfaya gidin.

Şekil 2.2.1. AMD APP SDK indirme sayfası.

Şekil 2.2.1. AMD APP SDK indirme sayfası.

Bu sayfa SDK'ye dair bu şekilde bazı bilgiler sağlar ve OpenCL hakkında genel bir fikir verir. Burada ihtiyacımız olan, açıklamanın altında bulunan İndirmelere Git bağlantısını bulup tıklamaktır.

Şekil 2.2.2. İndirilebilir SDK'ler tablosu.

Şekil 2.2.2. İndirilebilir SDK'ler tablosu.

Sayfanın alt kısmında, 32 bit veya 64 bit olmak üzere çeşitli işletim sistemleri için en son SDK sürümlerinin bir listesini ve indirme bağlantılarını içeren bir tablo göreceksiniz. İlgili bağlantıya tıklayarak gerekli sürümü seçin. Son Kullanıcı Lisans Sözleşmesinin bulunduğu sayfaya yönlendirileceksiniz. İndirmeyi başlatmak için sözleşmeyi kabul edin.

İndirilen yükleyiciyi çalıştırdıktan sonra, yükleme dosyalarını bir klasöre çıkarmanız istenecektir. Bunu da, CPU'nuz için AMD APP SDK içeren yukarıda açıklanan AMD Catalyst yüklemesi izleyecektir. Catalyst yükleme prosedürü, yukarıdaki bölüm 2.1'de Şekil 2.1.5 - 2.1.7'de gösterilmektedir.

 

3. NVidia

Bir NVidia grafik kartınız varsa, OpenCL'yi yükleyebilmek için sürücüsünü en son sürüme güncellemelisiniz. Bunu, geliştirici web sitesindeki sürücü indirme sayfasından indirebilirsiniz.

Şekil 3.1. NVidia sürücüsü indirme sayfası.

Şekil 3.1. NVidia sürücüsü indirme sayfası.

Bu sayfa, gerekli sürücüyü manuel veya otomatik olarak bulma seçenekleri sunar. Manuel seçeneğini kullandığınızda, ürün türünü, serisini ve işletim sistemini seçmeniz ve Ara seçeneğine tıklamanız gerekir. Sistem, grafik kartınıza uygun en son sürücüyü bulacak ve sizden bunu indirmenizi isteyecektir.

Şekil 3.2. Seçilen sürücüyü indirme.

Şekil 3.2. Seçilen sürücüyü indirme.

2. seçeneği seçerseniz,Grafik Sürücüleri seçeneğine tıklamanız gerekir, burada GPU_Reader Java uygulamasını kullanarak sisteminizi taramanız istenecektir.

Şekil 3.3. Grafik kartı türü ve sürücü sürümünü tanımlamak için uygulamayı çalıştırma.

Şekil 3.3. Grafik kartı türü ve sürücü sürümünü tanımlamak için uygulamayı çalıştırma.

Çalıştır seçeneğine tıklayarak uygulamayı çalıştırın. Grafik kartındaki bilgileri, yüklü sürücünün güncel sürümünü ve önerilen en son sürücü sürümünü görebilmek için birkaç saniye bekleyin. Şekil 3.2'de gösterilen indirme sayfasına yönlendirilmek için İndir seçeneğini tıklayın.

Şekil 3.4.Grafik kartı türü ve sürücü sürümünün otomatik tanımlama sonuçları.

Şekil 3.4. Grafik kartı türü ve sürücü sürümünün otomatik tanımlama sonuçları.

Şimdi İndir seçeneğine tıklayın ve Kabul Et ve İndir düğmesine tıklayarak NVidia Yazılımı Lisans Sözleşmesini kabul edin.

Şekil 3.5. Lisans Sözleşmesini kabul etme ve sürücüyü indirme.

Şekil 3.5. Lisans Sözleşmesini kabul etme ve sürücüyü indirme.

Böylece, grafik kartı için en son sürücü sürümünü elde ederiz. Ardından elde edilen dosyayı çalıştırıyoruz; sürücü yükleme dosyalarını klasörlerden birine çıkarmanız istenecektir. Yükleme, dosyaların çıkarılmasının ardından başlayacaktır. İlk olarak, NVidia Yazılımı Lisans Sözleşmesinin hüküm ve koşullarını bir kez daha kabul etmeniz gerekir.

Şekil 3.6. İlk yükleme aşamasında Lisans Sözleşmesini Kabul Etme.

Şekil 3.6. İlk Yükleme Aşamasında Lisans Sözleşmesini Kabul Etme.

Ardından Hızlı yükleme seçeneğini seçin ve Sonraki seçeneğine tıklayın. Ek olarak, isteğe bağlı olarak NVidia Experience eklenti programını yükleme imkanı sunulacaktır.

Şekil 3.7. Yükleme seçeneğini seçme.

Şekil 3.7. Yükleme seçeneğini seçme.

Sürücü yükleme bundan hemen sonra NVidia'nın en son gelişmelerinin reklamları eşliğinde başlayacaktır.

Şekil 3.8. Yükleme.

Şekil 3.8. Yükleme.

Hepsi bu! Sürücü yüklenmiştir ve MetaTrader 5 terminalinde OpenCL'yi kullanabilmek için sistemi yeniden başlatmamız yeterlidir.

Şekil 3.9. Yüklemeyi tamamlama.

Şekil 3.9. Yüklemeyi tamamlama.

 

Performans Karşılaştırma

OpenCL_Sample.mq5, MQL5'te OpenCL kullanmanın avantajlarını göstermek amacıyla yazılmıştır. Bu, bir kümedeki iki değişkenin fonksiyon değerlerini hesaplar ve sonuçları bir grafik etiketi (OBJ_BITMAP_LABEL)kullanarak grafik penceresinde görüntüler. Hesaplamalar iki şekilde yapılır: OpenCL kullanarak ve kullanmadan. Bu bloklar, sırasıyla WithOpenCL() ve WithoutOpenCL() fonksiyonları biçiminde uygulanır:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//...
   Print("\nCalculations without OpenCL:");
   WithoutOpenCL(values1,colors1,w,h,size,const_1,const_2);
//--- calculations with OpenCL
   Print("\nCalculations with OpenCL:");
   WithOpenCL(values2,colors2,w,h,size,const_1,const_2);
//...
  }
//+------------------------------------------------------------------+
//| Calculations without using  OpenCL                               |
//+------------------------------------------------------------------+
void WithoutOpenCL(float &values[],uint &colors[],const uint w,const uint h,
                   const uint size,const uint const_1,const uint const_2)
  {
//--- store the calculation start time
   uint x=GetTickCount();
//--- calculation of function values
   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 the function calculation time
   Print("Calculation of function values = "+IntegerToString(GetTickCount()-x)+" ms");
//--- determine the minimum value and the difference between 
//--- the minimum and maximum values of points in the set
   float min,dif;
   GetMinAndDifference(values,size,min,dif);
//--- store the calculation start time
   x=GetTickCount();
//--- calculate paint colors for the set
   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 the paint color calculation time
   Print("Calculation of paint colors = "+IntegerToString(GetTickCount()-x)+" ms");
  }
//+------------------------------------------------------------------+
//| Calculations using OpenCL                                        |
//+------------------------------------------------------------------+
void WithOpenCL(float &values[],uint &colors[],const uint w,const uint h,
                const uint size,const uint const_1,const uint const_2)
  {
//--- variables for using OpenCL
   int cl_ctx;
   int cl_prg;
   int cl_krn_1;
   int cl_krn_2;
   int cl_mem_1;
   int cl_mem_2;
//--- create context for OpenCL (selection of device)
   if((cl_ctx=CLContextCreate(CL_USE_ANY))==INVALID_HANDLE)
     {
      Print("OpenCL not found");
      return;
     }
//--- create a program based on the code in the cl_src line
   if((cl_prg=CLProgramCreate(cl_ctx,cl_src))==INVALID_HANDLE)
     {
      CLContextFree(cl_ctx);
      Print("OpenCL program create failed");
      return;
     }
//--- create a kernel for calculation of values of the function of two variables
   if((cl_krn_1=CLKernelCreate(cl_prg,"Func"))==INVALID_HANDLE)
     {
      CLProgramFree(cl_prg);
      CLContextFree(cl_ctx);
      Print("OpenCL kernel_1 create failed");
      return;
     }
//--- kernel for painting points of the set in the plane
   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 buffer for function values
   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 buffer for point colors
   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;
     }
//--- store the calculation start time
   uint x=GetTickCount();
//--- array sets indices at which the calculation will start 
   uint offset[2]={0,0};
//--- array sets limits up to which the calculation will be performed
   uint work[2];
   work[0]=h;
   work[1]=w;
//--- calculation of function values
//--- pass the values to the kernel
   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);
//--- start the execution of the kernel
   CLExecute(cl_krn_1,2,offset,work);
//--- read the obtained values to the array
   CLBufferRead(cl_mem_1,values);
//--- print the function calculation time
   Print("Calculation of function values = "+IntegerToString(GetTickCount()-x)+" ms");
//--- determine the minimum value and the difference between 
//--- the minimum and maximum values of points in the set
   float min,dif;
   GetMinAndDifference(values,size,min,dif);
//--- store the calculation start time
   x=GetTickCount();
//--- set the calculation limits
   uint offset2[1]={0};
   uint work2[1];
   work2[0]=size;
//--- calculation of paint colors for the set
//--- pass the values to the kernel
   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);
//--- start the execution of the kernel
   CLExecute(cl_krn_2,1,offset2,work2);
//--- read the obtained values to the array
   CLBufferRead(cl_mem_2,colors);
//--- print the paint color calculation time
   Print("Calculation of paint colors = "+IntegerToString(GetTickCount()-x)+" ms");
//--- delete OpenCL objects
   CLBufferFree(cl_mem_1);
   CLBufferFree(cl_mem_2);
   CLKernelFree(cl_krn_1);
   CLKernelFree(cl_krn_2);
   CLProgramFree(cl_prg);
   CLContextFree(cl_ctx);
  }

Betiği çalıştırdıktan sonra, grafik penceresinde fonksiyon değerlerinin boyalı kümesini birkaç saniye boyunca görebileceksiniz. Bunlardan her biri, giriş parametrelerinde seçilen rengin (kırmızı, yeşil veya mavi) tonlarından birine karşılık gelir.

0,1 adımda -22 ila 22 düzleminde noktalar kümesi için betik yürütme sonuçları.

0,1 adımda -22 ila 22 düzleminde noktalar kümesi için betik yürütme sonuçları.

Görüntünün kendisine ek olarak her iki yöntem için fonksiyon hesaplama süresi, "Uzman Danışmanlar" günlüğünde görüntülenmektedir, böylece MQL5'te OpenCL kullanmanın avantajlarını ve pratikteki değerini açıkça görebilirsiniz. Adım değerini artırın ve betik yürütme sonuçlarını elde edin:

İki yöntem kullanarak fonksiyon hesaplama ve boyama rengi değerlerinin sonuçları.

İki yöntem kullanarak fonksiyon hesaplama ve boyama rengi değerlerinin sonuçları.

OpenCL kullanarak CPU'daki fonksiyon hesaplamasının toplam süresinin, 5 kattan daha az zaman aldığı görülmüştür ve bu bile sınırın çok uzağındadır! OpenCL desteği ile gelişmiş GPU'lara dair hesaplamaların CPU'lardan çok daha hızlı olduğu iyi bilinir. Buna dair açık bir kanıtı, aşağıdaki tabloda gösterildiği gibi farklı OpenCL cihazları üzerinde betik yürütme sonuçlarında görebilirsiniz.

OpenCL aygıtı
OpenCL kullanılmadan yürütme süresi, ms
OpenCL kullanılarak yürütme süresi, ms
Performans kazanımı
AMD Radeon HD 7970 20,361 ms
171 ms
 119,07 kez
NVidia GeForce GT 630
24,742 ms
578 ms
 42,8 kez
Intel Core i5 430M
27,222 ms
5,428 ms
 5,01 kez
AMD Athlon X2 Dual-Core QL-65
45,723 ms
9,516 ms  4,8 kez

Görülebileceği gibi, sınıfının en iyi AMD grafik kartı üzerinde OpenCL kullanımı, hesaplama süresinde 100 kat azalma ile sonuçlanmıştır! 2011 ile biraz daha eski olan GeForce GT 630 üzerinde de, sürede 42 katlık azalma ile önemli sonuçlar elde edilmiştir. Intel ve AMD'den CPU'lar ise en sonda yer almaktadır. Ancak, karmaşık hesaplamalar ile uğraşırken bunlar üzerinde elde edilen performans kazanımı da oldukça faydalıdır.

Neredeyse hepsi bu. Karşılaştırma tablosu, toplu veri işlemede paralel bilgi işlem kullanmanın açık bir avantajını göstermektedir. Tek yapmanız gereken, grafik kartınız veya CPU'nuz için uygun sürücüyü yüklemektir.