OpenCL: MQL5'te dahili uygulama testleri - sayfa 33

 
Mathemat :

Andrey ve diyelim ki Intel + Radeon - gerçekten kötü mü?

Fena değil, sadece makul olmayan bir şekilde pahalı (işlemci yüzünden). :)

ZY Bu arada, uzun zamandır nVidia kartlarının hayranıyım. Hatta efsanevi GeForce 3 ile bir yerde bir sistem birimim bile var. Ve bilgisayar oyunlar için seçildiyse, o zaman "yeşil" grafik yongası üreticisine sadık kalmaktan çekinmem.

 
Gönderiyi buradan yakalayın. Onu buraya getirmek istemiyorum.
 
MetaDriver :
Cidden, ondan hangi meyve sularını sıkabileceğiniz çok ilginç. 2 Giga DDR5'e sahip olmanız özellikle iyi. Sonuç olarak, yerleşik GPU belleği, OpenCL hesaplamaları için ÇOK ciddi bir kaynak olabilir.

Bana sunulan bilgi setinden, ana kaynağın GPU çekirdeklerinin sayısı olduğu sonucuna vardım, eksiklikleri ile görev, yeni iş parçacıklarına sahip ardışık çekirdek lansmanlarına bölündü, ancak bu kaynaktan tasarruf etmek zor bir kart satın alırken, çünkü daha fazla çekirdek, fiyat daha yüksek.

İkinci en önemli şey, GPU belleğinin çalışma hızıdır (çünkü belleğe oldukça sık erişilir). GPU görevleri çoğunlukla oldukça ilkeldir ve sonucun çıktısını almak için belleğe erişmeden önce 1-2-3 işlemlerini kullanır. Herhangi bir karmaşık mantıksal işlem GPU için kontrendikedir, bu nedenle programcının düşüncesi bunları en aza indirmeye çalışacaktır, bu da mantıksal olarak daha sık bellek erişimine yol açacaktır. Burada seçenekler var, eğer görev programcı tarafından belleğe mümkün olduğunca az erişecek şekilde tanımlanmışsa, bu kaynak o kadar önemli değildir.

Ve üçüncü kaynak, GPU belleği miktarı diyeceğim. Çarpışma testlerinin sonuçlarına göre, aynı anda var olan bağlamların sayısından bağımsız olarak, bağlamlarda tahsis edilen tüm belleğin bir bellek alanına dağıtıldığını ve örtüşmediğini öğrendim. Bir örnekle açıklayayım: Her birinde arabelleklerin cihazın belleğinin 1/4'üne dağıtıldığı N bağlamınız varsa, aynı anda 4 tür bağlamınız olabilir.Beşinci bağlam altında, oluştursanız bile , bellek tahsis edilmeyecek çünkü zaten tümü önceki bağlamlar tarafından dağıtılmıştır . Her ne kadar öncekilerden herhangi birinde belleği boşaltmış olsanız da (diğer bir deyişle, arabelleği (a) silmek) yer görünecek ve beşinci bağlam iyi çalışacaktır.

Renat :

Henüz çok erken - OpenCL programlarının GPU aksaklıkları ve OpenCL programlarının kendileri nedeniyle tüm ağı kapatmamasını sağlamamız gerekiyor.

Aslında, OpenCL programları, programın çalıştığından ve bilgisayarı öldürmediğinden emin olmak için yerel aracılar üzerinde test çalıştırıldıktan sonra ağa bırakılabilir.

Dağıtılmış bir paralel hesaplama ağının görevi. Adın kendisi hazırlıksız okuyucunun kafasını karıştırabilir. Çok çekirdekli makinelerde dağıtılmış bir ağ düzenlemekle ilgili sorunlarınız varsa, şimdi bunlar kare olacak. Tüm çekirdekler, ayrı görevler gerçekleştirdikleri için ağın ayrı birimleri olarak kabul edilebilir. Ancak daha önce, yürütme hızları maksimum 2-3 kat farklıydı (bunun için yavaş çekirdeklerde kısıtlamalar getirdiniz), dizilerin maksimum 10 ^ 7 olması nedeniyle çoğunluktaki bellek miktarı bir rol oynamadı. elemanlar (modern makineler için bu bir kuruştur).

