Vulkan程式設計指南翻譯 第六章 著色器和管線 第4節 執行工作
6.4 執行工作
在前一節,你看到了如何使用vkCreateComputePipelines()構造一個計算管線並把大繫結到一個命令緩衝區。一旦管線被繫結,你可以用它來執行工作。
計算著色器作為計算管線的一部分,以分組的形式來執行,分組成為本地工作組。這些工作邏輯上速度一致的執行,在著色器裡被指定了固定的大小。本地工作組最大個數一般比較小,但是至少是128呼叫 × 128 呼叫× 64 呼叫。還有,在單一一個本地工作組裡最大呼叫個數也比總容量較小,且要求只能是128呼叫。因此原因,本地工作組從較大的組開始,優勢被稱為全域性工作組或者分發大小。從計算著色器中開始任務因此被稱為分發任務,或者分發。本地工作組邏輯上是一個三維結構,或者呼叫立體,計算一個或兩個溫度可以是單個呼叫,以保持工作組在該方向上扁平。同樣,這些本地工作組在三維上一起被分發,即使一個或多個維度是一個工作組深度。
用計算管線可用來分發任務的命令是vkCmdDispatch(),其原型如下:
voidvkCmdDispatch (
VkCommandBuffer commandBuffer,
uint32_t x,
uint32_t y,
uint32_t z);
將要執行任務的命令緩衝區通過commandBuffer傳遞。x,y,z每一個維度中的本地工作組數量通過x,y,z引數傳遞。一個有效的計算管線必須繫結到命令緩衝區的VK_PIPELINE_BIND_POINT_COMPUTE繫結點。當命令被裝置執行是,一個x × y× z大小的全域性工作組開始執行所繫結管線的著色器。
極有可能一個本地工作組在有效維度上與全域性工作組不同。例如,可以存在一個32 × 32 × 1分發64 × 1 × 1的本地工作組。
在vkCmdDispatch()中能用引數指定工作組的個數之外,也可能做到間接分發,在工作組中分發的個數來自緩衝區物件。這允許分發大小在使用一個緩衝區來間接分發構造命令緩衝區 然後把緩衝區內容寫入主機端之後計算。緩衝區的內容可被裝置更新,來給裝置提供工作。
vkCmdDispatchIndirect()的原型如下:
voidvkCmdDispatchIndirect (
VkCommandBuffer commandBuffer,
VkBuffer buffer,
VkDeviceSize offset);
包含該命令的命令緩衝區通過commandBuffer傳遞。和vkCmdDispatch()中傳遞的分發個數不一樣,工作組中每一個維度的大小被儲存在三個連續的uint32_t的變數裡,其在緩衝區物件buffer中起始偏移位置是offset。緩衝區中引數基本上代表了一個VkDispatchIndirectCommand型別的資料,定義為:
typedefstruct VkDispatchIndirectCommand {
uint32_t x;
uint32_t y;
uint32_t z;
}VkDispatchIndirectCommand;
緩衝區中的內容在裝置執行的命令緩衝區中vkCmdDispatchIndirect()命令到達之前不會被讀取。
工作組每一個維度的最大個數可通過檢查vkGetPhysicalDeviceProperties()呼叫得來的裝置的VkPhysicalDeviceLimits型別資料的maxComputeWorkGroupCount成員來獲知,在第一章“Vulkan簡介”中獎結果。在vkCmdDispatch()呼叫中超過了這個限制或者在vkCmdDispatchIndirect()裡使用了超出限定值的將會導致為定義(很有可能是壞的)的行為。
相關推薦
Vulkan程式設計指南翻譯 第六章 著色器和管線 第2節 SPIR-V 概述
6.2 SPIR-V 概述 SPIR-V著色器嵌入在module裡。每一個module都可以包含一個或多個著色器。每一個著色器都有一個固定名字入口點和著色器型別,這用來定義著色器在哪個著色階段來使用。入口點之著色器開始執行時的起始位置。一個SPIR-Vmodule都隨著
Vulkan程式設計指南翻譯 第六章 著色器和管線 第4節 執行工作
6.4 執行工作 在前一節,你看到了如何使用vkCreateComputePipelines()構造一個計算管線並把大繫結到一個命令緩衝區。一旦管線被繫結,你可以用它來執行工作。 計算著色器作為計算管線的一部分,以分組的形式來執行,分組成為本地工作組。這些工作邏輯上速度一
Vulkan程式設計指南翻譯 第六章 著色器和管線 第3節 管線
6.3 管線 如你在前面小節所讀到的,Vulkan使用著色器module來表示一系列的著色器程式通過把module 程式碼交給vkCreateShaderModule()可以建立著色器module,但是,在它們可以在裝置上被用來工作之前,你需要建立管線。在Vulkan中有
第四章 作用域和記憶體問題 第二節執行環境及作用域
1、執行環境的型別有什麼? 2、全域性執行環境是怎麼樣的? 3、全域性執行環境是何時銷燬? 4、程式中的執行流是由什麼機制控制的?
Vulkan程式設計指南翻譯 第七章 圖形管線 第4節 建立簡單的圖形管線(下)
這一節實在太長了,拖了好久。還是分開發吧。 7.4.3 輸入組裝 圖形管線的輸入組裝階段接受頂點資料,並把它們分組,組成圖元,以供管線接下來的部分處理。它是通過一個VkPipelineInputAssemblyStateCreateInfo型別的資料描述的,通過V
編譯原理 第六章 屬性文法和語法制導翻譯
一、知識總結 首先學習了屬性文法,屬性文法是在上下文無關文法的基礎上為每個文法符號(終結符或非終結符)配備若干個相關的“值”,稱為“屬性”。屬性分為綜合屬性和繼承屬性。綜合屬性用於“自下而上”傳遞資訊,在語法樹中,一個結點的綜合屬性的值,由其子結點的屬性值確定。
編譯原理第六章-屬性文法和語法制導翻譯
第六章主要講了屬性文法、語義規則、基於屬性文法的處理、S屬性的自下而上計算、L-屬性文法的自頂向下翻譯等內容。一些基本的概念:屬性文法:是在上下文無關文法的基礎上為每個文法符號(終結符或非終結符)配備若干個相關的“值”(稱為屬性)。屬性:代表與文法符號相關的資訊,
第六章 初始繼承和多態
機制 但是 就是 概念 base 類的設計 類重寫 結構 冗余 1.繼承的概念 其實生活中有很多繼承的例子。例如,在馬路上跑的卡車,我們每天都乘坐的公共汽車,它們都是汽車。卡車有自己的特征:有貨艙,有額定載重,行為都是可以拉貨、卸貨。而公共汽車的特征和行為:有客艙,有載客量
R語言編程藝術_第六章_因子和表
女性 案例 子列 認識 改變 posit 程序實現 style 各類 一、因子與水平 1、簡單直接的認識因子和水平 因子可以簡單的理解為包含了更多信息的向量。即因子=向量 + 水平。(當然實際上它們內部機理不同)。水平是對於向量中不同值的記錄,以下面代碼為例: >
第六章 函數和調試
如果 怎麽辦 調試工具 將在 工具 argument real special one 在本章中,你將學習以下兩方面的基本知識: 函數 使用Python調試包pdb 函數是程序重要的組成部分,你將在第七章中使用它們,並學習如何使用隨機化
第六章 類型和成員基礎
frame 相同 vision 特殊 可見 要求 沒有 發送通知 操作符重載 目錄: 6.1 類型的各種成員 6.2 類型的可見性 6.3 成員的可見性 6.4 靜態類 6.5 分部類,結構和接口 6.6 組件,多態和版本控制 6.1 類型的各種成員 常量:數據值恒定不
【資料庫視訊】第六章 資料查詢和管理
一、簡單的SELECT語句 語法格式: SELECT [ALL|DISTINCT] select_list [INTO new_table] FROM table_source [WHERE search_conditions] [GROUP
玩轉資料結構——第六章:集合和對映
集合(Set) 什麼是集合? 集合是承載元素的容器; 特點:每個元素只能存在一次 優點:去重 二分搜尋樹的新增操作add:不能盛放重複元素 是非常好的實現“集合”的底層資料結構 /** * 集合的介面 */ public interface Set<
《C++ Primer Plus》學習筆記——第六章 分支語句和邏輯運算子(一)
本章內容包括: if 語句 if else 語句 邏輯運算子 &&、||和! cctype字元函式庫 條件運算子: ? : switch 語句 continue和break語句 讀取數字的迴圈 基本檔案輸入和輸出 if 語句 if (tes
第二篇 第六章建築裝修和保溫系統檢查(二)
alt 系統 第二篇 等級 分享圖片 img 裝修 image 分享 裝修材料分4個等級, 保溫材料分3個等級 第二篇 第六章建築裝修和保溫系統檢查(二)
第六章 分支語句和邏輯操作符
if 語句 if( test-condition ) statement 通常情況下,測試條件都是關係表示式。 if else 語句 if( test-condition ) stat
EffectiveJava第六章:列舉和註解
討論列舉和註解的最佳實踐。 30. 用enum代替int常量 列舉型別(enum type)是指由一組固定的常量組成合法值得型別,在程式語言還沒有引入列舉之前,表示列舉型別的常用模式是宣告一組具名的int常量,稱作int列舉模式。 int列舉模式的不
[第六章] 深入理解計算機系統第三版 家庭作業參考答案
6.22 磁軌數 d 與 r - x * r 成正比 設 d = k(r - x * r) = kr(1 - x) 總容量 c = 2πxk(r^2)(1 - x) = 2πk(r^2)(x - x^2) 上式實際上是關於 x 的二次式,其對稱軸為 1/2,即當
Atitit 現代資訊檢索 Atitit 重要章節 息檢索建模 檢索評價 第8章 文字分類 Line 210: 第9章 索引和搜尋 第11章 Web檢索 第13章 結構化文字檢索 目錄 L
Atitit 現代資訊檢索 Atitit 重要章節 息檢索建模 檢索評價 第8章 文字分類 Line 210: 第9章 索引和搜尋 第11章 Web檢索 第13章 結構化文字檢索 目錄 Line 1
Netty原始碼分析第7章(編碼器和寫資料)---->第2節: MessageToByteEncoder
Netty原始碼分析第七章: Netty原始碼分析 第二節: MessageToByteEncoder 同解碼器一樣, 編碼器中也有一個抽象類叫MessageToByteEncoder, 其中定義了編碼器的骨架方法, 具體編碼邏輯交給子類實現 解碼器同樣也