İşte herhangi bir DLL olmadan doğrudan MetaTrader 5 terminalinde OpenCL ile yapabilecekleriniz - sayfa 5

 
Renat Fatkhullin :

Bu arka plana karşı, AMD yalnızca açıkça daha hızlı matematik hesaplamaları (AMD'deki madenci çiftlikleri genellikle toplar) nedeniyle değil, aynı zamanda açık standart stratejileri (çok fazla açtılar ve halka tanıttılar) nedeniyle avantajlı görünüyor. AMD kartlarında OpenCL 2.0'ın piyasaya sürülmesi, bu özelliği CUDA'nın yeteneklerine çok yaklaştırdı ve artık CUDA'ya güvenmenin hiçbir anlamı yok .

Bu faydalı bir bilgi, yoksa yaklaşık 7 yıl önce CUDA ile oynadım, hala geçerli olduğunu düşündüm.

Soru - OpenCL altındaki hata ayıklayıcılar ne olacak? MT5 terminalinden bahsetmiyorum, genel anlamda. Şimdiye kadar yalnızca Intel'den gelen hata ayıklayıcıyı Visual Studio için bir eklenti ve ondan bağımsız bir hata ayıklayıcı (kullanımdan kaldırılmış) olarak gördüm. Ancak, Intel'den gelen işlemciler ve entegre grafikleri için özel olarak keskinleşme var gibi görünüyor. Ve genel olarak, paralel kodun nasıl hata ayıklanacağını anlamıyorum, benim için hala saf bir kara kutu.

 

CUDA ile yalnızca kendiniz için veya Nvidia kartlarının açıkça bulunmasını gerektirebileceğiniz belirli alanlar için çalışabilirsiniz.

Evet, CUDA eskiden daha fazla özelliğe sahipti. Ancak OpenCL 2.0 ile AMD donanımının piyasaya sürülmesi ve OpenCL 2.1'in yeni bir sürümünün kullanıma sunulmasıyla birlikte, satıcı kilitliliği altında oturmak mantıklı değil. Özellikle bu satıcı aynı zamanda işlevselliği de azaltıyorsa.

Maksimum kapsama açısından, tek bir seçenek var - geleneksel işlemcilerde iyi çalışan OpenCL. Yani, bir GPU'nun koşulsuz varlığını gerektirmek veya GPU ve CPU için kodun iki versiyonunu yazmak gerekli değildir. OpenCL kodu yazıldıktan sonra farklı konfigürasyonlarda çalışacaktır.

CUDA/OpenCL'de yalnızca özel hata ayıklayıcılarda hata ayıklayabilirsiniz. Burada bir mucize olamaz.

 
Renat Fatkhullin :

örnekte

if ((cl_ctx= CLContextCreate ())== INVALID_HANDLE )

mevcut bir CPU cihazı olan bir konfigürasyonda "OpenCL bulunamadı" mesajı görüntüleniyor

Ve bu yüzden -

if ((cl_ctx= CLContextCreate (CL_USE_ANY))== INVALID_HANDLE )

İşler

* soru, cihazın varsayılan seçimidir

 

O halde tüm bunları hiçbir alıntı olmadan ilahi biçimde elde etmek mümkün müdür? PPC algılama ve yaratma için ne kadar elverişsiz

Ve sinir ağları için, zaten standart sınıflara sahip olmanız gerekir ve opcl) kuyuslab gibi hemen kullanabilirsiniz.

