OpenCL: MQL5'te dahili uygulama testleri - sayfa 64

 

   http://www.ixbt.com/video3/rad2.shtml . - OpenCL'de program yazarken "yaratıcılık" yapmak yerine, büyük veri dizileri için optimize edilmiş kitaplıkları kullanmak en iyisidir (bu gerçeği dışlamıyorum) . Bir hibrit bilgi işlem sistemi kullanabilirsiniz, küçük hacimler OpenCL kullanılarak işlenir ve büyük hacimler optimize edilmiş kitaplıklar tarafından işlenir. Evet! Kitaplıkları belirli bir programlama diline dönüştürmek ve bu kitaplığı dahil etmek için koşullar oluşturmak gerekebilir. Bu gerçekleştirilebilirse, etkileyici bir sonuç ve buna bağlı olarak operasyonun çoklu bir ivmesi elde edilecektir. Buna dikkat edin.....

Not Belki de bu forumda yeni bir konu

������������������ AMD Radeon � �������������� �����������. ������������� AMD Core Math Library
  • www.ixbt.com
������� ������� ����������� �� �������, ��������� ����������� � ���� � �� �� �����, �� ������ ��� �� ����� ������. � ������� ������������ ������� �� ����� ����������� �� ����� �������, � �������� GPU ����� ����� ������������� �������� ��������� ������� ��������� ���� � ����� ����� �� ����� �����. � ���� ����� ������ ���������� ��� PC ����� x86...
 
GKS : Kitaplıkları belirli bir programlama diline dönüştürmek ve bu kitaplığı dahil etmek için koşullar oluşturmak gerekebilir. Bu gerçekleştirilebilirse, etkileyici bir sonuç ve buna bağlı olarak operasyonun çoklu bir ivmesi elde edilecektir.

Geliştiriciler için teknolojik değildir - derleyiciyi kendi türünde benzersiz olsa da son derece spesifik bir ürün için özel olarak ayarlamak.

Ve şimdiye kadar, bu kadar büyük boyutlarda çarpılan matrisler gerektiren herhangi bir ticaret görevi görmüyorum.

 
MetaQuotes :

MetaTrader 5 Güncelleme Duyurusu

Önümüzdeki birkaç gün içinde MetaTrader 5 platformuna bir güncelleme yayınlanacak.Güncelleme yayınlandıktan sonra, son değişiklik listesini ve yapı numaralarını içeren ek haberler yayınlanacak. Aşağıdaki değişiklikler planlanmaktadır:

MetaTrader 5 İstemci Terminali inşa 648

MetaTester: Test aracılarında OpenCL programlarını kullanmak için destek eklendi.

OpenCL'i anladıktan sonra Cloud+OpenCL için bir test görevi hazırlayın. Çok ilginç mat. perspektifler.
 
hrenfx : sonra Cloud+OpenCL için bir test görevi hazırlayın. Çok ilginç mat. perspektifler.
MetaDriver 's için daha fazlası. OpenCL'de büyük bir uzman ve testleri taklit etmeye çalışıyor gibi görünüyor.
 
hrenfx :
OpenCL'i anladıktan sonra Cloud+OpenCL için bir test görevi hazırlayın. Çok ilginç mat. perspektifler.
matematik :
MetaDriver 's için daha fazlası. ................................
Düşüneceğim. Tam olarak neyin hesaplanması gerektiğine dair fikirlere ihtiyacımız var.
 

En son güncellenen video sürücüsü (NVIDIA 301.42 ).

İlgi için eski testlerden birini (ParallelTester_00-01x) yaptım ve gözlerime inanamadım.

Sayfa 24'te bir test yaptım yani 29'luk bir artış oldu, ardından hafızayı 2 kanal moduna aldım, 39 oldu.

Şimdi: ~306

 2012.05 . 31 22 : 05 : 11      ParallelTester_00- 01 x (EURUSD,D1)       OpenCL init OK!
2012.05 . 31 22 : 05 : 11      ParallelTester_00- 01 x (EURUSD,D1)       GPU time = 141 ms
2012.05 . 31 22 : 05 : 11      ParallelTester_00- 01 x (EURUSD,D1)       Соunt inticators = 16 ; Count history bars = 144000 ; Count pass = 1280
2012.05 . 31 22 : 05 : 11      ParallelTester_00- 01 x (EURUSD,D1)       Result on Gpu МахResult== 1.28051 at 1213 pass
2012.05 . 31 22 : 05 : 54      ParallelTester_00- 01 x (EURUSD,D1)       CPU time = 43259 ms
2012.05 . 31 22 : 05 : 54      ParallelTester_00- 01 x (EURUSD,D1)       Соunt inticators = 16 ; Count history bars = 144000 ; Count pass = 1280
2012.05 . 31 22 : 05 : 54      ParallelTester_00- 01 x (EURUSD,D1)       Result on Cpu МахResult== 1.28051 at 1213 pass
2012.05 . 31 22 : 05 : 54      ParallelTester_00- 01 x (EURUSD,D1)       CpuTime/GpuTime = 306.8014184397163
 2012.05 . 31 21 : 41 : 04      OpenCL  GPU: NVIDIA Corporation GeForce GT 440 with OpenCL 1.1 ( 2 units, 1660 MHz, 1023 Mb, version 301.42 )
