在 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做出贡献,提出改进建议或为开源项目做出贡献。
| 比较 | WebGPU | Vulkan |
|---|---|---|
| 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 无人能敌。这一切都取决于您的预期应用。
相关文章:
在 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…...
亚马逊云服务器的价格真的那么贵吗?一年要花多少钱?
亚马逊Web服务(AWS)作为全球领先的云计算平台,其定价策略常常引起用户的关注。很多人可能会问:"AWS真的那么贵吗?"实际上,这个问题的答案并不是简单的"是"或"否",…...
Python学习篇:Python基础知识(三)
目录 1 Python保留字 2 注释 3 行与缩进 编辑4 多行语句 5 输入和输出 6 变量 7 数据类型 8 类型转换 9 表达式 10 运算符 1 Python保留字 Python保留字(也称为关键字)是Python编程语言中预定义的、具有特殊含义的标识符。这些保留字不能用作…...
C++字体库开发之字体回退三
代码片段 class FontCoverage { public: using SP std::shared_ptr<FontCoverage>; virtual ~FontCoverage() default; virtual void set(int index, FontTypes::CoverageLevel level) 0; virtual FontTypes::Coverag…...
python vtk lod 设置
在Python中使用VTK库设置Level of Detail (LOD)可以通过vtkLODProp3D类来实现。这个类允许你为一个模型指定不同级别的细节表示,从而在渲染时根据模型与摄像机的距离自动切换到更适合的表示。 以下是一个简单的例子,展示如何使用vtkLODProp3D来设置LOD&…...
Rhino 犀牛三维建模工具下载安装,Rhino 适用于机械设计广泛领域
Rhinoceros,这款软件小巧而强大,无论是机械设计、科学工业还是三维动画等多元化领域,它都能展现出其惊人的建模能力。 Rhinoceros所包含的NURBS建模功能,堪称业界翘楚。NURBS,即非均匀有理B样条,是计算机图…...
Unleashing Text-to-Image Diffusion Models for Visual Perception
mmcv的环境不好满足,不建议复现...
[2024]docker-compose实战 (1)前言
前言 本文用来记录使用docker-compose来实战搭建一个多项目的测试环境. 环境中包含nodejs, php, html, redis, MongoDB, mysql. 在本次部署流程中, 尽量保证原镜像的"干净简洁", 尽量不会往镜像中加入各种软件和插件, 所有的配置尽可能的在宿主机映射进去. 项目…...
并发编程面试题3
一、CountDownLatch,Semaphore的高频问题: 1.1 CountDownLatch是啥?有啥用?底层咋实现的? CountDownLatch 本质上是一个计数器,用于协调多个线程之间的同步。主要应用场景是在多线程并行处理业务时,需要等待其他线程处理完再进行后续操作,例如合并结果或响应用户请求…...
Movable antenna 早期研究
原英文论文名字Historical Review of Fluid Antenna and Movable Antenna 最近,无线通信研究界对“流体天线”和“可移动天线”两种新兴天线技术的发展引起了极大的关注,这两种技术因其前所未有的灵活性和可重构性而极大地提高了无线应用中的系统性能。…...
Polkadot 安全机制揭秘:保障多链生态的互操作性与安全性
作者:Filippo Franchini,Web3 Foundation 原文:https://x.com/filippoweb3/status/1806318265536242146 编译:OneBlock Polkadot 是一个创新的多链区块链平台,旨在实现不同区块链之间的互操作性和共享安全性。本文将详…...
python将多个文件夹里面的文件拷贝到一个文件夹中
网上可以搜到很多方式,有的好使,有的不好使,亲测如下脚本可用,并可达到我想要的效果,只将多个文件夹里的文件拷贝到一个文件夹中,不拷贝文件夹本身,如果需要文件夹也拷贝打开注释行即可 import…...
docker私有仓库harbor部署
docker私有仓库harbor部署 概述 Docker 官方镜像源被中国大陆政府封锁,导致无法在中国大陆的计算机上直接使用 Docker 拉取镜像,导致使用者一下子手足无措了,的确一开始会有很大的影响,为了应对这种影响我们可以自己构建私有仓库&…...
如何在Java中实现函数式编程
如何在Java中实现函数式编程 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java中,函数式编程是一种编程范式,它将计算视为数学函数…...
二叉树与堆相关的时间复杂度问题
目录 满二叉树与完全二叉树高度h和树中节点个数N的关系 向上调整算法: 介绍: 复杂度推导: 向下调整算法: 介绍: 复杂度推导: 向上调整建堆: 介绍: 复杂度推导:…...
goLang小案例-获取从控制台输入的信息
goLang小案例-获取从控制台输入的信息 1. 案例代码展示 package mainimport ("bufio""fmt""log""os" )var pl fmt.Printlnfunc main() {//控制台输出欢迎提示pl("Hello Go")fmt.Print("what is your name? ")…...
1-5题查询 - 高频 SQL 50 题基础版
目录 1. 相关知识点2. 例题2.1.可回收且低脂的产品2.2.寻找用户推荐人2.3.大的国家2.4. 文章浏览 I2.5. 无效的推文 1. 相关知识点 sql判断,不包含null,判断不出来distinct是通过查询的结果来去除重复记录ASC升序计算字符长度 CHAR_LENGTH() 或 LENGTH(…...
Modbus协议转Profinet协议网关模块连智能仪表与PLC通讯
一、现场需求:PLC作为控制器,仪表设备做为执行设备,执行设备能够实时响应PLC传来的指令,并且向PLC回馈数据,从而达到PLC对仪表设备进行控制和监测,实现对生产过程的精准控制。 二、解决方案:通过…...
新手必学:TikTok视频标签的使用方法
想让你的TikTok视频火起来,就得用对标签。标签能帮你的作品被更多人看到,也更有利于推广,可以为品牌增加曝光度、吸引更多观众、提高转化率和借势热门话题。那么应该如何选择标签并使用标签呢,看完这篇分享你或许会有所启发&#…...
AI是在帮助开发者还是取代他们
近年来,AI工具在软件开发和数据分析领域的应用日益广泛,它们对开发者的日常工作产生了深远的影响。AI工具通过自动化处理大量数据、优化代码质量、提高测试效率等方式,极大地提升了开发者的工作效率。然而,这同时也对开发者的传统…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
