OpenCL カーネルのボトルネックを見つけようとしています。Mac OS X で OpenCL プログラムをプロファイリングできますか? http://www.gremedy.com/でgDebugger を見つけましたが、実行するには 10.5 または 10.6 が必要です。AMD SDK は、Linux と Windows のみをサポートしています。
Mountain Lion 用のプロファイラーはありますか?
OpenCL カーネルのボトルネックを見つけようとしています。Mac OS X で OpenCL プログラムをプロファイリングできますか? http://www.gremedy.com/でgDebugger を見つけましたが、実行するには 10.5 または 10.6 が必要です。AMD SDK は、Linux と Windows のみをサポートしています。
Mountain Lion 用のプロファイラーはありますか?
プロファイリング情報はどの程度詳細である必要がありますか?組み込みの内部プロファイラーを使用しても大丈夫ですか?
OpenCLキューは、CL_QUEUE_PROFILING_ENABLEフラグを使用して作成できます。
このようにして、実行したカーネルごとに次のことを確認できます。
C ++-Bindingsを使用すると、キューの作成は次のようになります。
_queue = new cl::CommandQueue(_context, _device, CL_QUEUE_PROFILING_ENABLE );
プロファイリング情報の抽出は次のようになります。
1)プロファイリングするエンキューされたカーネルによって配信されたイベントオブジェクトを(配列に)保存します。
cl::Event evt;
_queue->enqueueNDRangeKernel( _kernel, cl::NullRange, _range, cl::NullRange, NULL, &evt);
2)キューの実行後、プロファイリング情報を抽出します
std::vector<cl::Event> evts;
//add all events to this vector here
//cl::Event evt;
//_queue->enqueueNDRangeKernel( _kernel, cl::NullRange, _range, cl::NullRange, NULL, &evt);
//evts.push_back(evt);
uint64_t param;
for (unsigned int i=0; i<evts.size(); i++)
{
evts[i].getProfilingInfo(CL_PROFILING_COMMAND_QUEUED, ¶m);
printf("%u: %llu", i, param);
evts[i].getProfilingInfo(CL_PROFILING_COMMAND_SUBMIT, ¶m);
printf(" %llu", param);
evts[i].getProfilingInfo(CL_PROFILING_COMMAND_START, ¶m);
printf(" %llu", param);
evts[i].getProfilingInfo(CL_PROFILING_COMMAND_END, ¶m);
printf(" %llu\n", param);
}