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

 
Mathemat:

そして、あなたのOpenCL Emulatorの結果(あなたの2番目のテスト)は、私のものと比べても怪しく弱いようです(私は「GPU」で10秒程度でした)。

CPUに負荷のかかるGPUをあてにしていたのですが、私の方がコア数が多かったのです。そして私のは4コアのピュアCPU(デバイス1)でカウントしています。
 
joo: あなたはCPUに負荷のかかるGPUで計算をしていましたね。しかも私のは4コアのピュアなCPUでカウントしていました。

イマイチ、2コアのピュアなCPUをあてにしていたのですが。その論拠は3つある。1つ目は単純に鉄壁、2つ目と3つ目はそれほど強固なものではありません。

1.私のシステムには、OpenCLのデバイスが1つ しかありません。一方、これらのディスクのうち1台は、とにかくホスト、つまり素のCPUでなければならないのです。そ うなんです。GPUではありません、GPU Capsで確認しました。

だから、OpenCLをエミュレートするCPUデバイスは、SSE2以上をサポートする石なら何でもいいんじゃないかと思うんだ。統合型グラフィックスを搭載しているかどうかは関係ない。ちなみにIntel Core i5-750を含む。

2.私のCPUのグラフィックはIntel HD Graphicsです。パイプラインは6本ですが、プロセッサーは24個(スレッド、フライ?)あなたと私の両方が持っているものに近いグラフィックのスペックを丸で囲んでください。

フライの周波数は石の周波数よりずっと低いので、低い周波数で24個のGPUスレッドが純粋なCPUと比較して25倍以上実行速度が上がるとは思えません(実際そうでしたし)。そうなると残るのは、GPUではなく、OpenCLのCPUエミュレーションということになりますね。数え間違いかもしれませんが、Intel石のグラフィックアーキテクチャについて、より詳細なデータを持ち合わせていないのです。

組み込みグラフィックスは私とほぼ同じIntel HD Graphics 2000ですが、何かが曲がっているようです。ほぼ最高級のIntel Sandy Bridgeの石がこんなにも低い結果になるなんて、どう説明したらいいのかわからない。加速度は、ざっと見積もって50程度になるはずです。

3.正式には、Intelの組み込みグラフィックスは、Intel HD Graphics 2500と4000とともに、Ivy BridgeでのみOpenCLをサポート します(すでにAMDの統合型よりはるかに高速な64の高速フライが搭載される予定です)。そして今は、本当に存在しないかのようです。

私自身、なぜi3が計算を高速化できないのか、まだ解明できていません。

 
Mathemat:

...

私自身、なぜi3が計算を早めてくれないのか、まだ理解できていません。

万歳!効いてますね〜。

2012.04.09 15:32:01 Terminal CPU: GenuineIntel(R) Core(TM) i3-2100 CPU @ 3.10GHz with OpenCL 1.1 (4 units, 3092 MHz, 4008 Mb, version 2.0).
2012.04.09 15:32:01 Terminal MetaTrader 5 x64 build 619 起動 (MetaQuotes Software Corp.)

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CpuTime/GpuTime = 2.604419002781939
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Cpuでの結果 MachResult==3.64642 at 1594 パス
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) インティケータ数 = 16; ヒストリーバー数 = 50,000; パス数 = 4096
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CPU time = 243409 ms
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Gpuでの結果 MachResult==3.64642 at 1594 pass
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) インティケータ数 = 16; ヒストリーバー数 = 50,000; パス数 = 4096
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) GPU時間=93460ms
2012.04.09 15:54:41 ParallelTester_00-02-316x7x3j (USDJPY,H1) OpenCL init OK!
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.573211516347179
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) Cpuでの結果 MachResult==3.82222 at 3357 pass
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) インティケータ数 = 16; ヒストリーバー数 = 50,000; パス数 = 4096
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU time = 243907 ms
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) Gpuでの結果 MachResult==3.82222 at 3357 pass
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) インティケータ数 = 16; ヒストリーバー数 = 50,000; パス回数 = 4096回
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU時間=94787ms
2012.04.09 15:36:49 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!

 
Ashes:

イエーイ!効果あり!

