在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺談GPU的Web化—WebGPU

jf_uPRfTJDa ? 來源: 移動Labs ? 2023-05-31 09:50 ? 次閱讀

Labs 導讀

2023年4月6日,歷經(jīng)6年的標準制定與開發(fā),chrome瀏覽器在其113版本正式發(fā)布了WebGPU,標志著Web端正式進入GPU的新時代,旨在提供“現(xiàn)代3D圖形和計算能力”,讓高性能通用并行計算在Web側(cè)成為可能。

作者:周明洋

單位:中國移動智慧家庭運營中心 成都業(yè)務支持中心

Part 01WebGPU研發(fā)背景

早期,在使用GPU模塊開發(fā)Web應用方面,開發(fā)者更多的是使用2011年發(fā)布的WebGL API進行圖形繪制。這套API基于OpenGL ES,在一段時間內(nèi)是Web端進行底層GPU圖形繪制的唯一選擇,可編程GPU語言的加入,讓它在從事某些繪制工作的性能方面對Canvas2D保持一定的優(yōu)勢。該API通過canvas元素獲取WebGL上下文后才能使用,其以內(nèi)部全局狀態(tài)為中心而設計的狀態(tài)機式的API調(diào)用深受開發(fā)人員的詬病,開發(fā)人員必須小心構(gòu)建API的調(diào)用順序(過程式調(diào)用),管理狀態(tài)的開啟以及恢復,以使繪制結(jié)果正確,同時這在一定程度上導致了性能的開銷。

隨著科技的發(fā)展,GPU早已不是圖形繪制應用的專屬,在元宇宙、機器學習、大數(shù)據(jù)、神經(jīng)網(wǎng)絡等不同領(lǐng)域大放異彩,隨著算力需求的日益提升,GPU的作用愈發(fā)重要,與此同時,在桌面端出現(xiàn)了新一代的圖形API(Vulkan、Metal、DirectX12),它們采用面向?qū)ο蟮脑O計方案,為開發(fā)人員提供更加底層的接口訪問,更多的GPU使用權(quán),靈活的API調(diào)用方式以及通用并行計算能力,讓開發(fā)人員最大限度從GPU中榨取性能。

Web端同樣需要這些能力,基于現(xiàn)代圖形API的設計理念,WebGPU應運而生,它不是WebGL的一次升級,WebGPU擁有自身獨特的抽象設計,并不直接封裝某一特定的圖形API,以下是WebGPU的架構(gòu)示意圖。

99150ce4-feef-11ed-90ce-dac502259ad0.png

Part 02WebGPU中的重要概念

2.1適配器和設備

在開始了解WebGPU的相關(guān)規(guī)范時,最先接觸的便是適配器(adapter)和設備(device)的概念,下圖展示了從物理設備(GPU)到邏輯設備抽象架構(gòu)。

99221272-feef-11ed-90ce-dac502259ad0.png

適配器,即GPUAdapter。一個物理GPU設備對應一個GPUAdapter,計算機可能具有多個GPU設備(集成顯卡和獨立顯卡),適配器作為翻譯者角色,鏈接WebGPU與本機的圖形API。通過下述方式可以獲取相應的GPUAdapter。

99297fda-feef-11ed-90ce-dac502259ad0.png

這里的設備,即GPUDevice,是邏輯設備的概念,并不對應真正的GPU。GPU是共享資源,瀏覽器可以運行多個Web應用,每個Web應用都可以獨立使用GPU,需要一個類似代理人角色,幫助多個獨立的Web應用使用GPU相關(guān)的功能,這便是WebGPU設備的作用,GPUDevice對象是后續(xù)使用相關(guān)API的重要對象,從某種意義上它很像WebGL的上下文概念,但它并不與canvas強相關(guān)。通過下述方式獲取GPUDevice。

992f06f8-feef-11ed-90ce-dac502259ad0.png

2.2 著色器

著色器(shader)是運行在GPU的一段程序。現(xiàn)代GPU渲染是通過流水管線(可編程邏輯管線)的方式實現(xiàn)的,在管線執(zhí)行的某個階段(可編程部分)會執(zhí)行著色器代碼。如果你了解過WebGL,可能知道頂點著色器(vertex shader)和片段著色器(fragment shader),應用程序組織數(shù)據(jù)資源以變量(unifrom/attribute)的形式傳遞給著色器,著色器運行將執(zhí)行的結(jié)果傳遞給下一個階段進行處理。

著色器是開發(fā)人員操控GPU的重要工具,復雜計算、場景特效、圖像處理等均可交給著色器程序處理。WebGPU不僅含有頂點著色器和片段著色器、同時具備執(zhí)行通用并行計算的能力,即計算著色器(compute shader),它由WebGPU計算管線(下文管線概念介紹)承載,擁有比WebGL更強大的計算能力。WebGL采用GLSL語言(OpenGL采用的語言)實現(xiàn)著色器代碼,而WebGPU擁有重新設計的著色器語言WGSL,下面是著色器代碼與對應模塊(GPUShaderModule)的創(chuàng)建示例。

9935e6c6-feef-11ed-90ce-dac502259ad0.png

2.3 資源(緩沖、紋理、采樣器)

上述著色器的示例中,定義了一些變量,例如unfiorms、uTexture、uSampler、aPosition、aUv等,這些變量參數(shù)的值即對應外部應用程序的數(shù)據(jù)資源,這些數(shù)據(jù)會存儲在顯存中,最終會被傳入到著色器程序中運行以得到相應的結(jié)果。數(shù)據(jù)資源大體可分為四類:頂點屬性數(shù)據(jù)(vertex attribute)、著色器變量(uniform buffer)數(shù)據(jù)、紋理數(shù)據(jù)(texture)、采樣器(sampler)。

頂點屬性數(shù)據(jù)主要存儲頂點的位置坐標、法向量、紋理坐標(用于采樣紋理)等,是基本繪制所必須的。著色器變量數(shù)據(jù),則是著色器程序運行所需的通用數(shù)據(jù),例如仿射變換矩陣、場景光照參數(shù)、材質(zhì)參數(shù)等。紋理數(shù)據(jù)更多的用于存儲圖像資源,在繪制時常用于貼圖效果的實現(xiàn)。采樣器則是一種特殊資源,它指定紋理編碼和濾波需要的方式,例如紋理的放大與縮小,各向異性濾波,minmap生成等。對于頂點屬性數(shù)據(jù)和著色器變量數(shù)據(jù),其主要映射到GPUBuffer中,即頂點緩沖對象(VBO)和uniform緩沖對象(UBO),紋理數(shù)據(jù)則對應GPUTexture,采樣器則是GPUSampler對象。這三種類型的資源均由GPUDevice創(chuàng)建。以下是各類型資源創(chuàng)建的示例。

993c8526-feef-11ed-90ce-dac502259ad0.png

GPUBuffer的創(chuàng)建采用了緩沖映射(Buffer Mapping)機制,當某個顯存被映射了,CPU才能訪問它。上述例子中,在創(chuàng)建GPUBuffer時將mappedAtCreation設置為true,開啟映射機制,在設置完數(shù)據(jù)后結(jié)束映射。

2.4 綁定組

上述示例中分別創(chuàng)建了用于存儲頂點屬性的GPUBuffer對象,存儲uniform變量的GPUBuffer對象,存儲圖像資源的GPUTexutre對象以及采樣器對象。對于頂點屬性的GPUBuffer對象,將在后續(xù)的管線與命令編碼模塊中闡述其是如何傳入到GPU中。對于后述的3種資源(著色器變量、紋理、采樣器),則需要用一種有效的方式將它們提交給GPU,為此,WebGPU提出了綁定組概念,即GPUBindGroup,它是一種數(shù)據(jù)容器,用于將部分數(shù)據(jù)資源進行打組并傳遞給著色器程序,能高效地進行數(shù)據(jù)組織與分配。通過打組的數(shù)據(jù)組織形式,能夠減少CPU與GPU通訊次數(shù),從而提高性能,同時也方便不同行為的著色器共享相同的打組資源,實現(xiàn)資源的復用。下圖給出了WebGL與WebGPU不同的數(shù)據(jù)組織傳遞形式。

