OpenCL: MQL5'te dahili uygulama testleri - sayfa 70

 
tol64 :

Belki Renat'ın bundan ne öğrenilebileceğini görmesine izin ver. Yeni spesifikasyonun MQL5'te de daha iyi performans sağlaması mümkün mü?

C#/C++'a gelince, gerekirse onu boşaltabilirsiniz. Ana şey, mümkün olan maksimum egzoza sahip olmaktır. ;)

Mdya. Şimdiye kadar, yeni MT4'te en azından 1.1 sürümünün sona dahil edileceğine dair ürkek umut, beni CL optimizer'ı keskin için yeniden yazmaktan alıkoyuyor. Görünüşe göre dil aynı, derleyici aynı, temel bir engel yok (MT4 test cihazında özellikle OpenCL desteğine ihtiyacım yok, olsa da reddetmeyeceğim). Açmazlarsa, sol tarafı düşüneceğim.
 

Bu daldaki bazı komut dosyalarını böyle bir makinede test etti:

CPU-Z


CUDA-Z



Her komut dosyası için, yayınlandığı iletiye bir bağlantı sağlayacağım, böylece diğerleri, gerekirse sonuçları hızlı bir şekilde bulabilir, test edebilir ve karşılaştırabilir.

Test 1


2. test

 2013.11 . 29 14 : 29 : 13      ParallelOptimazer_00- 02 (EURUSD,H1)     Generation 013 ( 1280 passes, 140 ms) : MaxResult== 116.05191 ; Average Result== 106.7991
2013.11 . 29 14 : 29 : 13      ParallelOptimazer_00- 02 (EURUSD,H1)     Generation 014 ( 1280 passes, 125 ms) : MaxResult== 116.05191 ; Average Result== 106.77599
2013.11 . 29 14 : 29 : 13      ParallelOptimazer_00- 02 (EURUSD,H1)     Generation 015 ( 1280 passes, 125 ms) : MaxResult== 116.05191 ; Average Result== 106.37561
2013.11 . 29 14 : 29 : 13      ParallelOptimazer_00- 02 (EURUSD,H1)     Generation 016 ( 1280 passes, 140 ms) : MaxResult== 116.05191 ; Average Result== 106.64193
2013.11 . 29 14 : 29 : 13      ParallelOptimazer_00- 02 (EURUSD,H1)     Optimization finished. Best result == 116.05191 at 16 generation.
2013.11 . 29 14 : 29 : 13      ParallelOptimazer_00- 02 (EURUSD,H1)     Total time of optimization == 2 sec 122 ms

Test 3

ölçek = 1000

İşlemci

GPU


Test 4

 2013.11 . 29 16 : 02 : 31      Tast_Mand_ (EURUSD,H1)   1872 msec

Test 5

 2013.11 . 29 16 : 39 : 50      ParallelTester_00- 01 x (EURUSD,H1)       CLGetInfoInteger () returned 2
2013.11 . 29 16 : 39 : 51      ParallelTester_00- 01 x (EURUSD,H1)       OpenCL init OK!
2013.11 . 29 16 : 39 : 51      ParallelTester_00- 01 x (EURUSD,H1)       GPU time = 62 ms
2013.11 . 29 16 : 39 : 51      ParallelTester_00- 01 x (EURUSD,H1)       Соunt indicators = 16 ; Count history bars = 144000 ; Count pass = 1280
2013.11 . 29 16 : 39 : 51      ParallelTester_00- 01 x (EURUSD,H1)       Result on Gpu МахResult== 1.34787 at 699 pass
2013.11 . 29 16 : 40 : 05      ParallelTester_00- 01 x (EURUSD,H1)       CPU time = 14492 ms
2013.11 . 29 16 : 40 : 05      ParallelTester_00- 01 x (EURUSD,H1)       Соunt indicators = 16 ; Count history bars = 144000 ; Count pass = 1280
2013.11 . 29 16 : 40 : 05      ParallelTester_00- 01 x (EURUSD,H1)       Result on Cpu МахResult== 1.34787 at 699 pass
2013.11 . 29 16 : 40 : 05      ParallelTester_00- 01 x (EURUSD,H1)       CpuTime/GpuTime = 233.741935483871

