当前位置: 首页 > news >正文

在 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 无人能敌。这一切都取决于您的预期应用。

相关文章:

在 WebGPU 与 Vulkan 之间做出正确的选择(Making the Right Choice between WebGPU vs Vulkan)

在 WebGPU 与 Vulkan 之间做出正确的选择&#xff08;Making the Right Choice between WebGPU vs Vulkan&#xff09; WebGPU 和 Vulkan 之间的主要区别WebGPU 是什么&#xff1f;它适合谁使用&#xff1f;Vulkan 是什么&#xff1f;它适合谁使用&#xff1f;WebGPU 和 Vulkan…...

亚马逊云服务器的价格真的那么贵吗?一年要花多少钱?

亚马逊Web服务&#xff08;AWS&#xff09;作为全球领先的云计算平台&#xff0c;其定价策略常常引起用户的关注。很多人可能会问&#xff1a;"AWS真的那么贵吗&#xff1f;"实际上&#xff0c;这个问题的答案并不是简单的"是"或"否"&#xff0c…...

Python学习篇:Python基础知识(三)

目录 1 Python保留字 2 注释 3 行与缩进 ​编辑4 多行语句 5 输入和输出 6 变量 7 数据类型 8 类型转换 9 表达式 10 运算符 1 Python保留字 Python保留字&#xff08;也称为关键字&#xff09;是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类来实现。这个类允许你为一个模型指定不同级别的细节表示&#xff0c;从而在渲染时根据模型与摄像机的距离自动切换到更适合的表示。 以下是一个简单的例子&#xff0c;展示如何使用vtkLODProp3D来设置LOD&…...

Rhino 犀牛三维建模工具下载安装,Rhino 适用于机械设计广泛领域

Rhinoceros&#xff0c;这款软件小巧而强大&#xff0c;无论是机械设计、科学工业还是三维动画等多元化领域&#xff0c;它都能展现出其惊人的建模能力。 Rhinoceros所包含的NURBS建模功能&#xff0c;堪称业界翘楚。NURBS&#xff0c;即非均匀有理B样条&#xff0c;是计算机图…...

Unleashing Text-to-Image Diffusion Models for Visual Perception

mmcv的环境不好满足&#xff0c;不建议复现...

[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 最近&#xff0c;无线通信研究界对“流体天线”和“可移动天线”两种新兴天线技术的发展引起了极大的关注&#xff0c;这两种技术因其前所未有的灵活性和可重构性而极大地提高了无线应用中的系统性能。…...

Polkadot 安全机制揭秘:保障多链生态的互操作性与安全性

作者&#xff1a;Filippo Franchini&#xff0c;Web3 Foundation 原文&#xff1a;https://x.com/filippoweb3/status/1806318265536242146 编译&#xff1a;OneBlock Polkadot 是一个创新的多链区块链平台&#xff0c;旨在实现不同区块链之间的互操作性和共享安全性。本文将详…...

python将多个文件夹里面的文件拷贝到一个文件夹中

网上可以搜到很多方式&#xff0c;有的好使&#xff0c;有的不好使&#xff0c;亲测如下脚本可用&#xff0c;并可达到我想要的效果&#xff0c;只将多个文件夹里的文件拷贝到一个文件夹中&#xff0c;不拷贝文件夹本身&#xff0c;如果需要文件夹也拷贝打开注释行即可 import…...

docker私有仓库harbor部署

docker私有仓库harbor部署 概述 Docker 官方镜像源被中国大陆政府封锁&#xff0c;导致无法在中国大陆的计算机上直接使用 Docker 拉取镜像&#xff0c;导致使用者一下子手足无措了&#xff0c;的确一开始会有很大的影响&#xff0c;为了应对这种影响我们可以自己构建私有仓库&…...

如何在Java中实现函数式编程

如何在Java中实现函数式编程 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在Java中&#xff0c;函数式编程是一种编程范式&#xff0c;它将计算视为数学函数…...

二叉树与堆相关的时间复杂度问题

目录 满二叉树与完全二叉树高度h和树中节点个数N的关系 向上调整算法&#xff1a; 介绍&#xff1a; 复杂度推导&#xff1a; 向下调整算法&#xff1a; 介绍&#xff1a; 复杂度推导&#xff1a; 向上调整建堆&#xff1a; 介绍&#xff1a; 复杂度推导&#xff1a;…...

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判断&#xff0c;不包含null&#xff0c;判断不出来distinct是通过查询的结果来去除重复记录ASC升序计算字符长度 CHAR_LENGTH() 或 LENGTH(…...

Modbus协议转Profinet协议网关模块连智能仪表与PLC通讯

一、现场需求&#xff1a;PLC作为控制器&#xff0c;仪表设备做为执行设备&#xff0c;执行设备能够实时响应PLC传来的指令&#xff0c;并且向PLC回馈数据&#xff0c;从而达到PLC对仪表设备进行控制和监测&#xff0c;实现对生产过程的精准控制。 二、解决方案&#xff1a;通过…...

新手必学:TikTok视频标签的使用方法

想让你的TikTok视频火起来&#xff0c;就得用对标签。标签能帮你的作品被更多人看到&#xff0c;也更有利于推广&#xff0c;可以为品牌增加曝光度、吸引更多观众、提高转化率和借势热门话题。那么应该如何选择标签并使用标签呢&#xff0c;看完这篇分享你或许会有所启发&#…...

AI是在帮助开发者还是取代他们

近年来&#xff0c;AI工具在软件开发和数据分析领域的应用日益广泛&#xff0c;它们对开发者的日常工作产生了深远的影响。AI工具通过自动化处理大量数据、优化代码质量、提高测试效率等方式&#xff0c;极大地提升了开发者的工作效率。然而&#xff0c;这同时也对开发者的传统…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

python打卡第47天

昨天代码中注意力热图的部分顺移至今天 知识点回顾&#xff1a; 热力图 作业&#xff1a;对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图&#xff0c;展示模…...