OpenCL: MQL5'te dahili uygulama testleri - sayfa 20

 

Kodlar eklenecek:

ERR_OPENCL_NOT_SUPPORTED           5100     
ERR_OPENCL_INTERNAL                 5101
ERR_OPENCL_INVALID_HANDLE           5102
ERR_OPENCL_CONTEXT_CREATE           5103
ERR_OPENCL_QUEUE_CREATE             5104
ERR_OPENCL_PROGRAM_CREATE           5105
ERR_OPENCL_TOO_LONG_KERNEL_NAME     5106
ERR_OPENCL_KERNEL_CREATE           5107
ERR_OPENCL_SET_KERNEL_PARAMETER     5108
ERR_OPENCL_EXECUTE                 5109
ERR_OPENCL_WRONG_BUFFER_SIZE       5110
ERR_OPENCL_WRONG_BUFFER_OFFSET     5111
ERR_OPENCL_BUFFER_CREATE           5112
 
Rosh :

Kodlar eklenecek:

Teşekkür ederim, o zaman tanıtıcının geçerliliğini kontrol etmek için yeterli fonksiyon yok.

CL işlevlerinden işaretçinin kendisini değil, yalnızca işaretçinin değerini alıyoruz, bu nedenle işaretçiyi farklı yerlerde saklarken, geçersiz bir işlemi silmeye çalışma durumu olacaktır (bağlam, arabellek, program veya çekirdek).

gerekli işlev:

 bool CLCheckHandle( int handle);
 
Ayrıca, aygıtın belleğinin boyutunu programlı olarak almanız gerekir, aksi takdirde bellek türleri işlemcinin operatörlerinden daha az belleğe sahiptir ve aynı anda var olan tüm bağlamlar aynı belleği kullanır.
 
Urain :
Ayrıca, aygıtın belleğinin boyutunu programlı olarak almanız gerekir, aksi takdirde bellek türleri işlemcinin operatörlerinden daha az belleğe sahiptir ve aynı anda var olan tüm bağlamlar aynı belleği kullanır.

Yükü dozlamak için standart mql araçlarını kullanarak kartın (ve CPU'nun da) sıcaklığını almak güzel olurdu.

// Ve sonra burada gerçekten ayrıldım .. :)

 
MetaDriver :
Bu konuyu gerçekten okuyan var mı? ve bir tür monolog yayınlamak gibi :)
 
OpenCL'de GPU'nun sıcaklığını ve yükünü almak için hiçbir işlevsellik yoktur.
OpenCL nesnelerinin özelliklerini alma yakında olacak.
Ayrıca kulpların kontrolünü de organize edeceğiz.
 
mql5 :
1. OpenCL'de GPU'nun sıcaklığını ve yükünü alma işlevi yoktur.
2. OpenCL nesnelerinin özelliklerini alma yakında olacak.
3. Ayrıca kulpların kontrolünü de organize edeceğiz.

1. Biliyorum. OpenCL aracılığıyla gerekli değildir, sistem aracılığıyla gereklidir. Buradaki fikir, işlevselliği yerel hale getirmektir (mql5 programlarından DLL çağrıları olmadan).

İşte bazı harika özellikler:

TerminalBilgiTamsayı

mql5 programının ortamının karşılık gelen özelliğinin tamsayı türünün değerini döndürür

TerminalInfoString

mql5 programının ortamının karşılık gelen özelliğinin dize türünün değerini döndürür

MQL5InfoTamsayı

Çalışan mql5 programının karşılık gelen özelliğinin tamsayı türünün değerini döndürür

MQL5InfoString

Çalışan mql5 programının karşılık gelen özelliğinin dize türünün değerini döndürür

Onlara eklemek harika ve mantıklı olurdu:

SystemInfoInteger ve buna göre

Sistem BilgisiDizesi

sistem ortamı hakkında gerekli bilgileri edinme yeteneği ile: çekirdek sayısı, işletim sisteminin adı ve bitliği, bellek miktarı (toplam), kullanılabilir (boş) bellek miktarı (RAM ve disk), vb. . vb.

Yine de terminal, sonsuzluğun boş sonsuz uzayında çalışmaz. Ve sonra bir şekilde kum gibi çıkıyor.

2, 3. Şerefe.

