2012-04-19 8 views
0

私たちは主タスクをそれらに分散させるマルチデバイスシステムを持っています。各サブタスクはで構成されていますホストのCPUを判別する方法は?

  1. エンキュー・ライト・バッファ
  2. エンキューカーネル
  3. エンキューが

バッファを読んですべてのエンキューは非同期とコマンドキューがインオーダーされています。 cl_eventのコールバックをエンキュー読み出しバッファに割り当て、メインタスクが完了したかどうかを判断します。そうでない場合は、キューにもう1つのサブタスクをスケジュールします。

残念ながら、ホストのCPUをビジー状態に保つと、他のデバイス(GPU)からのコールバックや、仕事に関与していないほとんどのコールバックを処理できないことがわかりました。この考えは、メインタスクを完了するために使用するデバイスのリストからホストのCPUを除外することです。

+0

CPU以外のデバイスだけをポーリングするだけの理由はありますか? – KLee1

+0

ホストに複数のCPUがある可能性があるので – Kentzo

答えて

2

デバイスの核分裂を調べる必要があります。お使いのプラットフォームでこの機能がサポートされている場合は、任意のCPUコアの組み合わせでopenclデバイスを作成することができます。 Look here for details.この拡張機能により、ホストアプリケーション用にいくつかのコア数を節約できます。

私はさまざまなレベルのキャッシュメモリを共有するサブデバイスを作成する方法が好きです。 CL_DEVICE_PARTITION_BY_NAMES_EXT(このページの「CL_DEVICE_PARTITION_BY NAMES_EXT」を検索)に興味があるかもしれません。

+0

メインCPUが他のデバイスに影響を与えないかどうかをどのように判断できますか? – Kentzo

+0

私は、ホストがまだ残りのコアで動作することを確信しています。そうでない場合は、アプリケーションの親和性を設定できます。このためにWindowの "start"コマンドをチェックしてください。私はこれがopenclデバイスのクエリのCPUコア数を制限しているのかどうかはわかりません。 – mfa

+0

ホストCPUはちょうど1つのコアを持つことができます。私はスケジューラで使用されているデバイスのリストから削除する必要があります。 cl_device_idをシステムデバイスIDにマップする方法はありますか? – Kentzo

関連する問題