在 WebGPU 與 Vulkan 之間做出正確的選擇(Making the Right Choice between WebGPU vs Vulkan)

在 WebGPU 與 Vulkan 之間做出正確的選擇(Making the Right Choice between WebGPU vs Vulkan)

    • WebGPU 和 Vulkan 之間的主要區別
    • WebGPU 是什么?它適合誰使用?
    • Vulkan 是什么?它適合誰使用?
    • WebGPU 和 Vulkan 的代碼示例
    • WebGPU 與 Vulkan:決戰判決(The Showdown Verdict)

本來想了解一下WebGPU 與 Vulkan的關系與區別,百度搜的都不咋靠譜,偶然發下這篇文章,感覺寫的很好。

這里翻一下提供給需要的人。

PS:軟件翻的,手動修改了一些別扭的地方,整體還行!

原文章地址:Making the Right Choice between WebGPU vs Vulkan


對于需要與現代 GPU 硬件高效交互的開發人員,建議使用WebGPU ,尤其是對于基于瀏覽器的應用程序。它通過最小化 JavaScript 調用和最佳地管理計算資源,表現優于Vulkan。然而,對于多樣化的設備定位和光線追蹤的無縫集成,Vulkan仍然是首選。

在這里插入圖片描述


WebGPU 和 Vulkan 之間的主要區別

  • WebGPU 仍處于開發階段,是一種現代 API,旨在解決 WebGL 的局限性。Vulkan 是一種成熟的跨平臺行業標準圖形 API。

  • WebGPU 以最佳方式管理計算資源,減少過多 JavaScript 調用的開銷。Vulkan 提供對調度、同步和內存分配的細粒度控制。

  • WebGPU 將 Direct3D 12、Metal、Vulkan 等現代 API 的進步引入網絡,提供新的基于瀏覽器的編程潛力。Vulkan 適用于多種設備,提供頻繁的擴展和改進。

  • WebGPU 由 Apple、Google、Mozilla、Microsoft 和 Intel 等科技巨頭共同開發。Vulkan 允許通過 Khronos 做出貢獻,提出改進建議或為開源項目做出貢獻。

比較WebGPUVulkan
API 目的解決 WebGL 的限制并與現代 GPU 硬件有效交互跨平臺圖形和視頻壓縮行業標準 API
發展自 2017 年起由 W3C “GPU for the Web” 開發2013 年由 AMD 開發,后來捐贈給 Khronos 集團
可用性Chrome 113 首次發布,適用于 Windows、ChromeOS 和 MacOS。計劃針對 Android 和 Linux廣泛可用,不斷發展和頻繁擴展
優點自動處理異常,釋放驚人的性能,減少 JavaScript 調用的開銷提供對調度、同步和內存分配的細粒度控制
用例復雜的視覺效果、機器學習計算和計算資源優化設備定位、GPU編程、3D性能增強
擴展和添加W3C 正在設計中的預期功能改進頻繁擴展和添加功能和改進,Vulkan SC 1.0 適用于安全關鍵系統
表現基于 Vulkan 構建,性能比 WebGL 更好,CPU/GPU 使用率更均衡提供更高的性能、更低的 CPU 占用率,支持在多個 CPU 核心之間分配工作
未來的承諾有望成為 Web 開發人員在安全性、性能和可移植性方面的首選H.264、H.265 完全加速解碼,可移植性

WebGPU 是什么?它適合誰使用?

WebGPU 是一種專為圖形和機器工作負載而設計的高級 API。它的出現是為了解決 WebGL(一種基于瀏覽器的 GPU API,于 2011 年推出)的局限性,并將當代 GPU 的功能引入網絡。它旨在為尋求卓越實時數據處理和視覺效果卓越的網絡元素的開發人員和組織提供服務。

WebGPU 由 Apple、Google、Mozilla、Microsoft 和 Intel 自 2017 年以來合作開發,基于 Vulkan 構建。它目前可在 ChromeOS、macOS 和 Windows 上的 Chrome 113 上使用,而其他平臺仍在籌備中。

在這里插入圖片描述

1. WebGPU 的優點

  • 解決 WebGL 限制
  • 高效的 GPU 硬件接口
  • 最佳計算資源管理
  • 減少過多 JavaScript 調用的開銷
  • 提供靈活的編程模型
  • 支持在 GPU 上移植算法類