2012.04.09 15:32:01 Terminal CPU: GenuineIntel(R) Core(TM) i3-2100 CPU @ 3.10GHz with OpenCL 1.1 (4 units, 3092 MHz, 4008 Mb, version 2.0).
2012.04.09 15:32:01 Terminal MetaTrader 5 x64 build 619 起動 (MetaQuotes Software Corp.)

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1)CpuTime/GpuTime = 2.604419002781939

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CPU time = 243409 ms
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Gpuでの結果 MachResult==3.64642 at 1594 pass
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) インティケータ数 = 16; ヒストリーバー数 = 50,000; パス数 = 4096
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1)GPU時間=93460ms

まあ、これは0.7よりはましです。少なくとも、ある程度のスピードアップがあります。それで、どうしたんですか?

とはいえ...非常に弱いんです。私のPentium G840では、このように。

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.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)CpuTime/GpuTime = 26.0524992748719
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Cpuでの実行結果 MachResult==4.04242 at 1775 pass
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) インティケータ数 = 16; ヒストリーバー数 = 50,000; パス数 = 4096
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)CPU時間 = 269461 ms
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Gpuでの結果 MachResult==4.04242 at 1775 pass
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) インティケータ数 = 16; ヒストリーバー数 = 50,000; パス数 = 4096
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)GPU時間=10343ms
2012.04.09 22:06:55 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) OpenCL init OK!

低価格の石が、同じ会社の高性能な石にほぼ一桁の差で勝つというのは、普通だと思いますか?ほぼ同じアーキテクチャで、少なくともi3の命令セットが貧弱ということはないのですが...。

 
Mathemat:

まあ、少なくとも0.7よりは多少なりともスピードアップしていますね。そして、何をしたのですか?

とはいえ...は非常に弱いです。私のPentium G840では、次のようになります。

格安の石が、同じ会社のもっと強力な石にほぼ一桁の差で勝つのは、普通なのかどうなのか、どう思う?ほぼ同じアーキテクチャで、少なくともi3の命令セットが貧弱ということはないのですが...。

HD Graphicsのドライバをアップデートし、新しいAMD OpenCL SDKを英語版でインストールしました。

パフォーマンスの違いに関する私の提案は次のとおりです:OCLの異なるバージョン+最初はCPUの周波数よりもGPUの方が有利です(GPU部分が同じであると仮定しています)。

 
Ashes: 性能の違いについては、OCLのバージョンの違い+最初はCPUよりGPUの周波数の方が有利(GPUの部分は同じと仮定)、と仮定します。

GPU OpenCLのデバイスは持っていません、joo さんへの返信を 読んでください。そして、あなたも持っていないはずです(統合型グラフィックスの話です)。全てはCPUコアのピュアエミュレーションで行われます。はい、そして周波数の優位性はせいぜい2倍程度で、性能は1桁 違うのです。これは矛盾しています。

2つ目は、バージョンの違いは、ここで紹介したすべてのテストの性能に影響を与えないということです。そして、1.1でも同じ速さでした(私のG840の場合)。

 
Mathemat:

GPU OpenCLのデバイスは持っていません、joo さんへの返信を 読んでください。そして、あなたも持っていないはずです(統合型グラフィックスの話です)。全てはCPUコア上のピュアエミュレーションで動いています。はい、そして周波数の優位性はせいぜい2倍程度で、性能は1桁 違うのです。これは矛盾しています。

2つ目は、バージョンの違いは、ここで紹介したすべてのテストの性能に影響を与えないということです。そして、1.1でも同じ速さでした(私のG840の場合)。

その通りみたいですね。喜ぶのが早すぎました。CPU負荷から判断すると、スクリプトのGPU部分は4コア/スレッドに並列化され(CPU負荷100%)、CPU部分は実質的に1コアで実行されている(25~30%)ように見えます。

つまり、4*0.7(オーバーヘッド?)~=2.8 - GPU/CPUと判明しました。

AMD SDKは、x64版では「他人の」ハードウェアのすべての機能を使用しない(私の理解する限りでは、あなたはx32を持っている)ことを除いて、あなたと私の間にこのような違いがある理由は明らかではない。 HD Graphicsドライバのバージョン(Intel Corporation、2012.02.14、8.15.10.2653)。

