Skip to content

Latest commit

 

History

History
28 lines (16 loc) · 2.96 KB

threading.adoc

File metadata and controls

28 lines (16 loc) · 2.96 KB

スレッド化

Vulkan と OpenGL の大きな違いの一つは、Vulkan がシングルスレッドのステートマシンシステムに限定されていないことです。アプリケーションにスレッドを実装する前に、Vulkan でスレッドがどのように機能するかを理解することが重要です。

Vulkan Spec のスレッドの挙動 では、Vulkan の外部同期要素をアプリケーションがどのように管理するかを詳しく説明しています。重要なのは、Vulkan のマルチスレッドはホスト側のスケーリングを提供するだけであり、デバイスと相互に作用するものは依然として正しく同期される必要があるということです。

Vulkan の実装では、マルチスレッドを導入することは想定されていないため、アプリがマルチ CPU のパフォーマンスを求める場合は、アプリがスレッドの管理を担当することになります。

コマンドプール

コマンドプールとは、複数のスレッドにまたがってコマンドバッファを記録できるシステムです。1つのコマンドプールは外部で同期していなければならず、複数のスレッドから同時にアクセスすることはできません。ホストスレッドごとに独立したコマンドプールを使用することで、コストのかかるロックをかけずに複数のコマンドバッファを並行して作成することができます。

これは、コマンドバッファを複数のスレッドで記録しつつ、比較的軽いスレッドでサブミットを処理できるというアイディアです。

threading_command_buffers.png

Khronos のサンプルとチュートリアルでは、コマンドバッファを並列に記録する方法が詳しく紹介されています。

ディスクリプタプール

ディスクリプタプールは、ディスクリプタセットの割り当て、解放、リセット、および更新に使用されます。複数のディスクリプタプールを作成することで、各アプリケーションのホストスレッドは、各ディスクリプタプールのディスクリプタセットを同時に管理することができます。