Skip to content

Latest commit

 

History

History
39 lines (23 loc) · 4.49 KB

synchronization.adoc

File metadata and controls

39 lines (23 loc) · 4.49 KB

同期

同期は、Vulkan を使用する上で最も強力な部分の一つですが、同時に最も複雑な部分でもあります。アプリケーションは、さまざまな Vulkan 同期プリミティブを使用して同期を管理する責任があります。同期の使い方を誤ると、見つけにくいバグが発生したり、GPUが不必要にアイドル状態になってパフォーマンスが低下したりします。

同期の例Vulkan Synchronization の理解というブログ記事が Khronos によって提供されており、同期プリミティブの使用方法が紹介されています。また、Tobias Hector 氏による過去の Vulkan に関する講演のプレゼンテーションもあります。パート1スライド (動画) とパート2スライド (動画)

以下は VkEventVkFenceVkSemaphore の違いを示す概要図です。

synchronization_overview.png

検証

Khronos Validation Layer は、同期の検証を実装しています。これは、Vulkan SDK に含まれる Vulkan Configurator で簡単に有効にすることができます。同期の検証については、詳細なホワイトペーパーが作成され、Khronos Blog として公開されています。

パイプラインバリア

パイプラインバリアは、コマンドバッファが実行される際に、どのパイプラインステージが前のパイプラインステージを待つ必要があるかを制御します。

synchronization_pipeline_barrieres.png

パイプラインバリアは、最初は理解しにくいかもしれませんが、Khronos の講演やその他のリソースには、このテーマについてより深く掘り下げたものがたくさんあります。

VK_KHR_synchronization2

VK_KHR_synchronization2 拡張機能は、アプリケーション開発者にとっての複雑さを軽減するために、オリジナルのコア同期 API を見直し、オリジナルの API には無い機能を追加しています。

同期 API の違いや、新しい拡張機能への移行方法については、VK_KHR_synchronization2 の章を参照してください。