2012.05 . 31 21 : 41 : 04      OpenCL  CPU: AuthenticAMD AMD Athlon(tm) II X4 630 Processor with OpenCL 1.1 ( 4 units, 2948 MHz, 2048 Mb, version 2.0 )
Harikalar. Görünüşe göre NVIDIA sürücüyü insanca kışkırtmış.
 

fyords , ancak yukarıdaki günlükte daha önceki olayların görünmesini nasıl sağladınız?

Ve genel olarak harika, seni anlıyorum. HD 4870'imi ucuza satın alıp gücünü görmek beni de heyecanlandırdı.

Küçük bir öneri: parametreleri, GPU'daki yürütme süresi 1 saniye ile karşılaştırılabilir olacak şekilde seçin. O zaman zaman oranı daha doğru olacaktır. GteTickCount() işlevinin ortalama hatası, onlarca milisaniyeden az değildir. Böylece GPU'daki süre hem 120 ms hem de 170'i kolayca elde edebilirsiniz. Ve hızlanma miktarı buna bağlıdır.

Burada bu betiği, mevcut tüm cihazlarda çalışacak şekilde biraz değiştirdim (aşağıdan yukarıya bakın: 1) Intel platformunda CPU, ardından 2) AMD platformunda HD 4870 ekran kartı ve 3) AMD platformunda CPU) :

 2012.05 . 31 15 : 48 : 35      OpenCL  CPU: GenuineIntel  Intel(R) Pentium(R) CPU G840 @ 2.80 GHz with OpenCL 1.2 ( 2 units, 2793 MHz, 8040 Mb, version 2.0 (sse2))
2012.05 . 31 15 : 48 : 35      OpenCL  GPU: Advanced Micro Devices, Inc. ATI RV770 with OpenCL 1.0 ( 10 units, 780 MHz, 512 Mb, version CAL 1.4 . 1720 )
2012.05 . 31 15 : 48 : 35      OpenCL  CPU: Intel(R) Corporation  Intel(R) Pentium(R) CPU G840 @ 2.80 GHz with OpenCL 1.1 ( 2 units, 2800 MHz, 8040 Mb, version 1.1 )

Komut dosyası sonuçları - aşağıdan yukarıya!

 2012.06 . 01 01 : 06 : 12      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     ------------
2012.06 . 01 01 : 06 : 12      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     Result on Gpu МахResult== 0.87527 at 10902 pass
2012.06 . 01 01 : 06 : 12      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     CpuTime/GpuTime = 24.76943755169562
2012.06 . 01 01 : 06 : 12      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     GPU time = 9672 ms
2012.06 . 01 01 : 06 : 02      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     Device number = 2
2012.06 . 01 01 : 06 : 02      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     ------------
2012.06 . 01 01 : 06 : 02      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     Result on Gpu МахResult== 0.87527 at 10902 pass
2012.06 . 01 01 : 06 : 02      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     CpuTime/GpuTime = 204.7606837606838
2012.06 . 01 01 : 06 : 02      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     GPU time = 1170 ms
2012.06 . 01 01 : 06 : 01      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     Device number = 1
2012.06 . 01 01 : 06 : 01      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     ------------
2012.06 . 01 01 : 06 : 01      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     Result on Gpu МахResult== 0.87527 at 10902 pass
2012.06 . 01 01 : 06 : 01      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     CpuTime/GpuTime = 77.55584331498866
2012.06 . 01 01 : 06 : 01      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     GPU time = 3089 ms
2012.06 . 01 01 : 05 : 57      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     Device number = 0
2012.06 . 01 01 : 05 : 57      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     -------------------------
2012.06 . 01 01 : 05 : 57      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     Result on Cpu МахResult== 0.87527 at 10902 pass
2012.06 . 01 01 : 05 : 57      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     Соunt indicators = 16 ; Count history bars = 144000 ; Count pass = 12800
2012.06 . 01 01 : 05 : 57      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     CPU time = 239570 ms
2012.06 . 01 01 : 01 : 58      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     ========================================
10 kat daha küçük olan son parametre ile benim kartım sizinki kadar hızlı değil. Muhtemelen düzgün bir şekilde hızlanmak için zamanı yoktur :)
 
Bilgi için: GetTickCount'ta 16 ms'den çok daha az bir hata var, Windows 95 kullanmıyorsunuz.
 
Mathemat :

fyords , ancak yukarıdaki günlükte daha önceki olayların görünmesini nasıl sağladınız?

Raporlarda, "Görüntüle"ye sağ tıklayın, yeni bir pencerede "İstek" düğmesine tıklayın ve günlük doğru bir şekilde oluşturulur ve (benim için) okunması daha uygundur.

Ve senaryo hakkında, teşekkürler, yarın deneyeceğim, özellikle Count pass = 12800 ile tamamlanması çok uzun bir bekleyiş.

Şimdilik, Count pass = 12800 olan eski komut dosyası

 2012.06 . 01 01 : 05 : 53      ParallelTester_00- 01 x (EURUSD,D1)       OpenCL init OK!
2012.06 . 01 01 : 05 : 54      ParallelTester_00- 01 x (EURUSD,D1)       GPU time = 999 ms
2012.06 . 01 01 : 05 : 54      ParallelTester_00- 01 x (EURUSD,D1)       Соunt inticators = 16 ; Count history bars = 144000 ; Count pass = 12800
2012.06 . 01 01 : 05 : 54      ParallelTester_00- 01 x (EURUSD,D1)       Result on Gpu МахResult== 1.49697 at 10010 pass
2012.06 . 01 01 : 13 : 08      ParallelTester_00- 01 x (EURUSD,D1)       CPU time = 434167 ms
2012.06 . 01 01 : 13 : 08      ParallelTester_00- 01 x (EURUSD,D1)       Соunt inticators = 16 ; Count history bars = 144000 ; Count pass = 12800
2012.06 . 01 01 : 13 : 08      ParallelTester_00- 01 x (EURUSD,D1)       Result on Cpu МахResult== 1.49697 at 10010 pass
2012.06 . 01 01 : 13 : 08      ParallelTester_00- 01 x (EURUSD,D1)       CpuTime/GpuTime = 434.6016016016016
Artış daha da arttı.
 
Renat : Bilgi için: GetTickCount'ta 16 ms'den çok daha az hata var, Windows 95 kullanmıyorsunuz.

Hata aslında çok daha az değil. Evet, buna yakın, ancak ortalamanın dışında, 32, 48 ve hatta daha fazla gruplanan aykırı değerler var. Nadirdirler, tartışmıyorum, göz ardı edilebilirler.

Ancak bir kişi bir komut dosyası çalıştırdığında, mutlaka bilgisayarda hiçbir şey yapmaz. Ayrıca sistem, yürütmeyi yavaşlatabilecek görevlerini de gerçekleştirebilir.

Resmi olarak, standart sapma gerçekten küçüktür - 6-7 bölgesinde ve yürütme süresinin kendisine zayıf bir şekilde bağlıdır. Ancak gerçek dağılımı iyi yansıtmaz. Aynı hesaplamalar yapılırken kaydedilen zamanların bir histogramı:

Bitişik sütunlar arasındaki mesafe 16 ms'dir. Küçük çubuklar oldukça olasıdır ve birbirlerinden zaten 32 ms farklıdır. Ortadaki çubuk ("gerçek yürütme süresi") 140 milisaniye ise, soldaki 124 ms ve sağdaki 156 ms'dir.

Bu, GPU'da küçük bir yürütme süresine bölündüğünde gerçek yayılmanın oldukça büyük olabileceği anlamına gelir:

20 saniye/124ms ~ 161

20 saniye/156 ms ~ 128.

Bu durumda, yürütme sürelerinin "gerçek oranı" yaklaşık olarak en büyük sütuna karşılık gelir:

20 saniye/140 ms ~ 143.

GPU üzerinde daha fazla yürütme süresi alırsak, bu hatanın etkisi çok daha az olacaktır. En az 500 ms olsun.

Simülasyon için komut dosyası:

 #define BIG       10000000
#define SMALL     1000

void OnStart ( )
{
   Print ( "Script started..." );
   double k;
   int times[ SMALL ];
   MathSrand ( TimeCurrent ( ) );
   for ( int ii = 0 ; ii < SMALL; ii ++ )
   {
       Comment ( ii );
       int st = GetTickCount ( );
       for ( int i = 0 ; i < BIG; i ++ )   k = sin ( i );
       int timeTotal = GetTickCount ( ) - st;
      times[ ii ] = timeTotal;
   }

   int h = FileOpen ( "gtc_times.txt" , FILE_WRITE , "\r\n"   );
   for ( int ii = 0 ; ii < SMALL; ii ++ )
       FileWrite ( h, times[ ii ] );   
   FileClose ( h ); 
   Print ( "Script unloaded" );
}
//+------------------------------------------------------------------+