2013.11.2916:39:50 ParallelTester_00-01 x (EURUSD,H1) CLGetInfoInteger() returned 22013.11.2916:39:51 ParallelTester_00-01 x (EURUSD,H1) OpenCL init OK!
2013.11.2916:39:51 ParallelTester_00-01 x (EURUSD,H1) GPU time = 62 ms
2013.11.2916:39:51 ParallelTester_00-01 x (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12802013.11.2916:39:51 ParallelTester_00-01 x (EURUSD,H1) Result on Gpu МахResult==1.34787 at 699 pass
2013.11.2916:40:05 ParallelTester_00-01 x (EURUSD,H1) CPU time = 14492 ms
2013.11.2916:40:05 ParallelTester_00-01 x (EURUSD,H1) Соunt indicators = 16; Count history bars = 144000; Count pass = 12802013.11.2916:40:05 ParallelTester_00-01 x (EURUSD,H1) Result on Cpu МахResult==1.34787 at 699 pass
2013.11.2916:40:05 ParallelTester_00-01 x (EURUSD,H1) CpuTime/GpuTime = 233.741935483871
レナートなら、ここから何が学べるかわかるかもしれません。MQL5でも、新しい仕様で性能が向上する可能性は十分にありますね。
C#/C++に関しては、必要であれば、捨てることも可能です。メインは可能な限り最大の出力を得ることです。;)
このスレッドにあるスクリプトのいくつかを、そのようなマシンでテストしてみました。
CPU-Z
CUDA-Z
各スクリプトには、他の人がすぐに見つけてテストを実行し、必要に応じて結果を比較できるように、それが公開された記事へのリンクを提供します。
テスト1
テスト2
テスト3
スケール = 1000
テスト4
テスト5
テスト6
テスト7
テスト8
MetaDriverのqpu_EMA-Rainbow インジケータも試してみました。
CPUの場合、最大2倍まで向上することもあります。その結果がこちらです。
//---
Volodya(MetaDriver)さん、結果を見せてください。
追伸:カーネルコードでgpuEMA 関数のパラメータの型を__globalから__localに 変更しました。少し速くなったが、CPUに比べればまだ遅い。
MetaDriverのqpu_EMA-Rainbow インジケータも試してみました。
CPUの場合、最大2倍まで向上することもあります。その結果がこちらです。
Volodya(MetaDriver)さん、結果を見せてください。
追記:カーネルコードでgpuEMA 関数のパラメータを__globalから__localに 変更しました。少し速くなったが、CPUに比べればまだ遅い。
これは長い間議論されてきたことで、理にかなっています。 タスクが単純すぎるため、ビデオカードとの間でメモリを転送しても意味がありません。 GPUの利点は、より複雑なタスクに現れます。
トレーディング(デリバティブ)にGPUアクセラレーションを利用した例。
金融数学、特にデリバティブやオプション取引に関する著書で有名なマーク・ジョシ氏の仕事ぶりは、こちらでレポートしています。
http://ssrn.com/abstract=2388415
彼は、OOPスタイルの作品をCUDA GPUに変換した。2010年に始めて、その後一時休止し、2011年から2014年夏まで、動作するバージョン0.3まで作ったそうです。彼は100 倍の加速を実現した...。137倍-それもCONNECTEDアルゴリズムで、これは難しいですね。
この作品では、C++のQuantLibライブラリが使用されていますが、CUDA GPUで動作させるために、「OOP -> -> procedural approach」という流れで作り直さなければならなかった と、彼自身が認めています。
と書いている。
"LMMを用いたIRDのモンテカルロ・プライシングをGPU上に実装し、初期運動機能については最小二乗法を用いています。
kooderive.sourceforge.netからC++とCUDAの両方のコードを入手することができます。この論文はat ... 続きを読む
CUDAでは、これまでC++で使っていたコードとは全く別のものを使いました。要するに、データを中心概念として扱い、コードでデータを操作するのです。スタイルはとても機能的です。それまでのC++の実装はオブジェクト指向でしたから、かなり苦労しましたね。
彼のプロジェクト自体はオープンソースです。
http://sourceforge.net/projects/kooderive/