OpenCL:MQL5での内部実装テスト - ページ 20

 

コードが追加されます。

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:

コードが追加されます。

ありがとうございます。では、足りないのは、ハンドルの有効性をチェックする機能です。

CL関数から受け取るのはポインタの値だけで、ポインタそのものではないので、ポインタを別の場所に保存すると、無効なプロセス(コンテキスト、バッファ、プログラム、カーネルであっても)を削除しようとする事態が発生します。

機能を必要とします。

bool CLCheckHandle(int handle);
 
また、ウィジェットはCPUのメモリより少なく、同時に存在するすべてのコンテキストが同じメモリを使用するため、プログラム的にデバイスのメモリサイズを取得する必要があります。
 
Urain:
また、ビジョンはCPUよりも少ないメモリしか持たないが、同時に存在するすべてのコンテキストは同じメモリを使用するため、プログラムによってデバイスのメモリサイズを取得する必要がある。

負荷をかけるために、標準的なmqlの手段でカードの温度(とCPUも)を取得するのは良いことだと思います。

// ちょっと暴れてしまったので...。:)

 
MetaDriver:
このスレッド、全然読んでない人いるのかな? なんか一人芝居みたいなんだけど :)
 
OpenCLには、温度やGPU負荷を取得する機能はありません。
OpenCLオブジェクトのプロパティの取得は、近日公開予定です。
また、ハンドルチェックも実施します。
 
mql5:
1. OpenCLには、GPUの温度や負荷を取得する機能がない。
2. OpenCLオブジェクトのプロパティの取得は、近日中に利用可能になる予定です。
3.ハンドルチェックも実施する予定です。

1. 知っている。OpenCLを通す必要はなく、システムを通す必要があります。 アイデアは、機能をネイティブにすること(mql5プログラムからDLLを呼び出すことなく)だけです。

ここでは、優れた機能を紹介します。

TerminalInfoInteger

mql5プログラムの対応する環境プロパティの値を整数値で返す。

端末情報文字列

mql5プログラムの対応する環境プロパティの値を文字列で返します。

MQL5InfoInteger

実行中のmql5プログラムの対応するプロパティの整数型値を返す

MQL5InfoString

起動したmql5-programの対応するプロパティの文字列型の値を返します。

追加するのは論理的でいいと思います。

SystemInfoInteger であるため

システム情報文字列

コア数、オペレーティングシステムの名前とサイズ、メモリ量(合計)、使用可能(空き)メモリ量(RAMとディスクスペース)など、システム環境に関する必要なすべての情報へのアクセスを提供するものである。

結局、端末は何もない永遠の空間では機能しないのです。それ以外は、とても砂っぽい感じです。

2, 3.

4.必ず通常のバッファアクセス(cl_Read/WriteBuffer)を行い、両方の開始オフセット(mql-arrayのオフセットとcl-bufferのオフセットの両方)を指定すること。そうしないと、ほとんどすべての配列を2回コピーする必要があります - 本当に必要ですか?無から有に書き換える時間を無駄にするためにOpenCLで書いているわけではありません。それはフェアじゃない。:)

 
MetaDriver:
...

4. 通常のバッファアクセス(cl_Read/WriteBuffer)が既にあることを確認し、両方の開始オフセット(mql-array offsetとcl-buffer offsetの両方)を指定します。そうしないと、ほとんどすべての配列を2回コピーする必要があります - 本当に必要ですか?無から有に書き換える時間を無駄にするためにOpenCLで書いているわけではありません。それはフェアじゃない。:)

その意味を具体的に教えてください。

今のところ、おっしゃるようなシチュエーションには遭遇していません。

 
Urain:

その意味を具体的に教えてください。

何のためにあるのか、私はまだおっしゃるような場面に遭遇したことがないのです。

問題ありません。最近の事例を紹介します。江間家をつくる。

...........  
 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);
.........
..........

エキゾチックなものは必要ない。 ただ、ここと同じであってほしい。

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

 
MetaDriver:

問題ありません。最近の事例を紹介します。絵馬の家づくり

エキゾチックなものは必要ない、ここみたいなのがいいんです。

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



ああ、わかったよ、より複雑なアルゴリズムやメモリオーバーランを避けるために

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

で、コピーの段階でオフセットできるようにしたい。

100000個の要素をコピーして、998000個のシフトをするのは嫌だ。なぜなら、同じデータを何度もコピーするのではなく、すでに用意されているCLバッファから、新しいシフトを付けて新しいタスクに取り込むことができるからです。

SZY CLバッファのデータの一部を再割り当て、または上書きすることで、新たにtickから受信したデータを全データを購入することなく追加できるのも良いですね。実時間ではほとんど役に立ちませんが、テスターでは役に立ちます。