2. WebGPU的缺點

  • 仍處于早期發展階段
  • 當前默認禁用
  • 未來平臺可用性仍不明確

Vulkan 是什么?它適合誰使用?

Vulkan 是一種跨平臺的行業標準圖形 API,為開發人員提供了一個針對各種設備的平臺。它經常進行擴展和添加,并且不斷改進。Vulkan 適合那些需要在圖形編程中控制調度、同步和內存分配的開發人員。

Vulkan 生態系統還擁有潛在的關鍵實用程序,例如 Vulkan Portability 和 Vulkan SC 1.0 規范,它們可滿足安全關鍵型系統的需求,簡化圖形和計算需求。此外,它是第一個具有正式內存模型的圖形 API。

在這里插入圖片描述

1. Vulkan 的優點

  • 跨平臺特性
  • 頻繁的擴展和改進
  • 有效控制圖形編程的關鍵方面
  • 對抗平臺碎片化的潛力
  • 第一個具有正式內存模型的圖形 API

2. Vulkan的缺點

  • 不保證部署時間表和設備支持
  • 復雜 3D 模型的問題

WebGPU 和 Vulkan 的代碼示例

1. WebGPU 3D 環面(Torus)

此代碼說明了如何使用 WebGPU API 生成 3D 圓環。此示例需要支持 WebGPU 實驗功能的現代網絡瀏覽器。


// Create canvas and get WebGPU context
let canvas = document.createElement('canvas');
let context = canvas.getContext('gpupresent');// Create a GPU device
let adapter = await navigator.gpu.requestAdapter();
let device = await adapter.requestDevice();// Create a GPU buffer
let buffer = device.createBuffer({size: VERTEX_SIZE * NUM_VERTICES,usage: GPUBufferUsage.VERTEX,mappedAtCreation: true
});// Generate a 3D Torus
let vertices = new Float32Array(NUM_VERTICES * VERTEX_PER_QUAD);
for(let i = 0; i < NUM_VERTICES; i++) {let quadPos = i % VERTEX_PER_QUAD;let pos = [quadPos & 2, quadPos & 1];vertices.set(pos, i * VERTEX_SIZE / 4);
}// Unmap buffer and create a vertex buffer layout
buffer.unmap();
let vertexBuffers = [{arrayStride: VERTEX_SIZE, attributes: [{offset: 0, format: 'float32x4', shaderLocation: 0}]}];

2. Vulkan 三角形渲染

此示例演示了一個可以渲染簡單三角形的基本 Vulkan 程序。請確保您的環境中已設置 Vulkan SDK,并了解 Vulkan API 的基本概念,例如命令緩沖區、交換鏈和管道。

// Include Vulkan
#include <vulkan/vulkan.h>// Create an instance
VkApplicationInfo appInfo = {};
appInfo.pApplicationName = "Hello Triangle";
appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
appInfo.pEngineName = "No Engine";
appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0);
appInfo.apiVersion = VK_API_VERSION_1_0;VkInstanceCreateInfo createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
createInfo.pApplicationInfo = &appInfo;uint32_t glfwExtensionCount = 0;
const char** glfwExtensions;glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount);createInfo.enabledExtensionCount = glfwExtensionCount;
createInfo.ppEnabledExtensionNames = glfwExtensions;createInfo.enabledLayerCount = 0;if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) {throw std::runtime_error("failed to create instance!");
}

WebGPU 與 Vulkan:決戰判決(The Showdown Verdict)

圖形 API 戰場上,WebGPU 和 Vulkan 兩大巨頭相互對峙。根據您的使用情況和需求,其中一個可能會勝過另一個。以下是我們對不同受眾群體的判斷。

1. 尋求利用現代硬件功能的開發人員

如果您希望利用現代 GPU 硬件的功能,WebGPU 就是您的好幫手。它由技術巨頭共同開發,反映了現代 GPU 硬件的功能,并通過其計算著色器提供了靈活的編程模型。WebGPU 還附帶了流行的 JavaScript WebGL 庫中正在開發的端口,使其成為開發人員的潛在首選

在這里插入圖片描述

2. 需要高靈活性和控制力的 AR/VR 創作者

對于那些尋求完全控制內存分配、調度和同步的人來說,Vulkan 是無與倫比的。它的持續發展為開發人員提供了令人難以置信的靈活性和改進能力。除了完全加速的 H.264 和 H.265 解碼外,它還是需要高靈活性和控制力的 AR/VR 創作者的資源。

