OpenCL: MQL5'te dahili uygulama testleri - sayfa 58

 
Mathemat :

Sonunda seni bekliyorduk. Denemeye hazırsanız, Intel OpenCL Runtime'ı yükleyin ( bağlantıdaki talimatlar).

Komut dosyasını içindeki hiçbir şeyi değiştirmeden çalıştırın ve önceki meslektaşlarınızın yaptığı gibi "Uzmanlar" sekmesinden günlüğü gönderin. Senaryonun toplam uygulama süresi taş üzerinde yaklaşık 3 dakikadır, sabırlı olun. Aynı zamanda, OpenCL'nin en havalı çıplak taşlı Sandy Bridge'de nasıl çalıştığını öğreneceğiz.

Sabrınız yeterli değilse veya size bu yeteneklerinizin ötesinde görünüyorsa, sorun değil, kırılmayacağız.

PS Bu betiğin amacı, herhangi bir ayrık video ejderhası olmadan çıplak bir CPU'nun neler yapabileceğini görmektir. Intel Runtime doğru bir şekilde kurulursa, bu betiğin yaklaşık 200 veya biraz daha yüksek hızlanacağından şüpheleniyorum.

Intel OpenCL Runtime'ın doğru bir şekilde kalktığına dair şüpheler var.

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) CpuTime/GpuTime = 1347.164383561644

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) Result on Cpu МахResult==0.9316 at 10253 pass

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) CPU time = 295029 ms

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Result on Gpu МахResult==0.9316 at 10253 pass

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) GPU time = 219 ms

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) OpenCL init OK!

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) CLGetInfoInteger() returned 4


 
casinonsk :

Intel OpenCL Runtime'ın doğru bir şekilde kalktığına dair şüpheler var.

2012.04.23 00:17:51 ParallelTester_00-01x__3 (EURUSD,H1) CPU time = 295029 ms

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Result on Gpu МахResult==0.9316 at 10253 pass

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 00:12:56 ParallelTester_00-01x__3 (EURUSD,H1) GPU time = 219 ms

Muhtemelen CLContextCreate() argümanını sıfırdan farklı bir şeye ayarladınız. Pekala, senden hiçbir şeyi değiştirmemeni istedim! İki başlı video ejderhanızın yeteneklerini zaten biliyoruz. Ama görünüşe göre birkaç...

Kaba tahminlerime göre, CLContextCreate(0) ile sırasıyla CPU zamanı = 180000 ms ve GPU zamanı = 900 ms (yaklaşık olarak) sırasına göre sayılara sahip olmalısınız. Böyle bir CPU için garip bir şekilde uzun bir ilk yürütme süreniz var. Belki başka görevlerle ağır bir şekilde yüklendi?

Komut dosyasını, eklediğim aynı biçimde çalıştırabilirsiniz - koddaki hiçbir şeyi değiştirmeden , tek bir ?

PS Elbette, device = 0'ın CPU'ya değil, başka bir şeye karşılık gelmesi mümkündür. Öyleyse deney yapın (0'dan 3'e). Teorik olarak en uzun GPU süresi, çıplak bir CPU'ya karşılık gelmelidir, yani. ev sahibi.

 
Mathemat :

CLContextCreate() bağımsız değişkenini sıfırdan farklı bir şeye ayarladınız. Pekala, senden hiçbir şeyi değiştirmemeni istedim! İki başlı video ejderhanızın yeteneklerini zaten biliyoruz. Ama görünüşe göre birkaç...

Kaba tahminlerime göre, CLContextCreate(0) ile sırasıyla CPU zamanı = 180000 ms ve GPU zamanı = 900 ms (yaklaşık olarak) sırasına göre sayılara sahip olmalısınız. Böyle bir CPU için garip bir şekilde uzun bir ilk yürütme süreniz var. Belki de başka görevlerle çok yüklüydü?

Komut dosyasını eklediğim şekilde çalıştırabilir misiniz - hiçbir şeyi değiştirmeden , tek bir değişiklik yapmadan?

PS Elbette, device = 0'ın CPU'ya değil, başka bir şeye karşılık gelmesi mümkündür. Öyleyse deney yapın (0'dan 3'e). Teorik olarak en uzun GPU süresi, çıplak bir CPU'ya karşılık gelmelidir, yani. ev sahibi.

Parametreler değişmedi! Olduğu gibi başlatıldı.

Videoya göre evet 2x590.

CLContextCreate (0) 1,2,3'te yeniden başlatıldığında sonuç öncekiyle aynıdır.

Intel OpenCL Runtime ile ilgili bir sorun olabilir.

 
casinonsk :

Ayarları değiştirmedim! Olduğu gibi başlatıldı.

CLContextCreate (0) 1,2,3'te yeniden başlatıldığında sonuç öncekiyle aynıdır.