Test 6

 2013.11 . 29 16 : 45 : 28      ParallelTester_00- 01 x_cycle (EURUSD,H1) OpenCL init OK! Device number = 0
2013.11 . 29 16 : 45 : 28      ParallelTester_00- 01 x_cycle (EURUSD,H1) GPU time = 577 ms
2013.11 . 29 16 : 45 : 28      ParallelTester_00- 01 x_cycle (EURUSD,H1) Соunt indicators = 16 ; Count history bars = 144000 ; Count pass = 12800
2013.11 . 29 16 : 45 : 28      ParallelTester_00- 01 x_cycle (EURUSD,H1) Result on Gpu МахResult== 1.57161 at 7031 pass
2013.11 . 29 16 : 45 : 28      ParallelTester_00- 01 x_cycle (EURUSD,H1) OpenCL init OK! Device number = 1
2013.11 . 29 16 : 45 : 29      ParallelTester_00- 01 x_cycle (EURUSD,H1) GPU time = 546 ms
2013.11 . 29 16 : 45 : 29      ParallelTester_00- 01 x_cycle (EURUSD,H1) Соunt indicators = 16 ; Count history bars = 144000 ; Count pass = 12800
2013.11 . 29 16 : 45 : 29      ParallelTester_00- 01 x_cycle (EURUSD,H1) Result on Gpu МахResult== 1.57161 at 7031 pass
2013.11 . 29 16 : 47 : 54      ParallelTester_00- 01 x_cycle (EURUSD,H1) CPU time = 145144 ms
2013.11 . 29 16 : 47 : 54      ParallelTester_00- 01 x_cycle (EURUSD,H1) Соunt indicators = 16 ; Count history bars = 144000 ; Count pass = 12800
2013.11 . 29 16 : 47 : 54      ParallelTester_00- 01 x_cycle (EURUSD,H1) Result on Cpu МахResult== 1.57161 at 7031 pass
2013.11 . 29 16 : 47 : 54      ParallelTester_00- 01 x_cycle (EURUSD,H1) CpuTime/GpuTime = 265.8315018315018

Test 7

 2013.11 . 29 16 : 54 : 52      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     ========================================
2013.11 . 29 16 : 57 : 16      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     CPU time = 144691 ms
2013.11 . 29 16 : 57 : 16      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     Соunt indicators = 16 ; Count history bars = 144000 ; Count pass = 12800
2013.11 . 29 16 : 57 : 16      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     Result on Cpu МахResult== 0.91969 at 4641 pass
2013.11 . 29 16 : 57 : 16      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     -------------------------
2013.11 . 29 16 : 57 : 16      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     Device number = 0
2013.11 . 29 16 : 57 : 17      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     GPU time = 593 ms
2013.11 . 29 16 : 57 : 17      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     CpuTime/GpuTime = 243.9983136593592
2013.11 . 29 16 : 57 : 17      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     Result on Gpu МахResult== 0.91969 at 4641 pass
2013.11 . 29 16 : 57 : 17      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     ------------
2013.11 . 29 16 : 57 : 17      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     Device number = 1
2013.11 . 29 16 : 57 : 18      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     GPU time = 546 ms
2013.11 . 29 16 : 57 : 18      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     CpuTime/GpuTime = 265.0018315018315
2013.11 . 29 16 : 57 : 18      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     Result on Gpu МахResult== 0.91969 at 4641 pass
2013.11 . 29 16 : 57 : 18      ParallelTester_00- 01 x_new_cycle (EURUSD,H1)     ------------

Test 8

 2013.11 . 29 17 : 08 : 08      vect_v2_all_devices (EURUSD,H1) =======================================
