Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Kodumun hangi kısmı özellikle ilgimi çekiyor? Farklı dosyalara çok fazla bağımlılığım var.
Şu anda sahip olduğum sorun, yalnızca test cihazının 1 işareti için arabelleği yazıp okumak ve kontrol etmek için yeterli:
Komut dosyası başlatma:
2013.10.30 18:55:40 OpenCL_buffer_test (EURUSD,H1) Cihaz #0 = Selvi
2013.10.30 18:55:40 OpenCL_buffer_test (EURUSD,H1) OpenCL: GPU cihazı 'Cypress' seçildi
2013.10.30 18:55:40 OpenCL_buffer_test (EURUSD,H1) derleme günlüğü =
2013.10.30 18:55:40 OpenCL_buffer_test (EURUSD,H1) Bayt cinsinden arabellek boyutu =240
2013.01.09'dan 2013.10.10'a kadar "OHLC on M1" ile M5'te test cihazında bir uzman tarafından başlatın:
2013.10.30 19:01:44 Çekirdek 1 2013.01.09 00:00:00 Cihaz #0 = Selvi
2013.10.30 19:01:44 Core 1 2013.01.09 00:00:00 OpenCL: GPU cihazı 'Cypress' seçildi
2013.10.30 19:01:44 Çekirdek 1 2013.01.09 00:00:00 derleme günlüğü =
2013.10.30 19:01:44 Çekirdek 1 2013.01.09 00:00:00 Bayt cinsinden arabellek boyutu =240
2013.10.30 19:04:55 Çekirdek 1 EURUSD,M5: 192443 ms içinde oluşturulan 1108637 tik (55953 bar) (geçmişteki toplam çubuklar 131439, toplam süre 192521 ms)
2013.10.30 19:04:55 Çekirdek 1 294 Mb bellek kullanıldı
Lütfen test cihazında yalnızca 1 cihaz olduğunu unutmayın.
Eğer bir
//CLBufferRead(hbuffer[1], price);
o zamanlar
OHLC verileri üzerinde hesaplama yapmak gerekiyorsa, ekonomik bir kayıt yapmak gerekir, yani. önceden daha büyük bir arabellek oluşturun ve yeni veriler geldiğinde, yeni başlangıç ve arabelleğin boyutu hakkında çekirdeği bilgilendirerek yalnızca bu yeni verileri ekleyin.
OHLC aktarımını optimize etmeyi başarsak bile (son çubuğu CLSetKernelArg aracılığıyla aktaracağız), sonuç arabelleğini okurken yine de çöküyoruz:
Peki, seni kim durduruyor. Gerçek bir şey alın ve yazın ki bir peri masalı olmasın. Ama yine de ivmenin olması için bir örnek bulmaya çalışın. Bu en zor kısım.
Yazılarımdan bahsediyorsak... Neyse, eğitim programı yazdım. Ve matris çarpımı oldukça faydalı bir işlemdir.
Not Bu arada, CPU Intel ise, x86 çekirdeğindeki öykünme, rakibin CPU'sundan çok daha hızlıdır. Bu, eğer çekirdek açısından.
HD5850: Prensipte oldukça iyi bir kart, ancak modern kartlar daha iyi - sadece daha fazla sinek nedeniyle değil, aynı zamanda OpenCL için yapılan optimizasyonlar nedeniyle. Örneğin, genel bellek erişim süresi önemli ölçüde azaltılmıştır.
PPS OpenCL her derde deva değil, bazı nadir durumlarda önemli ölçüde hızlanmasına izin veren gerçek bir araçtır. Ve diğer durumlarda, çok uygun değil, hızlanma o kadar etkileyici değil - eğer varsa.
Eh... GPU'da OpenCL ile hızı artırmayla ilgili makaleler bir peri masalı oldu, çünkü gerçek görevleri tanımlamıyorlar :(
Bu taraftan değil. Masal - "herhangi bir algoritma OpenCL'de hızlandırılabilir". Hiç.
OpenCL'deki ilk dal, okl hızlandırma potansiyeline sahip olmak için bir algoritmanın sahip olması gereken kriterleri bile tam olarak tanımlar.
İyi şanlar.
İddialar hesaplama hızı ile ilgili değildir - burada hızlanma 2 katıdır (0,02 ms vs 0,05 ms)
Yazılarda herhangi bir bilgi bulunmadığı iddiası:
Sözleri okuduktan sonra muhtemelen GPU ile testi hızlandırmak isteyen ilk kişi benim...
Yazılarımı tekrar oku.
Ana kriter: MQL kodunun 1 onay işareti için "OpenCL stilinde" yürütülmesi, süreyi aşmalıdır = Number_of_Buffers * 0.35300 ms
MQL'deki algoritmanın hızını mikrosaniyelik bir doğrulukla (1000 mikrosaniye = 1 milisaniye) bulmak için test cihazında ve Total_Time / Number_Ticks'te (en üstteki mesajım) birkaç kez çalıştırmanız gerekecek.
Arabellek gecikmesi olmasaydı, kodum testi ~30 saniyede geçti - bu, "OpenCL stili" MQL'den (55 saniye) ~2 kat ve normal koddan (320 saniye) ~11 kat daha hızlıdır.
Diğer kriterler nelerdir?
OpenCL ile iletişiminizin deneyimine bakılırsa, her algoritmanın aptalca doğrudan hızlandırılmadığını zaten anlamanız gerekirdi. Burada temel sorunlardan biri, küresel belleğe erişimlerin en aza indirilmesidir.
Bu arada, şimdi benzer bir sorunu cihazın genel belleğine rastgele erişimle çözmem gerekiyor (bu rastgele erişim çok sık ve bu lanet olası bir ek yük). Moskova'yı açar açmaz kesinlikle karar vereceğim.
Test cihazı OpenCL için CPU seçmez - bu hiçbir yerde rapor edilmez!
Servis masasına yazın ve böyle bir özelliğe olan ihtiyacı gerekçelendirin.
Test cihazı kullanılmıyorsa, zaten yapılmıştır (bu benim uygulamam). Henüz bir test cihazında test etmedim.
Zaten her algoritmanın aptalca doğrudan hızlandırılmadığını yazdınız. Burada mosk'u dahil etmek gerekiyor ve ana sorunlardan biri de global belleğe erişimi en aza indirgemek.
Pekala, cho, şimdi cihazın global belleğine rastgele erişimle benzer bir sorunu çözmem gerekiyor (bu rastgele erişim çok sık). Moskova'yı açar açmaz kesinlikle karar vereceğim.
Beyni açmanızın zamanı geldi, çünkü 0.35300 ms özellikle clEnqueue[Read/Write]Buffer ()'ı ifade eder ve çekirdeğin içindeki global bellek erişimini değil.
İkincisi, çekirdeğin kendisini optimize ederek çözülür, ancak birincisi bir demir sınırlamasıdır ve beyin burada yardımcı olmayacaktır.