Tüm sonuçlar aynı mı? buna inanmıyorum... peki, bu komut dosyasında çıplak bir CPU'da GPU zamanı = 219 ms olamaz. En iyi durumda, yaklaşık 800 ms olacaktır, ancak 200 ms olmayacaktır.

İşte tipik sonucum (Pentium G840 CPU'm var):

2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    CpuTime/GpuTime = 88.40817091454272
2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    Result on Cpu МахResult==1.05116 at 7785 pass
2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:23:09    ParallelTester_00-01x (EURUSD,H1)    CPU time = 235873 ms
2012.04.22 22:19:13    ParallelTester_00-01x (EURUSD,H1)    Result on Gpu МахResult==1.05116 at 7785 pass
2012.04.22 22:19:13    ParallelTester_00-01x (EURUSD,H1)    Соunt indicators = 16; Count history bars = 144000; Count pass = 12800
2012.04.22 22:19:13    ParallelTester_00-01x (EURUSD,H1)    GPU time = 2668 ms
2012.04.22 22:19:10    ParallelTester_00-01x (EURUSD,H1)    OpenCL init OK!
2012.04.22 22:19:10    ParallelTester_00-01x (EURUSD,H1)    CLGetInfoInteger() returned 1

Tamam gidelim.

 
Mathemat :

Tüm sonuçlar aynı mı? buna inanmıyorum... peki, bu komut dosyasında çıplak bir CPU'da GPU zamanı = 219 ms olamaz. En iyi durumda, yaklaşık 800 ms olacaktır, ancak 200 ms olmayacaktır.

Tamam gidelim.

Burada CLContextCreate (0) ile tekrar denedim

 2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) CpuTime/GpuTime = 1265.405982905983

2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) Result on Cpu МахResult==1.48772 at 2051 pass

2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 01:27:15 ParallelTester_00-01x__3 (EURUSD,H1) CPU time = 296105 ms

2012.04.23 01:22:19 ParallelTester_00-01x__3 (EURUSD,H1) Result on Gpu МахResult==1.48772 at 2051 pass

2012.04.23 01:22:19 ParallelTester_00-01x__3 (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12800

2012.04.23 01:22:19 ParallelTester_00-01x__3 (EURUSD,H1) GPU time = 234 ms

2012.04.23 01:22:18 ParallelTester_00-01x__3 (EURUSD,H1) OpenCL init OK!

2012.04.23 01:22:18 ParallelTester_00-01x__3 (EURUSD,H1) CLGetInfoInteger() returned 5


 
casinonsk : Az önce CLContextCreate(0) ile tekrar denedim

Bu açıkça ayrı bir kartta ve bir CPU'da değil: öykünmede bu tür hızlanmalar pek mümkün değil. Ve zaten sahip olduğunuz cihaz sayısı 5, ne korkunç.

Sakıncası yoksa, lütfen biraz değiştirilmiş kodu çalıştırın ve sonucu buraya gönderin. Kodda, farklı OpenCL cihazları için hesaplamalar döngülüdür (hızlı olmaları gerekir) ve en uzun olan x86'daki hesaplama yalnızca bir kez gerçekleştirilir. Ayak örtüsü uzun olacaktır, ancak komut dosyasının kendisi bir kez yürütülür.

Sana zaten işkence ettiğimi anlıyorum. Ancak her durumda, Destek Ekibi için iyi bir bilgi olacaktır.
 

İlginç bir sonucum var)) Bunun toplam cihaz sayısı değil, mevcut durum olduğunu fark ettim.

 2012.04 . 22 22 : 02 : 51      ParallelTester_00- 01 x_cycle (EURUSD,M30)        OpenCL init OK! Device number = 0

Hesaplamalar devam ediyor ama biter bitmez yayınlayacağım.

Bu arada, yardımda ne CLGetInfoInteger() ne de CL_DEVICE_COUNT var.

not. sonuç

 2012.04 . 22 22 : 02 : 51      ParallelTester_00- 01 x_cycle (EURUSD,M30)        OpenCL init OK! Device number = 0