Ancak GPU ile görev önemli ölçüde değişir. İlk olarak, yalnızca ~12 çift dizi 10^7 uzunluğundadır, bu zaten 1 GB'dir, çoğu kart için bu sınırdır. Ve CPU hesaplamalarında, çok sayıda arabellekle görevlerle kolayca karşılaşılabilir (tabii ki, GPU'da bir programcı ana bilgisayar belleğinin kullanımını önerebilir, ancak bu çözüm sanal bir RAM kullanmaya benzer, kısacası, kötü bir şey).

İkincisi, yürütme hızlarındaki fark, doğrusal olarak GPU'daki çekirdek sayısına bağlıdır. Ve kartlar arasındaki farklar 10-1000 kat.

Genel olarak, ağ oluşturma görevi, yürütülebilir programın sınıflandırılmasına indirgenir. CUDA profil oluşturucusuna dikkat edin. İstatistikleri, görevleri sınıflandırmak için temel alınabilir. Görev, çoğu zaman belleğe erişmek için harcanacak şekilde düzenlenmişse, büyük bellek boyutlarına sahip bir makine kümesi gerekir, ancak zamanın çoğu aritmetik için harcanıyorsa, çok sayıda çekirdeğe sahip bir küme gerekir. . Kümeler esnek olabilir veya içerebilir (bu bir uygulama meselesidir).

Zamanın kendisi tarafından uygulanan birleştirme nedeniyle görev biraz basitleştirilmiş olsa da. 12 çekirdekli bir kart muhtemelen 256 MB, 96 512 MB'dir. Ortalama olarak, üreticiler büyük bozulmalara izin vermezler (kullanıcının kendisini en affetmez için operatörleri eski taşa yapıştırabileceği veya tam tersi için CPU'nun aksine, yalnızca satın alırken paradan tasarruf etmek için yeni taşa minimum operatör yerleştirir) ).

Her ne kadar bence, OpenCL için bir hata ayıklayıcı oluşturmak ve buna dayanarak cihaz optimizasyonunu bayt kodunda korumak daha doğru bir yaklaşım olacaktır. Aksi takdirde, programcının programın muhtemelen hangi kartta çalışacağını tahmin etmesi ve olası bir kullanım ortamı için programın ayrıntılarının ortalamasını alması gerektiğinde assembler'a ulaşırız.

 
MetaDriver :

Söyle bana, eğer zor değilse, testi nasıl yapacağım? Nerede, neyi değiştirmeli? Kopyala, seç, sonuç:

Win7 x64 yapı 607

 
WChas :

Bu örneğin test cihazında "çalıştırılması" gerekmez. Komut dosyasını çalıştırmak için fare ile "Gezgin"den tablonun üzerine sürükleyin. Sonuç, Araçlar paneli Uzmanlar sekmesinde görüntülenecektir.

 

w7 32bit 4GB (3.5GB kullanılabilir)

Intel Core 2 Quad Q9505 Yorkfield (2833MHz, LGA775, L2 6144Kb, 1333MHz) vs Radeon HD 5770

 
Snaf :

w7 32bit 4GB (3.5GB kullanılabilir)

Intel Core 2 Quad Q9505 Yorkfield (2833MHz, LGA775, L2 6144Kb, 1333MHz) vs Radeon HD 5770

Güzel. Eh, şimdi nereye kazacağınızı biliyorsunuz ... :)
 
MetaDriver :
Güzel. Eh, şimdi nereye kazacağınızı biliyorsunuz ... :)

işlemciler zaten 2-3 nesil geride

ve video 5770 - 6770 -7770

:)

 
Urain :