G840とi3-2100の比較(intel.comより)。

PS.おっと、お持ちの8040Mbを見逃していました(つまり、x32/x64はアウト)。

 
Mathemat:

第二に、バージョンの違いは、ここに掲載されているすべてのテストの性能に全く影響を与えません。そして1.1では、(私のG840で)同じように速くなりました。

OpenCL 1.2では、1.1に対して約10%の利得が得られました。

2012.04.10 09:41:19 ターミナル MetaTrader 5 x64 build 619 起動 (MetaQuotes Software Corp.)(以下、MetaTrader 5 x64 build 619)。
2012.04.10 09:41:19 Terminal CPU: GenuineIntel(R) Core(TM) i3-2100 CPU @ 3.10GHz with OpenCL 1.1 (4 units, 3092 MHz, 4008 Mb, version 2.0).

2012.04.10 09:41:30 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU時間=94365ms
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) インティケータ数 = 16; ヒストリーバー数 = 50,000; パス数 = 4096
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) Gpuでの結果 MachResult==3.52408 at 1914 pass.
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU time = 244968 ms
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) インティケータ数 = 16; ヒストリーバー数 = 50,000; パス数 = 4096
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Cpuでの結果 MachResult==3.52408 at 1914 pass.
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.595962486091242
2012.04.10 10:20:22 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU時間=93756ms
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) インティケータ数 = 16; ヒストリーバー数 = 50,000; パス数 = 4096
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) Gpuでの結果 MachResult==4.06735 at 1519 pass
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU time = 242426 ms
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) インティケータ数 = 16; ヒストリーバー数 = 50,000; パス数 = 4096
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Cpuでの結果 MachResult==4.06735 at 1519 pass
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.58571184775076


2012.04.10 11:33:50 ターミナル MetaTrader 5 x64 build 619 起動 (MetaQuotes Software Corp.社)
2012.04.10 11:33:50 Terminal CPU: GenuineIntel(R) Core(TM) i3-2100 CPU @ 3.10GHz with OpenCL 1.2 (4 units, 3092 MHz, 4008 Mb, version 2.0 (sse2,avx)).

2012.04.10 11:34:14 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU時間=86923ms
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) インティケータ数 = 16; ヒストリーバー数 = 50,000; パス回数 = 4096回
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) Gpuでの結果 MachResult==4.27665 at 970 pass
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU time = 246965 ms
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) インティケータ数 = 16; ヒストリーバー数 = 50,000; パス数 = 4096
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Cpuでの結果 MachResult==4.27665 at 970 pass
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.841192779816619
2012.04.10 11:47:50 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU時間=87610ms
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) インティケータ数 = 16; ヒストリーバー数 = 50,000; パス数 = 4096
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) Gpuでの結果 MachResult==4.43566 at 781 pass
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU time = 245873 ms
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) インティケータ数 = 16; ヒストリーバー数 = 50,000; パス数 = 4096
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Cpuでの結果 MachResult==4.43566 at 781 pass
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.806449035498231

 
データを含む2次元/多次元配列をGPUに渡す場合は、データ表現を構造体にして、その構造体を渡せばいいということですね?
 
Ashes: OpenCL 1.2では、1.1に対して約10%の利得が得られました。

ええ、そのことです。どうせ利得は何倍にもならないノンクリティカルなものだ。

唯一の違いは、AMD SDKは「海外」のハードウェアではすべての機能を使用しないことです。

私も当初はそのような仮説を持っていました。

しかし、GPU CapsユーティリティによるCPU OpenCLのテストは、いずれもかなりまともにパスしていることが確認されています。必要であれば、工具はトレーラーにあります。CPUのエミュレーションを回すだけ。

いくつかのテストでは、i3のfpsはG840の数倍になっています(4次元のクォータニオンユリアセットの場合、約17対4-5)。

つまり、ここでAMDがいい仕事をしたことがわかったわけです。

問題はターミナルで、なぜかG840は「理解」するが、AMD APP SDKをインストールした涼しいIntelストーンは「理解しない」のである。1週間前にservicedeskに メッセージを送ったが、今のところ返答はない。

ファイル: