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

 
Mathemat:
これがトリックの正体です。CLContextCreate()内の引数は、少なくとも1つの外部GPUが存在する場合、明示的にCPUを選択することができません。

こんなはずじゃなかった -https://www.mql5.com/ru/docs/opencl/clcontextcreate

パラメータ

装置

[in] システム内のOpenCLデバイスの数(順不同)。CL_USE_ANY - 利用可能なあらゆるOpenCL対応デバイスを使用可能。 CL_USE_GPU_ONLY- OpenCLエミュレーションを無効にして、OpenCL専用デバイス(ビデオカード)のみを使用可能。

Документация по MQL5: Работа с OpenCL / CLContextCreate
Документация по MQL5: Работа с OpenCL / CLContextCreate
  • www.mql5.com
Работа с OpenCL / CLContextCreate - Документация по MQL5
 
Rosh: こんなはずじゃなかった -https://www.mql5.com/ru/docs/opencl/clcontextcreate

そう思います、そうであってはならないのです。しかし、この番号をどこで取得し、そして選択するのか。

https://www.mql5.com/ru/docs/opencl/clgetinfointeger? しかし、プロパティはデバイスの数であるCL_DEVICE_COUNTのみ です。

私のシステムには1つある、だから1が返ってくるのだ。

Документация по MQL5: Работа с OpenCL / CLGetInfoInteger
Документация по MQL5: Работа с OpenCL / CLGetInfoInteger
  • www.mql5.com
Работа с OpenCL / CLGetInfoInteger - Документация по MQL5
 
最新の619ビルドにアップグレードし、プログラムを再コンパイルすることを忘れないでください。このビルドでは、OpenCLの初期化原則が変更されています。
 
Mathemat:

そう思います、そうであってはならないのです。しかし、この数字をどこから得て、そして選ぶのでしょうか。



CL_USE_GPU_ONLYを指定してみると、ビデオカードが取られ、番号が不要になります。
 
Rosh: CL_USE_GPU_ONLYを指定すると、ビデオカードが取られ、番号が不要になるので試してみるとよいでしょう。
これは理解できる。しかし、CPU-ディスクリートグラフィックカードを指定したい。どうすればいいのか?
 

すごい!では、HD4200はOpenCLのデバイスではないのですね。

本当に純粋なCPUエミュレーションが行われているようですね。好きです!

i3に教えられたらどうしよう...。

i3のMT5でAMD APP SDKが正常に動作しない理由を漠然と考え始めている:すべてのコアが本物ではないこと、AMDにはハイパートレーディングの技術がないこと。おそらく、そのためにドライバーがおかしな形で挿入しているのでしょう。

それとも、MT5では、形式的には認識しているが、実際には何の役にも立たないという仕掛けなのでしょうか?

 
Mathemat:
ここにコツがあります。CLContextCreate()内の引数は、少なくとも1つの外部GPUが存在する場合、明示的にCPUを選択することができません。

これは、CPU(私の場合はデバイス1)上です。

2012.04.08 21:03:01     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      CpuTime/GpuTime = 74.73506433823529
2012.04.08 21:03:01     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      Result on Cpu МахResult==4.54091 at 2233 pass
2012.04.08 21:03:01     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 21:03:01     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      CPU time = 325247 ms
2012.04.08 20:57:36     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      Result on Gpu МахResult==4.54091 at 2233 pass
2012.04.08 20:57:36     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 20:57:36     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      GPU time = 4352 ms
2012.04.08 20:57:32     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      OpenCL init OK!

CLContextCreate(device)パラメータを スクリプトパラメータに引き込みました。 すべてのオプションを突き合わせることができます。

// もしかしたら、まだ秘密の組み合わせがあるのかも?:))

ファイル:
 

2012.04.08 22:01:08    Terminal    CPU: GenuineIntel  Intel(R) Pentium(R) CPU G840 @ 2.80GHz with OpenCL 1.2 (2 units, 2793 MHz, 8040 Mb, version 2.0 (sse2))

2012.04.08 22:05:59    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    CpuTime/GpuTime = 26.95192501511792
2012.04.08 22:05:59    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    Result on Cpu МахResult==4.98137 at 1628 pass
2012.04.08 22:05:59    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 22:05:59    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    CPU time = 267417 ms
2012.04.08 22:01:32    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    Result on Gpu МахResult==4.98137 at 1628 pass
2012.04.08 22:01:32    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 22:01:32    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    GPU time = 9922 ms
2012.04.08 22:01:22    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    OpenCL init OK!


ありがとうございます、知りませんでした...。

3倍のコアを搭載しているので、74.735/26.952~2.77と、3対1くらいの比率になるとは思っていました。コアが増えるということは、それだけ利得が増えるということですからね。AMDはここでもベイルアウトしましたね〜コア数の関係で!

でも、他の人はどうなんでしょうね。例えば、i5のSandy Bridgeを持っている人とか?

それに、もし誰かがブルドーザーeを持っていたら、すごくかっこいいかも...。とはいえ、FPUの問題なので、そうならないかもしれませんが。

 
MetaDriver:

そして今回のテストでは、なぜか私のアイロンがあなたのアイロンを破ってしまったのです。

2012.04.09 01:09:36        ParallelTester_00-02-316x7x3j (EURUSD,H1)          CpuTime/GpuTime = 161.0007722007722

2012.04.09 01:09:36    ParallelTester_00-02-316x7x3j (EURUSD,H1)    Result on Cpu МахResult==4.85831 at 2497 pass
2012.04.09 01:09:36    ParallelTester_00-02-316x7x3j (EURUSD,H1)    Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.09 01:09:36    ParallelTester_00-02-316x7x3j (EURUSD,H1)    CPU time = 208496 ms
2012.04.09 01:06:08    ParallelTester_00-02-316x7x3j (EURUSD,H1)    Result on Gpu МахResult==4.85831 at 2497 pass
2012.04.09 01:06:08    ParallelTester_00-02-316x7x3j (EURUSD,H1)    Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.09 01:06:08    ParallelTester_00-02-316x7x3j (EURUSD,H1)    GPU time = 1295 ms

2012.04.09 01:06:07        ParallelTester_00-02-316x7x3j (EURUSD,H1)           OpenCL init OK!


そして、OpenCL CPUでのテストです(4コア全てに100%負荷がかかっています)。

2012.04.09 01:11:15    ParallelTester_00-02-316x7x3j (EURUSD,H1)    GPU time = 68547 ms

2012.04.09 01:10:07    ParallelTester_00-02-316x7x3j (EURUSD,H1)    OpenCL init OK!


GPUは480個、CPUは4個、その差は120倍、つまり120倍もの計算が一度にできるのに、CPUはGPUに68547/1295=52.9倍しか遅れをとっていないのです。つまり、CPUのスレッドはGPUのスレッドよりも高速ですが、GPUはより多くの同時タスクを実行できるため勝っているだけなのです。正しく理解できているか?


CPUのスケーリングは100%よりずっと少ない(約76%)、代わりに4倍の3倍加速のみ208496/68547=3.04

もっとも、このテストの仕様が影響しているのかもしれませんが。

 

MDは このテストをCPU上で、グラフィックカードなしで、つまり直接CPUエミュレーションを選択して投稿しただけです。私の理解では、最初のテストはグラフィックカードで行います。

そして、あなたのOpenCLをエミュレートしたグラフィックカードの結果(あなたの2つ目のテスト)は、私のものと比べても怪しく低いようです(私は「GPU」で10秒程度でした)。

もし私が何か誤解していたら、訂正してください。