在這里插入圖片描述

3. 游戲制造商追求高性能

WebGPU在高性能游戲領域被視為一個有前途的競爭者。它基于Vulkan構建,并且在CPU/GPU使用方面比WebGL表現得更加均衡。此外,它允許游戲開發者將多種算法移植到GPU上,從而實現WebGL時代難以想象的卓越視覺效果。

在這里插入圖片描述

結論:

在圖形 API 的較量中,兩者勢均力敵。在與 GPU 硬件的現代、高效交互方面,WebGPU 勝出。但在廣泛的設備支持和控制方面,Vulkan 無人能敵。這一切都取決于您的預期應用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38578.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38578.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38578.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

修改CentOS7 yum源

修改CentOS默認yum源為阿里鏡像源 備份系統自帶yum源配置文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下載ailiyun的yum源配置文件 CentOS7 yum源如下&#xff1a; wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun…

AI領域最需要掌握的技術是什么?

在AI領域&#xff0c;掌握一系列核心技術和相關知識是非常重要的&#xff0c;以下是AI專業人士最需要掌握的一些關鍵技術&#xff1a; 1. **數學基礎** - 線性代數&#xff1a;用于處理向量和矩陣&#xff0c;是機器學習和深度學習的基石。 - 微積分&#xff1a;用于理解函數的…

SpringBoot項目使用WebSocket提示Error creating bean with name ‘serverEndpointExporter‘

問題描述&#xff1a;WebSocket在Controller中正常工作&#xff0c;但是在之后使用SpringBootTest進行單元測試的時候&#xff0c;突然提示WebSocket的相關錯誤。 錯誤提示&#xff1a; Exception encountered during context initialization - cancelling refresh attempt: …

項目中的代碼記錄日常

項目中的代碼記錄日常 /// <summary> /// 修改任務狀態 /// </summary> private void StartProcess21() {Process21Task new Thread(() >{while (CommonUtility.IsWorking){try{if (tPAgvTasksList.Count > 0){Parallel.ForEach(tPAgvTasksList, new Paral…

gitlab push的時候需要密碼,你忘記了密碼

情景: 忘記密碼,且登入網頁端gitlab的密碼并不能在push的時候使用,應該兩者是兩個不同的密碼 解決方法: 直接設置ssh密鑰登入,不使用密碼gitlab添加SSH密鑰——查看本地密鑰 & 生成ssh密鑰_gitlab生成ssh密鑰-CSDN博客

[OC]蘿卜圈Python手動機器人腳本

這是給機器人設置的端口&#xff0c;對照用 代碼 # #作者:溥哥’ ##機器人驅動主程序 #請在main中編寫您自己的機器人驅動代碼 import msvcrt def main():a"none"while True:key_input msvcrt.getch()akey_inputif abw:print(a)robot_drv.set_motors(1,40,2,40,3,…

uniapp學習筆記

uniapp官網地址&#xff1a;https://uniapp.dcloud.net.cn/ 學習源碼&#xff1a;https://gitee.com/qingnian8/uniapp-ling_project.git 顏色網址&#xff1a;https://colordrop.io/ uniapp中如何獲取導航中的路由信息&#xff1f; onLoad(e){console.log(e)console.log(e.w…

C#根據類的public屬性加載類中對應字段的XML

<?xml version"1.0" encoding"utf-8"?> <root><UserLogin ID"0" UserName"" UserPassWord"" Level"1" PowerName"默認用戶" PowerID"0" Remark"" IsEnabled"…

java八股文面試題

Java八股文面試題通常涵蓋了Java語言的基礎知識、高級特性、框架應用、數據庫操作等多個方面。以下是一些常見的Java面試題及其詳細回答&#xff0c;按照不同的主題進行分類&#xff1a; 一、Java基礎 面向對象的特征有哪些&#xff1f; 抽象&#xff1a;忽略與當前目標無關的…

2.2.4 C#中顯示控件BDPictureBox 的實現----ROI交互

2.2.4 C#中顯示控件BDPictureBox 的實現----ROI交互 1 界面效果 在設定模式下&#xff0c;可以進行ROI 框的拖動&#xff0c;這里以Rect1舉例說明 2 增加ROI類定義 /// <summary> /// ROI_single /// 用于描述圖片感興趣區域 /// type: 0:Rect1;1:Rect2;2:Circle ;3:…

