2017-11-05 15 views
0

私はOpenCL逐次プログラムと同じアルゴリズムからなる並列プログラムを持っています。私は実行時間の結果を、並列の場合は133000ミリ秒、並列の場合はカーネル時間として17ミリ秒としています。だから私は133000/17の速度を計算するとき、私は高速化として7823を得る。このようなスピードアップが可能かどうか?得られたオープンCLのスピードアップは7000を超えています

+0

あなたのプログラムは何をしていますか?あなたの質問にいくつかのコード(例:[MCVE])を表示してください。**あなたの質問を**編集して改善してください。 –

+1

これは本当に大きいです... 2つの出力を慎重に比較して、正常に完了したかどうか確認しましたか? –

+1

あなたのコードをどのようにコンパイルしたのか、あなたの質問で説明してください。より多くの詳細(いくつかのコード、コンパイルコマンド、ベンチマークプロトコル、実際のハードウェアとコンパイラ)がなければ、あなたの質問は広すぎます。 **あなたの質問を改善してください** –

答えて

0

このような高速化が起こる(;私には、7823の高速化が疑わしいが、完全に不可能ではないに見え、例えばthese slidesthatを参照してください100X率がより合理的と思われるが、かなり大きいようです。)かもしれません。高価なグラフィックスカードは、数テラフロップで動作するように噂されています。単一のコアはギガフロップだけを与えます。いくつかの特定のプログラムは、GPGPUでCPUよりも低速で実行することもできます。

CPUコードをベンチマークするときは、コンパイラで最適化を有効にしてください(たとえばgcc -O2GCCでコンパイルするなど)。最適化なし(例えば、gcc -O0)、CPU性能は遅い(例えば、gcc -O0gcc -O2で得られる2進数間の3倍因子が一般的である)。

BTW、cacheは、CPUのパフォーマンスに大きな影響を与えます。これを考慮せずに数値のCPUコードを書いたのであれば、それはかなり遅いかもしれません(異常なケースでは、それが悪い場合はlocality of referenceです)。

0

カーネル関数に問題があり実行されていない場合、時間の結果は不正確になります