"#define HL1Count "              + ( string )hl1NeuronCount + "                     \r\n"
           "#define HL2Count "              + ( string )hl2NeuronCount + "                     \r\n"
           //------------------------------------------------------------------------------------
           "#define NeuronSensitivity  "    + ( string )NeuronSensitivity_P + "                \r\n"
           //------------------------------------------------------------------------------------
           "#define sampleCount "           + ( string )sampleCount + "                        \r\n"
           //------------------------------------------------------------------------------------
           "#define signalCount "           + ( string )signalCount + "                        \r\n"
           //------------------------------------------------------------------------------------
           "#define StrArrSaSize "          + ( string )( sizeof (ArrSample) / sizeof ( float )) + "\r\n"
           "typedef struct{float C[StrArrSaSize];} ArrSa;                                   \r\n"
           //------------------------------------------------------------------------------------
           "#define StrArrWeSize "          + ( string )( sizeof (ArrWe) / sizeof ( float )) + "    \r\n"
           "typedef struct{float C[StrArrWeSize];} ArrWe;                                   \r\n"
           //------------------------------------------------------------------------------------
           "#define StrArrCrSize "          + ( string )( sizeof (ArrCr) / sizeof ( float )) + "    \r\n"
           "typedef struct{float C[StrArrCrSize];}ArrCr;                                    \r\n"
           //------------------------------------------------------------------------------------
           "#define Spread "                + ( string )(Spread_P * Point ()) + "               \r\n"
           //------------------------------------------------------------------------------------
           "#define Point "                 + ( string ) Point () + "                            \r\n"
           "#define SL "                    + ( string )(StopLoss_P * Point ()) + "             \r\n"
           "#define TP "                    + ( string )(TakeProfit_P * Point ()) + "           \r\n"
           //------------------------------------------------------------------------------------
           "                                                                                \r\n"
           "__kernel void Work(__global ArrSa *Sample,                                      \r\n"
           "                   __global ArrWe *Weights,                                     \r\n"
           "                   __global ArrCr *Result)                                      \r\n"
           "{                                                                               \r\n"
           "  int thread       = get_global_id(0);                                          \r\n"
           "                                                                                \r\n"
           "  //------------------Переменные нейронной сети---------------------------------\r\n"
 
Maxim Dmitrievsky :

O halde tüm bunları alıntı yapmadan ilahi bir biçimde elde etmek mümkün müdür? PPC algılama ve yaratma için ne kadar elverişsiz

Ve sinir ağları için, zaten standart sınıflara sahip olmanız gerekir ve opcl) kuyuslab gibi hemen kullanabilirsiniz.

O zaman neden olmasın? Bakın, MQL'nin bilemeyeceği tek bir özel fonksiyon yoktur. Bu işlevi OCL için MQL'de yazdım ve hatalarını ayıkladım, sonra her şeyi hackledim ve hepsi bu. OCL'ye bir kod dönüştürücü bile yapabilirsiniz, ancak bunu kendim için yapmakta pek bir anlam görmüyorum. Belki MQ yapar, ama bundan şüpheliyim.
 
Renat Fatkhullin :

Bu, yalnızca MQL5 kodundaki GPU üzerindeki hesaplamaların değil, aynı zamanda terminalin grafik yeteneklerinin bir gösterimidir:

Bir komut dosyası biçimindeki tam kaynak kodu ektedir. OpenCL 1.2'deki hata düzeltildi.

Ben de nakış yapmayı biliyorum. Ve bir daktiloda... (c) Bir ticaret terminali için tüm bunlar ne için?
 
Temsilciler için buluta gidecek mi?
 
GKS :
Temsilciler için buluta gidecek mi?
Değil
 

Her şey harika ama! OCL ve genel olarak tüm paralelleştirme araçlarıyla ilgili büyük bir sorun var - algoritmaların çok küçük bir kısmı etkili bir şekilde paralelleştirilebilir. Paralel hesaplama örneklerinde, dalgaların taklidi, topun yıkımı ile piramidin üzerine düşmesi, yani küçük parçacıklara bölünebilen ve her biri kendi başına hesaplanabilen her şey neden bu kadar seviliyor.

Handikap/değişim için, bunlar elbette sinir ağları, Fourier, Wavelet, filtreler vb. gibi çeşitli dönüşümler, hepsi mükemmel paralel. Ancak paralelleştirilemeyen doğrusal algoritmalar da var. Kural olarak, bu, algoritmanın bir sonraki adımının sonucunun bir önceki adımın sonuçlarına dayandığı zamandır.

Bunu şimdi 2 harika video alacağım ve test cihazımda her şey uçuyor diye düşünenler için yazdım.