C++ //練習 14.31 我們的StrBlobPtr類沒有定義拷貝構造函數、賦值運算符及析構函數,為什么?

C Primer&#xff08;第5版&#xff09; 練習 14.31 練習 14.31 我們的StrBlobPtr類沒有定義拷貝構造函數、賦值運算符及析構函數&#xff0c;為什么&#xff1f; 環境&#xff1a;Linux Ubuntu&#xff08;云服務器&#xff09; 工具&#xff1a;vim 解釋&#xff1a; 因為…

工業路由器與家用路由器的區別

在現代網絡環境中&#xff0c;路由器扮演著至關重要的角色。無論是在家庭網絡還是在工業網絡&#xff0c;選擇合適的路由器都至關重要。本文將從多個角度&#xff0c;對工業路由器與家用路由器進行詳細比較&#xff0c;幫助您更好地理解二者的區別。 1、安全性 工業路由器&…

大模型應用開發實戰基礎

大模型應用開發實戰基礎 1. 背景 大模型如日中天&#xff0c;各行各業都受它影響&#xff0c;但是作為程序員&#xff0c;除了讓它翻譯代碼不知道用它干什么&#xff0c;就像是拿著錘子的木匠&#xff0c;找不到釘子在哪。一邊聽著別人說2024是AI元年&#xff0c;一邊又不知所…

PostgreSQL的系統視圖pg_stat_database_conflicts

PostgreSQL的系統視圖pg_stat_database_conflicts 在 PostgreSQL 中&#xff0c; pg_stat_database_conflicts 是一個視圖&#xff0c;用于監控并發操作導致的數據庫沖突情況。了解和監控這些沖突可以幫助數據庫管理員調優系統&#xff0c;以更好地處理并發事務。 pg_stat_da…

中控室監控臺在水處理行業的作用

隨著工業化和城市化的快速推進&#xff0c;水處理行業的重要性日益凸顯。作為確保水質安全、提高水資源利用效率的關鍵環節&#xff0c;水處理廠需要高效、穩定地運行。在這個過程中&#xff0c;中控室監控臺發揮著不可或缺的作用。本文將從以下幾個方面&#xff0c;詳細闡述中…

fyne的MultiLineEntry設置大小

MultiLineEntry設置大小 在另一篇文章講過&#xff0c;放入border布局中&#xff0c;可以最大化MultiLineEntry。 這里再介紹另一種方法:SetMinRowsVisible() func (e *Entry) SetMinRowsVisible(count int) {e.multiLineRows counte.Refresh() }SetMinRowsVisible強制mult…

(域滲透提權)CVE-2020-1472 NetLogon權限提升漏洞

目錄 漏洞簡介 漏洞檢測 漏洞利用 使用腳本進行利用 使用Mimikatz進行利用 恢復用戶哈希 漏洞簡介 CVE-2020-1472是繼永恒之藍漏洞之后又一個好用的內網提權漏洞&#xff0c;影響Windows Server2008R2至2019的版本。只要攻擊者能夠訪問到目標域控并且知道域控計算機名即…

九淺一深Jemalloc5.3.0 -- ④淺*配置

目前市面上有不少分析Jemalloc老版本的博文&#xff0c;但最新版本5.3.0卻少之又少。而且5.3.0的架構與5之前的版本有較大不同&#xff0c;本著“與時俱進”、“由淺入深”的宗旨&#xff0c;我將逐步分析最新release版本Jemalloc5.3.0的實現。 另外&#xff0c;單講實現代碼是…

ShareSDK iOS端如何實現小紅書分享

下載SDK 請登陸官網 &#xff0c;找到SDK下載&#xff0c;勾選需要的平臺下載 導入SDK &#xff08;1&#xff09;離線導入將上述下載到的SDK&#xff0c;直接將整個SDK資源文件拖進項目里&#xff0c;如下圖&#xff1a; 并且勾選以下3個選項 在點擊Finish&#xff0c;…

實時跟蹤并顯示Docker容器的最新日志

可以用以下命令實時跟蹤并顯示Docker容器的最新日志 例&#xff1a; 這條命令 docker logs --tail 200 -f docker1 的作用是&#xff1a; docker logs: 這部分指示要查看 Docker 容器的日志。--tail 200: 這個選項指定只顯示最后的200行日志。這意味著你將只看到容器最近生…