2012.04 . 22 22 : 03 : 03      ParallelTester_00- 01 x_cycle (EURUSD,M30)        GPU time = 11357 ms
2012.04 . 22 22 : 03 : 03      ParallelTester_00- 01 x_cycle (EURUSD,M30)        Соunt indicators = 16 ; Count history bars = 144000 ; Count pass = 12800
2012.04 . 22 22 : 03 : 03      ParallelTester_00- 01 x_cycle (EURUSD,M30)        Result on Gpu МахResult== 1.68487 at 9198 pass
2012.04 . 22 22 : 03 : 03      ParallelTester_00- 01 x_cycle (EURUSD,M30)        OpenCL init OK! Device number = 1
2012.04 . 22 22 : 03 : 04      ParallelTester_00- 01 x_cycle (EURUSD,M30)        GPU time = 998 ms
2012.04 . 22 22 : 03 : 04      ParallelTester_00- 01 x_cycle (EURUSD,M30)        Соunt indicators = 16 ; Count history bars = 144000 ; Count pass = 12800
2012.04 . 22 22 : 03 : 04      ParallelTester_00- 01 x_cycle (EURUSD,M30)        Result on Gpu МахResult== 1.68487 at 9198 pass
2012.04 . 22 22 : 10 : 13      ParallelTester_00- 01 x_cycle (EURUSD,M30)        CPU time = 428706 ms
2012.04 . 22 22 : 10 : 13      ParallelTester_00- 01 x_cycle (EURUSD,M30)        Соunt indicators = 16 ; Count history bars = 144000 ; Count pass = 12800
2012.04 . 22 22 : 10 : 13      ParallelTester_00- 01 x_cycle (EURUSD,M30)        Result on Cpu МахResult== 1.68487 at 9198 pass
2012.04 . 22 22 : 10 : 13      ParallelTester_00- 01 x_cycle (EURUSD,M30)        CpuTime/GpuTime = 429.565130260521
 
fyords : Bu arada, ne CLGetInfoInteger() ne de CL_DEVICE_COUNT yardımda değil.

not. sonuç

1. Yardımı güncelleyin, sizinki belli ki eski.

2. sen

 2012.03 . 04 22 : 27 : 16      Terminal        GPU: NVIDIA Corporation GeForce GT 440 with OpenCL 1.1 ( 2 units, 1660 MHz, 1024 Mb, version 295.73 )
2012.03 . 04 22 : 27 : 16      Terminal        CPU: AuthenticAMD AMD Athlon(tm) II X4 630 Processor with OpenCL 1.1 ( 4 units, 2812 MHz, 2048 Mb, version 2.0 )

büyük olasılıkla, ilk sayı, 11357 ms, ana bilgisayarı (çıplak CPU) ve ikinci, 998 ms, videoyu ifade eder. Ana bilgisayardaki kazanma sırası, kabaca, AMD OpenCL'de elde edilen hızlanma ile oldukça tutarlıdır (4 çekirdekli Athlone II'de yaklaşık 38 kat). Aslında yeterli olmasa da daha fazla olmalı, 50-60'a yakın bir yerde. Çok yavaş bir hafızanız olabilir.

CpuTime / GpuTime rakamı elbette sadece son hesaplanan cihaz için hesaplanır.

 
Mathemat :

1. Yardımı güncelleyin, sizinki belli ki eski.

2. CpuTime / GpuTime rakamı elbette sadece son hesaplanan cihaz için hesaplanır.

1. Her şeyi manuel olarak güncelledim, teşekkürler, peki ya terminal ve meta düzenleyici ile birlikte güncellenmeyen yardım?

2. Evet, ama yine de güzel).

 
papaklass :

Donanımınızla ilgili hemen hemen her şey açıktır, yalnızca sunucunuz bir OpenCL cihazıdır. Öte yandan, bu kadar yüksek bir sonucun daha önce nereden geldiği gariptir (s. 51):

 2012.04 . 08 13 : 28 : 01      ParallelTester_00- 02 -s16x7x3k (EURUSD,H1)       OpenCL init OK!
2012.04 . 08 13 : 28 : 08      ParallelTester_00- 02 -s16x7x3k (EURUSD,H1)       GPU time = 7145 ms
2012.04 . 08 13 : 28 : 08      ParallelTester_00- 02 -s16x7x3k (EURUSD,H1)       Соunt inticators = 16 ; Count history bars = 50000 ; Count pass = 4096
2012.04 . 08 13 : 28 : 08      ParallelTester_00- 02 -s16x7x3k (EURUSD,H1)       Result on Gpu МахResult== 3.86669 at 1682 pass
2012.04 . 08 13 : 35 : 11      ParallelTester_00- 02 -s16x7x3k (EURUSD,H1)       CPU time = 422888 ms
2012.04 . 08 13 : 35 : 11      ParallelTester_00- 02 -s16x7x3k (EURUSD,H1)       Соunt inticators = 16 ; Count history bars = 50000 ; Count pass = 4096
2012.04 . 08 13 : 35 : 11      ParallelTester_00- 02 -s16x7x3k (EURUSD,H1)       Result on Cpu МахResult== 3.86669 at 1682 pass
2012.04 . 08 13 : 35 : 11      ParallelTester_00- 02 -s16x7x3k (EURUSD,H1)       CpuTime/GpuTime = 59.18656403079076

Nedense imleci kod eklemeden çıkaramıyorum . Ve eğer birinden alıntı yaparsam, aynı saçmalık. Bu bir forum hatası mı?

Forum motorunun bir hatası, ama her zaman böyle değil. Genellikle HTML düğmesine tıklar ve son etiketten sonra manuel olarak birkaç harf eklerim. Sonra yazının görsel düzenleme moduna dönüyorum.