記事"OpenCL: ネィティブから、より洞察力のあるプログラミングへ"についてのディスカッション - ページ 2

 
denkir: 例えば、統計的な計算を加えることもできる。

私はすでにそれをするつもりで、(ほとんどの場合)大規模な履歴に関する統計の収集だけになるだろう。ミューヴとは関係ないけどね。僕はムーブが大嫌いなんだ。)

引用符の同期。

これはGPUではなくCPU向けのタスクだ。すべてのタスクがGPUに向いているわけではないですよね。GPUはそのためにあるのだから、適したものを選んだほうがいい。

これは2次元配列になります。

将来的には3次元になると思います。同時に、任意の次元の配列を表示するGPUバッファの扱い方も明らかになるでしょう。

 
Mathemat:

すでにこれを行うつもりで、(ほとんどの場合)大規模なストーリーの統計を収集するだけになるだろう......。

将来の記事では3次元になると思います。同時に、GPUバッファに任意の次元の配列を書き込む方法と、それを使って作業する方法も明らかになるだろう。

素晴らしい!楽しみに待っていよう。

 
denkir: ターミナルにある全商品の相場の履歴を取る。相場を同期させる。

これらも同期させる必要がありますか?

追伸:ヘルプを読みました。

 

ハードウェアのアップグレードを考慮して、記事の結果を再計算した。

1年前:CPU Intel Pentium G840 (2コア @ 2.8 GHz) + AMDHD4870 ビデオカード。

最近: CPU Intel Xeon E3-1230v2 (4コア/8スレッド @ 3.3 GHz; i7-3770に若干遅れをとっている) + AMD HDビデオカード。6 870.

OpenCLでの計算結果をグラフに示す(横軸は記事で適用した最適化の数):


計算時間は秒単位で縦に表示されます。スクリプトの実行時間は、「CPU上で一撃で」(1つのコアで、OpenCLなしで)、95プラスマイナス25秒以内でアルゴリズムの変更によって変化した。

見ての通り、すべてがクリアに見えるが、まだあまり明白ではない。

明らかなアウトサイダーは、デュアルコアのG840だ。まあ、予想通りだった。さらに最適化を行っても実行時間はあまり変わらず、4秒から5.5秒のばらつきがあった。この場合でも、スクリプト実行の高速化は20倍以上の値に達した。

世代の異なる2枚のビデオカード(旧型のHD4870と最新型のHD6870)の競争では、ほぼ6870の勝利と考えてよいだろう。最適化の最終段階を除けば、古代の怪物4870はまだ名目上の勝利を勝ち取っている(ほとんど常に遅れをとっているが)。シェーダーが小さくなり、周波数も低くなったからだ。

これはビデオカードの世代開発の気まぐれだと思うことにしよう。あるいは私のアルゴリズムのエラーかもしれない。)

Xeonはすべての最適化において古代の4870よりも優れており、6870とほぼ互角に戦い、最後にはすべてを打ち負かすことさえできた。どんなタスクでも常にそうだとは言わない。しかし、このタスクは計算上かなり難しいものだった。結局のところ、2000×2000サイズの2つの行列の乗算だったのだ!

結論は簡単だ。i7のようなまともなCPUをすでに持っていて、OpenCLの計算がそれほど長くないのなら、追加の強力なヒーター(ビデオカード)は必要ないかもしれない。一方、(長い計算中に)数十秒間100%で石をロードするのは、コンピュータがこの時間「応答性を失う」ため、あまり快適ではありません。

 

こんにちは、

OpenCLがEveryTickモードでのEAのバックテストを どのようにスピードアップできるか、例を提示してもらえますか?現在、EveryTickモードで14年間のデータを実行するのに18分かかっています。 OpenCLでテスト時間を50%短縮できれば、多くのトレーダーが興味を持つだろうと思います。

 

素晴らしい記事ですね。私は、行の転送をループの外からプライベート・メモリに移動させる ことで、どのようにスピードアップするのか理解していませんでした。

私のコードでは影響はありませんでしたが、もちろんケースバイケースです。(しかしまた、何かを追加しても影響が0ということは、何かが速くなったということであり、利益はないということだ)。

OpenCLソースのこの部分:

      "  REALTYPE rowbuf[ COLSROWS ];                                               \r\n"
      "  for( int col = 0; col < COLSROWS; col ++ )                                 \r\n"
      "     rowbuf[ col ] = in1[ r * COLSROWS + col ];                              \r\n"

クランチ・ループの外に移動したところ

ありがとう。

 
この記事を読んで、とても勉強になりました。