2013.11 . 29 17 : 08 : 08      vect_v2_all_devices (EURUSD,H1) OCL martices mul:         ROWS1 = 2000 ; COLSROWS = 2000 ; COLS2 = 2000
2013.11 . 29 17 : 09 : 12      vect_v2_all_devices (EURUSD,H1) CPUTime = 64.085
2013.11 . 29 17 : 09 : 12      vect_v2_all_devices (EURUSD,H1) ---------------
2013.11 . 29 17 : 09 : 12      vect_v2_all_devices (EURUSD,H1) read = 4000000 elements
2013.11 . 29 17 : 09 : 12      vect_v2_all_devices (EURUSD,H1) Device = 0 : time = 0.251 sec.
2013.11 . 29 17 : 09 : 12      vect_v2_all_devices (EURUSD,H1) CPUTime / GPUTotalTime = 255.319
2013.11 . 29 17 : 09 : 12      vect_v2_all_devices (EURUSD,H1) sum( 1362 , 1715 ) = - 5.34762192 ;    thirdCPU[ 1362 , 1715 ] = - 5.34762192 ;    buf[ 1362 , 1715 ] = - 5.34761715
2013.11 . 29 17 : 09 : 12      vect_v2_all_devices (EURUSD,H1) sum( 365 , 218 ) = 1.04545093 ;    thirdCPU[ 365 , 218 ] = 1.04545093 ;    buf[ 365 , 218 ] = 1.04544997
2013.11 . 29 17 : 09 : 12      vect_v2_all_devices (EURUSD,H1) sum( 1461 , 1678 ) = - 0.26404253 ;    thirdCPU[ 1461 , 1678 ] = - 0.26404253 ;    buf[ 1461 , 1678 ] = - 0.26404306
2013.11 . 29 17 : 09 : 12      vect_v2_all_devices (EURUSD,H1) sum( 1116 , 1765 ) = 0.61209172 ;    thirdCPU[ 1116 , 1765 ] = 0.61209172 ;    buf[ 1116 , 1765 ] = 0.61209279
2013.11 . 29 17 : 09 : 12      vect_v2_all_devices (EURUSD,H1) sum( 256 , 499 ) = 2.50011539 ;    thirdCPU[ 256 , 499 ] = 2.50011539 ;    buf[ 256 , 499 ] = 2.50011611
2013.11 . 29 17 : 09 : 12      vect_v2_all_devices (EURUSD,H1) sum( 528 , 1433 ) = 2.69000340 ;    thirdCPU[ 528 , 1433 ] = 2.69000340 ;    buf[ 528 , 1433 ] = 2.69000053
2013.11 . 29 17 : 09 : 12      vect_v2_all_devices (EURUSD,H1) sum( 926 , 1280 ) = 4.74232054 ;    thirdCPU[ 926 , 1280 ] = 4.74232054 ;    buf[ 926 , 1280 ] = 4.74231577
2013.11 . 29 17 : 09 : 12      vect_v2_all_devices (EURUSD,H1) sum( 361 , 1757 ) = 2.25322127 ;    thirdCPU[ 361 , 1757 ] = 2.25322127 ;    buf[ 361 , 1757 ] = 2.25322032
2013.11 . 29 17 : 09 : 12      vect_v2_all_devices (EURUSD,H1) sum( 1441 , 400 ) = - 1.65504980 ;    thirdCPU[ 1441 , 400 ] = - 1.65504980 ;    buf[ 1441 , 400 ] = - 1.65504801
2013.11 . 29 17 : 09 : 12      vect_v2_all_devices (EURUSD,H1) sum( 1617 , 306 ) = - 2.14686131 ;    thirdCPU[ 1617 , 306 ] = - 2.14686131 ;    buf[ 1617 , 306 ] = - 2.14686537
2013.11 . 29 17 : 09 : 12      vect_v2_all_devices (EURUSD,H1) ________________________
2013.11 . 29 17 : 09 : 13      vect_v2_all_devices (EURUSD,H1) read = 4000000 elements
2013.11 . 29 17 : 09 : 13      vect_v2_all_devices (EURUSD,H1) Device = 1 : time = 0.734 sec.
2013.11 . 29 17 : 09 : 13      vect_v2_all_devices (EURUSD,H1) CPUTime / GPUTotalTime = 87.309
2013.11 . 29 17 : 09 : 13      vect_v2_all_devices (EURUSD,H1) sum( 370 , 1332 ) = 0.78463894 ;    thirdCPU[ 370 , 1332 ] = 0.78463894 ;    buf[ 370 , 1332 ] = 0.78463584
2013.11 . 29 17 : 09 : 13      vect_v2_all_devices (EURUSD,H1) sum( 1346 , 515 ) = 4.13771629 ;    thirdCPU[ 1346 , 515 ] = 4.13771629 ;    buf[ 1346 , 515 ] = 4.13771629
2013.11 . 29 17 : 09 : 13      vect_v2_all_devices (EURUSD,H1) sum( 632 , 631 ) = 0.53385985 ;    thirdCPU[ 632 , 631 ] = 0.53385985 ;    buf[ 632 , 631 ] = 0.53386015
2013.11 . 29 17 : 09 : 13      vect_v2_all_devices (EURUSD,H1) sum( 930 , 102 ) = 6.17934942 ;    thirdCPU[ 930 , 102 ] = 6.17934942 ;    buf[ 930 , 102 ] = 6.17935467
2013.11 . 29 17 : 09 : 13      vect_v2_all_devices (EURUSD,H1) sum( 507 , 167 ) = 2.76653004 ;    thirdCPU[ 507 , 167 ] = 2.76653004 ;    buf[ 507 , 167 ] = 2.76652718
2013.11 . 29 17 : 09 : 13      vect_v2_all_devices (EURUSD,H1) sum( 1638 , 1623 ) = - 3.40129304 ;    thirdCPU[ 1638 , 1623 ] = - 3.40129304 ;    buf[ 1638 , 1623 ] = - 3.40129256
2013.11 . 29 17 : 09 : 13      vect_v2_all_devices (EURUSD,H1) sum( 208 , 649 ) = 8.09206963 ;    thirdCPU[ 208 , 649 ] = 8.09206963 ;    buf[ 208 , 649 ] = 8.09207344
2013.11 . 29 17 : 09 : 13      vect_v2_all_devices (EURUSD,H1) sum( 298 , 741 ) = - 0.59763604 ;    thirdCPU[ 298 , 741 ] = - 0.59763604 ;    buf[ 298 , 741 ] = - 0.59763324
2013.11 . 29 17 : 09 : 13      vect_v2_all_devices (EURUSD,H1) sum( 1334 , 521 ) = - 2.74508810 ;    thirdCPU[ 1334 , 521 ] = - 2.74508810 ;    buf[ 1334 , 521 ] = - 2.74508691
2013.11 . 29 17 : 09 : 13      vect_v2_all_devices (EURUSD,H1) sum( 858 , 760 ) = - 7.48025274 ;    thirdCPU[ 858 , 760 ] = - 7.48025274 ;    buf[ 858 , 760 ] = - 7.48025846
2013.11 . 29 17 : 09 : 13      vect_v2_all_devices (EURUSD,H1) ________________________



CPU-Z CPUID - System & hardware benchmark, monitoring, reporting
CPU-Z CPUID - System & hardware benchmark, monitoring, reporting
  • www.cpuid.com
CPU-Z is a freeware that gathers information on some of the main devices of your system.
 

MetaDriver'ın qpu_EMA-Rainbow göstergesini de test etmeye çalıştım.


CPU'da sonuç bazen 2 kata kadar daha iyidir. İşte sonuç:

2013.12.01 14:12:50     qpu_Future_EMA-Rainbow (EURUSD,M1)      Calculate 1000129 bars at CPU, time = 811 ms
2013.12.01 14:12:57     qpu_Future_EMA-Rainbow (EURUSD,M1)      OpenCL: GPU device 'GeForce GTX 650 Ti BOOST' selected
2013.12.01 14:12:58     qpu_Future_EMA-Rainbow (EURUSD,M1)      Calculate 1000129 bars at GPU (OpenCL), time = 1295 ms

//---

Volodya ( MetaDriver ), bana hangi sonuçları aldığınızı gösterin?

PS Çekirdek kodundaki gpuEMA işlev parametrelerinde türü __global'den __local'a değiştirdi . Biraz daha hızlı oldu, ancak yine de CPU'dan daha yavaştı.

2013.12.01 14:29:46     qpu_Future_EMA-Rainbow (EURUSD,M1)      Calculate 1000129 bars at CPU, time = 795 ms
2013.12.01 14:29:51     qpu_Future_EMA-Rainbow (EURUSD,M1)      OpenCL: GPU device 'GeForce GTX 650 Ti BOOST' selected
2013.12.01 14:29:52     qpu_Future_EMA-Rainbow (EURUSD,M1)      Calculate 1000129 bars at GPU (OpenCL), time = 1061 ms
Dosyalar:
 