Bana sunulan bilgi setinden, ana kaynağın GPU çekirdeklerinin sayısı olduğu sonucuna vardım, eksiklikleri ile görev, yeni iş parçacıklarına sahip ardışık çekirdek lansmanlarına bölündü, ancak bu kaynaktan tasarruf etmek zor bir kart satın alırken, çünkü daha fazla çekirdek, fiyat daha yüksek.

İkinci en önemli şey, GPU belleğinin çalışma hızıdır (çünkü belleğe oldukça sık erişilir). GPU görevleri çoğunlukla oldukça ilkeldir ve sonucu çıkarmak için belleğe erişmeden önce 1-2-3 işlemlerini kullanır. Herhangi bir karmaşık mantıksal işlem GPU için kontrendikedir, bu nedenle programcının düşüncesi bunları en aza indirmeye çalışacaktır, bu da mantıksal olarak daha sık bellek erişimine yol açacaktır. Burada seçenekler var, eğer görev programcı tarafından belleğe mümkün olduğunca az erişecek şekilde tanımlanmışsa, bu kaynak o kadar önemli değildir.

Ve üçüncü kaynak, GPU belleği miktarı diyeceğim. Çarpışma testlerinin sonuçlarına göre, aynı anda var olan bağlamların sayısından bağımsız olarak, bağlamlarda tahsis edilen tüm belleğin bir bellek alanına dağıtıldığını ve örtüşmediğini öğrendim. Bir örnekle açıklayayım: Her birinde arabelleklerin cihazın belleğinin 1/4'üne dağıtıldığı N bağlamınız varsa, aynı anda 4 tür bağlamınız olabilir.Beşinci bağlam altında, oluştursanız bile , bellek tahsis edilmeyecek çünkü zaten tümü önceki bağlamlar tarafından dağıtılmıştır . Her ne kadar öncekilerden herhangi birinde belleği boşaltmış olsanız da (diğer bir deyişle, arabelleği (a) silmek) yer görünecek ve beşinci bağlam iyi çalışacaktır.

Nikolai, bireysel değerler hiyerarşisi konusunda sana katılıyorum. Ancak bulutla ilgili olarak .. sorunlar hafızada kalacak. Bulut makinesindeki ilk iki kaynak yeterli değilse, istemci programı basitçe yavaşlayacaktır. Güçlü / zayıf yavaşla - onuncu soru. Eh, ipsyo'nun durumunu ona göre ayarlayacaklar. Ancak GPU belleği eksikliği ile basitçe düşebilir. Onlar. sürücü arabelleği ayırmayı reddederse - o kadar da kötü değil. Sorun, prensipte yeterli bellek olup olmadığıdır, ancak diğer GPU bağlamları (sistem olanlar dahil) için kalmaz. Ardından sürücü sadece kırılır (uygulamanın gösterdiği gibi). Belki bu sadece yakacak odundaki bir kusurdur, ancak varken OpenCL programlarının buluta girmesine izin vermemek daha iyidir. Uzak aracılar yapabilir, ancak bulut için buna değmez.
 

607 derlemesine güncelledikten sonra, opencltest aniden dizüstü bilgisayarımda çalışmaya başladı https://www.mql5.com/ru/code/825 , daha önce çalışmadı (iki hafta önce), "OpenCL bulunamadı" yazıyor gibi görünüyor

"Sırtımda bir yakalama hissediyorum", henüz Mandelbrot fraktallarıyla uğraşmadım ))))))))))))), ancak yeni bir dizüstü bilgisayarın tam teşekküllü için yararlı olamayacağı yine de güzel MT5 testi

OpenCL Test
OpenCL Test
  • oylar: 10
  • 2012.02.07
  • MetaQuotes Software
  • www.mql5.com
Небольшой рабочий пример расчета фрактала Мандельброта в OpenCL, который кардинально ускоряет расчеты по сравнению с софтверной реализацией примерно в 100 раз.