99458176-feef-11ed-90ce-dac502259ad0.png

從上圖可以看出,WebGL的API設計是圍繞內(nèi)部的全局狀態(tài)設定的實現(xiàn)的,通過API函數(shù)逐個將資源綁定到綁定點上,本質(zhì)上更改了內(nèi)部全局狀態(tài),而WebGPU則是將資源數(shù)據(jù)放入數(shù)據(jù)容器中,通過命令提交(編碼器與隊列介紹)的方式送入到GPU中。創(chuàng)建GPUBindGroup需要對應的描述符,其結(jié)構(gòu)如下。

994a7690-feef-11ed-90ce-dac502259ad0.png

綁定組有對應的布局(GPUBindGroupLayout),布局向著色器程序描述某個資源的類型(type),所屬組(group),對應的綁定點位(bingding)以及用于具體階段的著色器程序(visibility),仔細觀察上述著色器部分里給出的示例,你會發(fā)現(xiàn)@group(0) @binding(0)這樣的聲明,即表示該資源綁定在組0的0號綁定點上,綁定的布局需根據(jù)著色器程序中的設置進行對應填寫。GPUBindGroupEntry對象表明一個綁定位,在這個綁定位(resouce字段上指定)上會附上WebGPU創(chuàng)建的資源數(shù)據(jù)。以下是一個GPUBindGroup創(chuàng)建的簡單示例,我們將之前創(chuàng)建的GPUBuffer對象、采樣器與紋理對象打包到一個綁定組對象。

9951ba04-feef-11ed-90ce-dac502259ad0.png

2.5 管線

完成著色器模塊創(chuàng)建和數(shù)據(jù)資源準備之后,還需要進行一項重要的工作,即管線(Pipeline)的搭建。大多數(shù)開發(fā)者在開始學習圖形渲染時,首先接觸的便是渲染管線的概念,這是現(xiàn)代圖像渲染的重要機制,但在WebGL API設計中卻沒有體現(xiàn)出這一重要理念,零碎的API組織形式讓初學者很難將每一步與GPU管線聯(lián)系起來,WebGL要求開發(fā)人員自行組織應用程序的執(zhí)行流程,所以你會看到gl.bindVertexArray、gl.bindBuffer、gl.bindTexture、gl.useProgram這樣的API設計,按照不同需求綁定不同的資源或狀態(tài),從而實現(xiàn)不同物體或效果的繪制。WebGPU中的管線分為渲染管線和計算管線。

渲染管線(GPURenderPipeline)顧名思義是用于繪制的管線,通過該管線的作用,最終會生成一副2D圖像,該圖像可以在屏幕上展示,也可以渲染到幀緩沖區(qū)中(frame buffer)。創(chuàng)建GPURenderPipeline需要對應的描述符,其結(jié)構(gòu)如下。

99584e3c-feef-11ed-90ce-dac502259ad0.png

GPUVertexState與GPUFragmentState字段分別代表了頂點著色器和片段著色器可編程階段。GPUPrimitiveState用于指定圖元裝配形式,在進行光柵化時以何種圖元類型進行繪制。GPUDepthStencilState用于描述深度模版測試信息。GPUMultisampleState指定多重采樣,用于處理鋸齒效果。GPURenderPipeline創(chuàng)建示例如下。

9962aff8-feef-11ed-90ce-dac502259ad0.png

上述示例可以看出,在渲染管線中配置上了之前生成的兩個著色器模塊,同時也描述了頂點屬性(資源部分提到)在著色器中的布局。在頂點著色器中,有@location(0) aPosition與@location(1) aUv這兩個定義,分別代表傳入的頂點的位置屬性和uv坐標屬性,location(0)和location(1)是與管線配置你中的shaderLocation相對應的。

WebGL在大多數(shù)情況下僅是一套圖形繪制API,它很少會被用來進行其他事物處理,比如計算。計算管線(Compute Pipeline)的出現(xiàn)則賦予了WebGPU“計算能力”,它不是傳統(tǒng)渲染管線的一部分,用于GPU并行計算,生成的最終結(jié)果存儲于緩沖區(qū)中,該緩沖區(qū)可以存儲任何類型的數(shù)據(jù),計算管線只有一個compute階段,創(chuàng)建GPUComputePipeline需要對應的描述符,其結(jié)構(gòu)如下。

99694872-feef-11ed-90ce-dac502259ad0.png

GPUProgrammableStage表明這是一個可編程的階段,類似與GPUVertexState和GPUFragmentState。每個頂點的處理需要調(diào)用一次頂點著色器,片段著色器會執(zhí)行每個像素的處理,而計算著色器則根據(jù)開發(fā)人員定義的工作項(work item)進行調(diào)用,每個工作項對應一個線程(thread)。工作項的集合被分為工作組(work group),即是一組線程(thread block),這組線程內(nèi)可以共享內(nèi)存、相互通信及協(xié)調(diào)運算。在WebGPU中,工作組被模擬為三維網(wǎng)格,如下圖所示。

99701a1c-feef-11ed-90ce-dac502259ad0.png

每個最小立方塊(黑邊)可以看作是一個工作項,多個工作項集合成工作組(紅虛邊)。在計算著色器代碼中可以看到@workgroup_size(x, y, z)這樣的申明,即是告訴GPU這個計算著色器的工作組是多大,工作組尺寸(workdgroup_size)的設置大多數(shù)情況下取決于工作項坐標語義。下圖為簡單的GPUComputePipeline創(chuàng)建示例。

9978f236-feef-11ed-90ce-dac502259ad0.png

這是一個簡單的圖像灰度直方圖統(tǒng)計示例。通過GPU并行架構(gòu)處理,我們能夠忽略掉圖像像素的遍歷統(tǒng)計,極大加快計算的速度。

2.6 命令編碼和隊列

上述的工作可以看作是準備階段,主要進行數(shù)據(jù)準備和管線搭建兩項工作,在進行最后的繪制或計算時,則需要通過命令和隊列的形式實現(xiàn)。命令編碼器(GPUCommandEncoder)主要常用功能有兩個:創(chuàng)建通道編碼器(pass encoder)和緩沖資源(GPUBuffer/GPUTexture)復制。GPUCommandEncoder由設備對象形創(chuàng)建,如下:

99842e12-feef-11ed-90ce-dac502259ad0.png

WebGPU的通道分為渲染通道(render pass)和計算通道(compute pass),對應渲染管線和計算管線,兩類通道對象分別通過GPUCommandEncoder對象上的相應方法(beginRenderPass/beginComputePass)結(jié)合自身描述符實現(xiàn)創(chuàng)建與啟動,最終會得到通道編碼器對象GPURenderPassEncoder/GPUComputePassEncoder,這類編碼器是WebGPU API設計中的抽象概念,也是WebGL全局狀態(tài)設置的替代品。通過編碼器對象可以設置需要的管線、綁定組、頂點屬性緩沖并調(diào)用draw/dispatch函數(shù)進行繪制或計算。下面是編碼器對象的使用示例。

998b8540-feef-11ed-90ce-dac502259ad0.png

GPUCommandEncoder對象在調(diào)用finish函數(shù)后會得到一個命令緩沖區(qū)對象(GPUCommandBuffer),該緩沖區(qū)用于存儲GPU命令,這些命令的提交則是通過命令隊列(GPUQueue)的實施的,如下:

99923fe8-feef-11ed-90ce-dac502259ad0.png

Part 03結(jié)束語

WebGPU作為全新的API,為Web應用開發(fā)注入了新的活力,它實現(xiàn)了圖形繪制到通用并行計算的進步,讓GPU成為Web端應用的重要角色,是未來構(gòu)建高性能應用的關(guān)鍵。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 封裝
    +關(guān)注

    關(guān)注

    128

    文章

    8561

    瀏覽量

    144887
  • Web
    Web
    +關(guān)注

    關(guān)注

    2

    文章

    1284

    瀏覽量

    70902
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    4916

    瀏覽量

    130734
  • 適配器
    +關(guān)注

    關(guān)注

    9

    文章

    2036

    瀏覽量

    69357
  • 狀態(tài)機
    +關(guān)注

    關(guān)注

    2

    文章

    493

    瀏覽量

    28095

原文標題:淺談GPU的Web化—WebGPU

文章出處:【微信號:5G通信,微信公眾號:5G通信】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    淺談Web應用程序的壓力測試

    淺談Web應用程序的壓力測試摘要:壓力測試是Web應用程序測試必不可少的一項工作。現(xiàn)以一個用ASP.NET開發(fā)的信息管理系統(tǒng)為例,詳細論述如何使用ACT對W eb應用程序進行壓力測試。關(guān)鍵詞:
    發(fā)表于 10-10 15:23

    淺談Web Service優(yōu)缺點

    。消息可以是結(jié)構(gòu)的、帶類型的,也可以是松散定義的。3.B2B的集成Web Servic可用于B2B集成,通過Web Service,公司僅需把“商務邏輯”暴露給指定的合作伙伴,不管他們的系統(tǒng)在什么平臺上運行
    發(fā)表于 03-16 16:03

    【技術(shù)系列】淺談GPU虛擬技術(shù)(第一章)

    摘要: GPU深度好文系列,阿里云技術(shù)專家分享第一章GPU虛擬發(fā)展史GPU的虛擬發(fā)展歷程事實上與公有云市場和云計算應用場景的普及息息相關(guān)
    發(fā)表于 04-16 10:51

    GPU虛擬在哪里發(fā)生?

    GPU虛擬在哪里發(fā)生?它是否出現(xiàn)在GRID卡中,然后將vGPU呈現(xiàn)給管理程序然后呈現(xiàn)給客戶?或者,GPU的虛擬和調(diào)度是否真的發(fā)生在管理程序上安裝的GRID管理器軟件?是否使用了SR
    發(fā)表于 09-28 16:45

    如何初始4WEB SPI?

    你能告訴我如何初始4WEB SPI嗎?
    發(fā)表于 04-08 09:13

    請問Mali GPU的并行計算模型是怎樣構(gòu)建的?

    Mali T604 GPU的結(jié)構(gòu)是由哪些部分組成的?Mali T604 GPU的編程特性有哪些?Mali GPU的并行計算模型是怎樣構(gòu)建的?基于Mali-T604
    發(fā)表于 04-19 08:06

    數(shù)字可視Web組態(tài)軟件有哪些

    數(shù)字可視Web組態(tài)軟件有哪些?都有何優(yōu)缺點?
    發(fā)表于 09-26 08:19

    淺談進口泵的國產(chǎn)1

    淺談進口泵的國產(chǎn)
    發(fā)表于 05-20 14:24 ?18次下載

    基于Web挖掘的個性網(wǎng)絡學習系統(tǒng)設計

    設計了一種基于Web挖掘的個性網(wǎng)絡學習系統(tǒng),該系統(tǒng)給出了Web內(nèi)容挖掘、Web使用挖掘和Web結(jié)構(gòu)挖掘的結(jié)果,并結(jié)合其推薦結(jié)果為學習者提供
    發(fā)表于 02-25 16:09 ?7次下載

    什么是web安全工程師

    準備從事web安全這個行業(yè),我淺談自己對web安全工程師的理解。
    的頭像 發(fā)表于 03-15 10:16 ?7610次閱讀

    前沿開源技術(shù)領(lǐng)域解讀——開源大前端

    WebGPU 是由 W3C GPU for the Web 社區(qū)組所發(fā)布的規(guī)范,目標是允許網(wǎng)頁代碼以高性能且安全可靠的方式訪問 GPU 功能。Web
    的頭像 發(fā)表于 02-13 10:45 ?1213次閱讀

    Chrome發(fā)布首個WebGPU實現(xiàn)

    據(jù)并行計算。 WebGPU 初始版本可以在 ChromeOS、macOS 和 Windows 上使用,對其他平臺的支持將于今年晚些時候推出。 WebGPU 是由 W3C GPU for the
    的頭像 發(fā)表于 04-25 17:13 ?755次閱讀

    Rust游戲引擎Bevy已支持WebGPU渲染

    WebGPU 是由 W3C GPU for the Web 社區(qū)組所發(fā)布的規(guī)范,目標是允許網(wǎng)頁代碼以高性能且安全可靠的方式訪問 GPU 功能。Web
    的頭像 發(fā)表于 05-24 16:30 ?1956次閱讀
    Rust游戲引擎Bevy已支持<b class='flag-5'>WebGPU</b>渲染

    淺談基于Web的配電室監(jiān)控報警系統(tǒng)的設計與實現(xiàn)

    淺談基于Web的配電室監(jiān)控報警系統(tǒng)的設計與實現(xiàn) 張穎姣 安科瑞電氣股份有限公司 上海嘉定201801 摘要:設計基于當前Web應用系統(tǒng)開發(fā)中流行的5層架構(gòu)B/S模式,提出了配電室電能質(zhì)量監(jiān)測軟件
    的頭像 發(fā)表于 02-19 14:11 ?617次閱讀
    <b class='flag-5'>淺談</b>基于<b class='flag-5'>Web</b>的配電室監(jiān)控報警系統(tǒng)的設計與實現(xiàn)

    FUXA基于Web的過程可視軟件案例

    FUXA——基于Web的過程可視軟件
    發(fā)表于 04-24 18:32 ?7次下載
    主站蜘蛛池模板: 又粗又大又猛又爽免费视频 | 色www视频永久免费软件 | 色播影院性播免费看 | 亚洲情a成黄在线观看动 | 一国产大片在线观看 | h视频在线播放 | 亚洲欧洲综合网 | 中文字幕佐山爱一区二区免费 | 黄色一及毛片 | 天天狠天天透天干天天怕处 | 免费黄色在线观看 | ww7788色淫网站女女免费 | 天天射天天干天天色 | 91国在线啪精品一区 | 日本在线视频一区 | 久久亚洲国产午夜精品理论片 | 爱搞逼综合 | 特黄特色网站 | 日本成人一级片 | 国产美女亚洲精品久久久综合 | 欧美+日本+国产+在线观看 | 亚洲第一区视频在线观看 | 亚洲国产精品嫩草影院 | 久久婷婷午色综合夜啪 | 五月天丁香婷婷开心激情五月 | 国产精品9999久久久久仙踪林 | 四虎在线最新永久免费播放 | xxxx日| 六月天色婷婷 | 国产一级毛片国语版 | 一色屋网站| 俺不色| 日韩欧美卡一卡二卡新区 | 亚洲wwww| 5月丁香婷婷 | 天堂电影在线观看免费入口 | 色精品一区二区三区 | 人人艹人人草 | 国产一级特黄aaaa大片野外 | 美女免费观看一区二区三区 | 婷婷开心六月久久综合丁香 |