tol64 :

MetaDriver'ın qpu_EMA-Rainbow göstergesini de test etmeye çalıştım.

CPU'da sonuç bazen 2 kata kadar daha iyidir. İşte sonuç:

Volodya ( MetaDriver ), bana hangi sonuçları aldığınızı gösterin?

PS Çekirdek kodundaki gpuEMA işlev parametrelerinde türü __global'den __local'a değiştirdi . Biraz daha hızlı oldu, ancak yine de CPU'dan daha yavaştı.

Bende benzer sonuçlar var. Bu uzun zamandır tartışılıyor ve mantıklı - görev çok basit, hafızayı bir video kartına aktarmak ve geri ödeme yapmıyor. GPU'nun avantajı daha karmaşık görevlerde ortaya çıkıyor.
 
MetaDriver :
Bende benzer sonuçlar var. Bu uzun zamandır tartışılıyor ve mantıklı - görev çok basit, hafızayı bir video kartına aktarmak ve geri ödeme yapmıyor. GPU'nun avantajı daha karmaşık görevlerde ortaya çıkıyor.
Tamam, teşekkürler, daha karmaşık görevleri deneyeceğim.
 

Ticaret için GPU hızlandırma kullanımına bir örnek (türevler).

Mark Joshi - finansal matematik ve özellikle türevler ve çift opsiyon ticareti üzerine kitaplarıyla tanınan, burada yapılan çalışmalar hakkında bilgi verdi:

http://ssrn.com/abstract=2388415

OOP tarzı çalışmalarını CUDA GPU'lara aktardı. Bu işe 2010 yılında başladı, sonra ara verdi ve 2011'den 2014 yazına kadar 0.3 çalışan sürümüne geçti. 100X ... 137X kat hızlanma elde etmeyi başardı - ve bu zor olan bir COMPLEX algoritmasında.

Çalışma, C++'da QuantLib kitaplığını kullandı ve kendisinin de kabul ettiği gibi, hepsinin bir CUDA GPU'da çalışması için "OOP ->-> prosedürel yaklaşım" yolunda yeniden çalışması gerekiyordu.

Yazıyor:

"İlk alıştırma özellikleri için GPU'da LMM ile IRD'nin Monte Carlo fiyatlandırmasını en küçük kareler ile uyguladım.

Kodu hem C++ hem de CUDA'da kooderive.sourceforge.net adresinden alabilirsiniz. Kağıt .....

CUDA için daha önce C++ için kullandığımdan tamamen farklı bir kod kullandım. Özünde, verileri merkezi kavram olarak ele alıyorum ve veriler üzerinde hareket etmek için kodu kullanıyorum. Stil çok işlevsel. Önceki C++ uygulamalarım nesne yönelimli olduğu için çok çalışmam gerekti."

Kendi açık kaynak projesi:

http://sourceforge.net/projects/kooderive/

Neden: