![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
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
1) Pragmalar, desteğin kendisinin bir aktivasyonu değil (düşündüğünüz gibi) bir derleme zamanı destek gereksinimidir. Yani, video kartı destekliyorsa cl_khr_fp64 zaten etkindir.
2) Ve yürütme sırasında dizinin boyutu değişirse? Tabii ki, bu kodda özel olarak çıkarmak mümkündür, ancak bu hava durumunu iyileştirmeyecektir.
AMD CodeXL'de profil oluşturma yaptığımı hemen size bildiririm:
3) Sadece çekirdeğin hesaplama süresini alırsak, GPU üzerindeki herhangi bir paralelleştirilmiş görevin kazancı CPU çekirdek sayısı aşıldığında olacaktır. Yani 8 görev bile hızlandırmak için yeterli.
4) Yerel hesaplama formülüne gelince, benim de birçok sorum var. En büyük kazanç, work_dim=1 ile görevleri tüm video çekirdeklerine yaydığım zaman oldu ve bu BİRİMLER.
Ve öğelerinin sayısını bölmeniz gerektiğinde neden arabellek boyutunu bölüyorsunuz? - Ben de tam olarak bunu yaptım.
Hesaplamalar için hazırlık aşamasının anında gerçekleşmediğini ve arabellek aktarımının çok zaman aldığını göstermek için, sıcak görevlerde bile OpenCL kullanmanın tavsiyesi sorgulanır.
Ayrıca test cihazında CPU'nun seçilmediğini de gösterir.
Hesaplamalar için hazırlık aşamasının anında gerçekleşmediğini ve arabellek aktarımının çok zaman aldığını göstermek için, sıcak görevlerde bile OpenCL kullanmanın tavsiyesi sorgulanır.
Bu kesinlikle haber değil. Yani, bu konuda öfkeyle bağırmak tamamen saçmalık. Ancak ölçmek tamamen farklı bir konudur, pratik olarak faydalı olabilir.
Ayrıca test cihazında CPU'nun seçilmediğini de gösterir.
Belki bu haklı, ama aynı zamanda reasürans da olabilir. Her durumda, test sürecinin etkinliğini sağlamak için kasıtlı olarak yapıldığından eminim. Daha kesin olarak optimizasyonlar (çünkü çok iş parçacıklı). Burada, test etme ve optimizasyon kavramı açık bir şekilde ve tamamen ayrıysa (parti siyaseti düzeyinde), yani. test cihazını kullanarak bunları farklı boole türleri olarak tanımlayın. Uygun (resmi olarak farklı) yazılım desteği ile. (Bu birçok yönden iyi olurdu ve ben uzun zamandır bu ayrımın/ayrımın destekçisiyim. Farklı optimizasyon ve test başlatma düğmelerine kadar.)
Ardından teorik olarak test sırasında CPU seçimine izin verebilir ve optimizasyon sırasında devre dışı bırakabilirsiniz (bu doğrudur).
Evet, pragma ile çok ileri gittim. Vidyaha'nız üzerinde çalışmaya devam ederseniz ve kodu kimseye iletmezseniz, sorun değil. Ama eğer biri bunu bir Barts kartından okumak isterse (örneğin 6870), problemler olacaktır. Çekirdek kodu, herhangi bir hata göstermeden çalışmaya çalışacaktır.
Gerekli değil. Çekirdeğin kendisindeki işi artırmak genellikle çok daha faydalıdır. Bu, veri aktarımıyla ilişkili ek yükü dengelemek içindir.
Ve UNITS'iniz sadece bir dizi SIMD motorudur. Belgelere göre,
SIMD motorlarının sayısı kesinlikle bir donanım sabitidir ve küresel görevi tamamen bölmek zorunda değildir.
Ancak önce küresel görevin kendisini doğru bir şekilde değerlendirmeniz gerekir.
Test cihazındaki CPU'ya gelince - anladım, ikna oldum.
Bu kesinlikle haber değil. Yani, bu konuda öfkeyle bağırmak tamamen saçmalık. Ancak ölçmek tamamen farklı bir konudur, pratik olarak faydalı olabilir.
Ama nedense bu ölçümlerle uğraşmak zorunda kaldım... "İletim gecikmesi var" yazısını okuduğunuzda ne kadar büyük olduğunu hayal bile edemezsiniz.
Matematik : Ve UNITS'iniz sadece bir dizi SIMD motorudur. Belgelere göre,
SIMD motorlarının sayısı kesinlikle bir donanım sabitidir ve küresel görevi tamamen bölmek zorunda değildir.
Resmi belgeleri daha iyi kullanalım:
Çekirdek tarafından belirtilen çekirdeği yürütecek bir çalışma grubunu (çalışma grubunun boyutu olarak da adlandırılır) oluşturan çalışma öğelerinin sayısını tanımlayan work_dim işaretsiz değerler dizisine işaret eder.
Konu farklı. Birimlerinizi en azından varil olarak adlandırın, ancak gerçek şu ki: kodunuzdaki birimler genel görevi tamamen bölmez (benim için kesinlikle bölmez: 240/28 tamsayı değildir; sizin için de, çünkü birimleriniz var = 18). Bu bir eklemdir.
İkincisi: burada ve şimdi MQL5 için OpenCL ile çalışıyorsunuz (peki, bu yanlış, ama beni anladınız) ve bu hala Khronos'tan farklı bir OpenCL.
PS Bir köprü oluşturmadım, kendi kendine ortaya çıktı :)
Diğer kaynaklarda "hesaplama birimlerinin" ne olduğunu okuyun.
Bu arada, ikinci makalemden bir tablo. Tüm bu hesaplama birimlerini (18), akış çekirdeklerini (288), işlem öğelerini (1440), maksimum dalga cephesi/GPU (496) ve iş öğeleri/GPU'yu (31744) anlasaydınız iyi olurdu. Henüz anlayamadım.
Konu farklı. Birimlerinizi en azından varil olarak adlandırın, ancak gerçek şu ki: kodunuzdaki birimler genel görevi tamamen bölmez (benim için kesinlikle bölmez: 240/28 tamsayı değildir; sizin için de, çünkü birimleriniz var = 18). Bu bir eklemdir.
Peki neden bayt 240 sayısını temel aldınız? İki katı bayt olarak mı kesmeye karar verdiniz? Yapabilirsin ve yapabilirsin, ama vidyaha yapamaz. Yani 240/8 = 30 iki katına çıkar.
240 bayt, 30 double tamponun tamamıdır.
Ve "bir tamsayı bölenini al" sadece resmi belgelerden bir öneridir. Ve bu öneri mükemmel çalışmıyor.
VE BİRİMLER hakkında - bu benim şakam değil, OpenCL forumlarından tavsiye. Test ettim ve maksimum hıza ulaştım...
İkincisi: burada ve şimdi MQL5 için OpenCL ile çalışıyorsunuz (peki, bu yanlış, ama beni anladınız) ve bu hala Khronos'tan farklı bir OpenCL.
Ve "öteki" nedir?
Kendi uygulamalarınızı ve basit sarmalayıcılarınızı karıştırıyorsunuz. OpenCL MQL, Khronos OpenCL API'si üzerinde yalnızca bir sarıcıdır. OpenCL MQL ve Khronos arasındaki fark hakkında.
hesaplama birimleri, çalıştırılacak eşzamanlı görevlerin sayısıdır.
max wavefronts/GPU (496) ve work-ites/GPU (31744) yürütme kuyruğudur.
AMD CodeXL sonunda zaten zayuzat - tüm bu soruları yanıtlıyor.
hesaplama birimleri, çalıştırılacak eşzamanlı görevlerin sayısıdır.
max wavefronts/GPU (496) ve work-ites/GPU (31744) yürütme kuyruğudur.
AMD CodeXL sonunda zaten zayuzat - tüm bu soruları yanıtlıyor.
Bir şey anlamayabilirim, öyleyse özür dilerim. ama Alexei'yi şahsen tanıyor musun? Aleksey yoldaş mütevazı, "dürtme" ye tepki vermeyebilir. ama bir şekilde bir şey tarafından değil ..... bir tazı gibi konuşuyorsun, herkesten daha mı akıllı? Akıllı olmak günah değil, kardeşler arasında bununla övünmek ayıp ama...
Ben basit bir dostum ve konuya cevap veriyorum.
OpenCL'i gerçekten anlamak istiyorsanız ve sadece varsaymak istemiyorsanız, AMD CodeXL'i kurmanız ve C / C ++ ile kendi sarmalayıcınızı oluşturmanız gerekecektir.
Paketleyicimi gönderebilirim, ancak C/C++ pratiğim olmadığı için bazı mantıksız satırları var.
240 bayt, 30 double tamponun tamamıdır.
Peki, kendi kodunuza bakın:
Ve son satırda 240'ı 18'e bölersiniz (bunlar haritanızın birimleridir).
Ve "bir tamsayı bölenini al" sadece resmi belgelerden bir öneridir. Ve bu öneri mükemmel çalışmıyor.
MQL5 OpenCL ile çalışıyoruz. Sitemizin dokümantasyon bölümüne odaklanıyorum. Tabii bir de Khronos'a bakıyorum.
Diğer parametrelerle maksimumu aldım. Ve ne?
Kolay gelsin. GPU sineklerinde aynı anda çalışan 18 görev, 4-5 CPU iş parçacığında yapılabilecek maksimum sayıdır. Ve x86 öykünmesi üzerindeki CPU çok daha fazla iş parçacığı düzenleyebilir. En azından Intel ise. Eski Pentium G840 (2 çekirdekli), iki ünitede yaklaşık 70 kat hızlanma verdi! Şu anki durumumdan bahsetmiyorum ... nispeten konuşursak, i7 yapıyor.
İyi paralel bir görev ( MetaDriver 'ocl ile ilgili ilk daldan bir komut dosyasına bakın), GPU'da 1000 veya daha fazla hızlanma elde etmenize olanak tanır (MQL5'te CPU üzerinde 1 iş parçacığında yürütmeye kıyasla). Bulamazsan atarım, haritanda test ederim.
Tamam, bir göz atacağım, teşekkürler.