4. Her iki başlangıç ofsetini (hem mql dizisinin ofsetini hem de cl tamponundaki ofseti) gösteren arabelleklere (cl_Read/WriteBuffer) normal bir çağrı yaptığınızdan emin olun. Aksi takdirde, hemen hemen tüm dizilerin iki kez kopyalanması gerekir. İhtiyacımız var mı? OpenCL'de boştan boşa yeniden yazarak zaman kaybetmek için yazmıyoruz. Bu adil değil. :)

 
MetaDriver :
...

4. Her iki başlangıç ofsetini (hem mql dizisinin ofsetini hem de cl tamponundaki ofseti) gösteren arabelleklere (cl_Read/WriteBuffer) normal bir çağrı yaptığınızdan emin olun. Aksi takdirde, hemen hemen tüm dizilerin iki kez kopyalanması gerekir. İhtiyacımız var mı? OpenCL'de boştan boşa yeniden yazarak zaman kaybetmek için yazmıyoruz. Bu adil değil. :)

Ne demek istediğinizi belirtin.

Olması gereken için, tarif ettiğiniz durumlarla henüz karşılaşmadım.

 
Urain :

Ne demek istediğinizi belirtin.

Olması gereken için, tarif ettiğiniz durumlarla henüz karşılaşmadım.

Sorun yok. İşte son bir örnek. Ema ailesini inşa etmek

...........  
 while (limit/(cl_BufLength- 1 )> 0 )
     {
       for ( int i= 0 ;i<CountLine;i++)
         {
          dOut[i] =EmaBuffer[i].B[limit];   // переписываем начальные значения Ema
                            // в промежуточный массив, поскольку напрямую с указанного смещения 
                            // загрузить в буфер невозможно.
         }
       CLBufferWrite(cl_Mem_Out, dOut , 0 ,CountLine* sizeof ( double ));   // загружаем в gpu
       for ( int i= 1 ;i<cl_BufLength;i++)
         {
          dIn[i] =price[limit-i];                 // переписываем цены
                                                // То же самое с ценами.
         }
       CLBufferWrite(cl_Mem_In, dIn );   // загружаем в gpu

       CLExecute(cl_Krn, 1 ,kOfs,kWork);
.........
..........

Egzotik bir şey gerekli değildir. Sadece şöyle olmasını istiyorum:

int   ArrayCopy (
    void    dst_array[] ,        // куда копируем
    void    src_array[] ,        // откуда копируем
    int     dst_start=0 ,        // с какого индекса пишем в приемник
    int     src_start=0 ,        // с какого индекса копируем из источника
    int     cnt=WHOLE_ARRAY      // сколько элементов
   );

 
MetaDriver :

Sorun yok. İşte son bir örnek. Ema ailesini inşa etmek

Egzotik bir şey gerekli değildir. Sadece şöyle olmasını istiyorum:

int   ArrayCopy (
    void    dst_array[] ,        // куда копируем
    void    src_array[] ,        // откуда копируем
    int     dst_start=0 ,        // с какого индекса пишем в приемник
    int     src_start=0 ,        // с какого индекса копируем из источника
    int     cnt=WHOLE_ARRAY      // сколько элементов
   );



Evet, sanırım anlıyorum, algoritmaların karmaşıklığından ve uygulamadan kaynaklanan bellek taşmasından memnun değilsiniz.

 //Выполняет OpenCL программу.
bool   CLExecute( int           kernel,                 // хендл на кернел OpenCL
                 uint          work_dim,               // размерность пространства задач 
                 const uint &  global_work_offset[],   // начальное смещение индексов
                 const uint &  global_work_size[]     // общее количество индексов
                );

ve kopyalama aşamasında bile geçiş yapabilmek istiyorsunuz.

ZY 100000 elemanı kopyalamanın ve ardından 998000 ofset yapmanın gerekli olmadığını. Ancak, aynı verileri birçok kez kopyalamanıza değil, önceden hazırlanmış CL arabelleğinden yeni bir ofset ile yeni bir görev için almanıza izin verdiği için, şimdi olan ofset seçeneği bırakılmalıdır.

Tehdit ve boyutu yeniden bölümlendirmeyi eklemek veya CL arabelleğindeki verilerin bir kısmının üzerine yazmak güzel olurdu, daha sonra keneden yeni alınan veriler tüm verileri durdurmadan eklenebilir. Gerçek zamanlı olarak, bunun işe yaraması pek olası değildir, ancak test cihazında bu bir dalgadır.