SDKは、デバッグツール、プラットフォーム、場合によっては拡張機能を提供しますが、OpenCLAPIは同じままです。任意のSDKにリンクでき、見つけることができる任意のOpenCLランタイムと互換性のある実行可能ファイルが生成されます。これらは開発者向けのSDKであることを忘れないでください。エンドユーザーは、ソフトウェアのビルドに使用したSDKを気にしないグラフィックスドライバー(OpenCL対応)しか持っていない可能性があります。
理想的には、プログラムにデフォルトのプラットフォームを使用する必要がありますが、ユーザーがそれをオーバーライドできるようにします(実行時にさまざまなプラットフォームを選択できます!)。ヒューリスティックを使用して、どのデバイスが最速かを判断することもできます。例:
- 利用可能な各プラットフォームを反復処理します
- プラットフォームごとに、各デバイスを繰り返し処理します
- このデバイスを適切な方法でベンチマークします
- 最速のものを選択してください
また、特定の拡張機能を使用している場合は、それらをサポートするデバイスのみを受け入れるようにしてください...
SDKを1つだけ使用して、実行時にプラットフォームを確認できますか?
はい、絶対に実行できますし、実行する必要がありますが、「プラットフォームのチェック」の意味が心配です。前述したように、SDKは、ビルドしたプログラムを実行できるプラットフォームにまったく影響を与えません。AMD SDKを使用してコードをビルドし、nVidiaグラフィックカードまたはIntelプロセッサを搭載したシステムで実行可能ファイルを正常に実行できます(唯一の違いは、AMD固有の拡張機能にアクセスできない可能性があることです。 SDKですが、拡張機能はAMDドライバーによって認識されるため、コードを実行するためにSDKをインストールする必要はありませんが、ビルドする必要があります)。