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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/770214.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mac 上 Docker Desktop的免费开源的替代工具Colima

当谈到在macOS上运行容器时&#xff0c;Docker长期以来一直是首选。但是&#xff0c;必须解决使用适用于macOS的Docker Desktop时出现的一些限制&#xff0c;特别是对于大中型公司&#xff0c;最大的问题是需要购买许可证。另外&#xff0c;macOS 版Docker Desktop的性能问题也…

单调栈(左小大,右小大)

①寻找每个数左边第一个比它小的数 给定一个长度为 N 的整数数列&#xff0c;输出每个数左边第一个比它小的数&#xff0c;如果不存在则输出 −1。 输入样例&#xff1a; 3 4 2 7 5 输出样例&#xff1a; -1 3 -1 2 2 从左到右遍历&#xff0c;用单调递增&#xff08;栈底到栈顶…

c->c++(二):class

本文主要探讨C类的相关知识。 构造和析构函数 构造函数(可多个)&#xff1a;对象产生时调用初始化class属性、分配class内部需要的动态内存 析构函数&#xff08;一个&#xff09;&#xff1a;对对象消亡时调用回收分配动态内存 C提供默认构造和析构,…

行人检测技术:思通数科大模型在自动驾驶安全中的应用

在自动驾驶技术飞速发展的今天&#xff0c;行人检测已成为确保道路交通安全的关键技术之一。本文将探讨如何结合思通数科大模型和计算机视觉技术&#xff0c;实现在城市交通环境中对行人的高效检测&#xff0c;为自动驾驶车辆提供必要的行人安全保障。 引言 行人检测技术是利…

Dubbo内部通信流程

我当时在学习的过程中搭建过demo&#xff0c;具体流程就是&#xff0c;我先定义了一个api接口模块&#xff0c;还定义一个服务提供者模块&#xff0c;然后服务提供方实现该接口&#xff0c;定义该方法具体的实现impl类&#xff0c;服务提供方启动时&#xff0c;将要暴露的服务和…

【架构-20】死锁

什么是死锁&#xff1f; 死锁(Deadlock)是指两个或多个线程/进程在执行过程中,由于资源的互相占用和等待,而陷入一种互相等待的僵局,无法继续往下执行的情况。 产生死锁的四个必要条件: &#xff08;1&#xff09;互斥条件(Mutual Exclusion)&#xff1a;至少有一个资源是非共享…

跨阻放大器

#创作灵感# 最近涉及到微电流的监测项目&#xff0c;而里面的核心就是跨阻放大器&#xff0c;所以这里做一个简单的介绍&#xff0c;后续等项目完成了&#xff0c;再做一个实例的介绍。 #正文# 跨阻放大器&#xff08;Transimpedance Amplifier, TIA&#xff09;是一种将输入电…

Windows编程之多线程事件对象(Event Object)用法详解

目录 一、前言 二、基础用法 三、API详解 1.创建事件对象 2控制事件状态 3.等待事件对象&#xff1a; 四、实战案例 1.案例描述 2.代码设计 3.总设计代码 4.运行结果 一、前言 事件对象&#xff08;Event Object&#xff09;是我们在大型项目中&#xff0c;进行多线…

股价持续低迷,业绩颓势不减,冀光恒难救平安银行?

文&#xff5c;新熔财经 作者&#xff5c;宏一 周一一上班&#xff0c;就听到旁边的同事感慨今年股市行情很不错&#xff0c;尤其是银行股&#xff0c;上半年累计上涨了17.02%&#xff0c;是涨幅最大的板块。 听到这里&#xff0c;我美滋滋地打开自己的账户&#xff0c;结…

如何对低代码平台进行分类?

现在市面上的低代码平台就像雨后春笋一样冒出来&#xff0c;而且源源不绝&#xff0c;但总结下来&#xff0c;大致的也就以下三类。 一、 aPaaS多引擎类&#xff08;有很多成熟引擎、做好东西要一起用&#xff09; 这类产品包括&#xff1a;织信Informat&#xff08;国内&…

照明物联网:基于网关的智能照明云监控系统解决方案

智能照明系统就是利用物联网技术&#xff0c;将同一空间的照明、空调、新风、排风等系统共同接入物联网平台&#xff0c;实现了“设备互联、数据互通”的智慧物联能力。照明数据、环境监测数据通过网关上传云端&#xff0c;在云端进行统计分析并将结果通过各种终端共享&#xf…

MySQL—常用的数据类型

数据类型 整型 1.创建一个含有无符号/有符号整型的字段的表 CREATE TABLE L1(id tinyint unsigned #无符号 ) CREATE TABLE L2(id tinyint #默认为有符号 ) 数值型(bit) 2.数值型(bit)的使用 小数 3.数值型(小数)的基本使用 字符串 4.字符串的基本使用 #演示字符串类型…

REGX52.H报错

keil cannot open source input file "REGX52.H": No such file or directory 选择下面这个目录 Keil\C51\INC\Atmel

AI绘画Stable Diffusion 新手入门教程:万字长文解析Lora模型的使用,快速上手Lora模型!

大家好&#xff0c;我是设计师阿威 今天给大家讲解一下AI绘画Stable Diffusion 中的一个重要模型—Lora模型&#xff0c;如果还有小伙伴没有SD安装包的&#xff0c;可以看我往期入门教程2024最新超强AI绘画Stable Diffusion整合包安装教程&#xff0c;零基础入门必备&#xff…

【软件测试】Selenium自动化测试框架 | 相关介绍 | Selenium + Java环境搭建 | 常用API的使用

文章目录 自动化测试一、selenium1.相关介绍1.Selenium IDE2.Webdriverwebdriver的工作原理&#xff1a; 3.selenium Grid 2.Selenium Java环境搭建3.常用API的使用1.定位元素2.操作测试对象3.添加等待4.打印信息5.浏览器的操作6.键盘事件7.鼠标事件8.定位一组元素9.多层框架定…

手把手家教你进行ChatGPT私有化部署

背景 随着AI技术的不断成熟&#xff0c;加上ChatGPT如火如荼的发布新版本迭代更新&#xff0c;人工智能的热度也升温到史无前例的高度。 我们有理由相信&#xff0c;现在身边还不愿主动去接触这项技术&#xff0c;深入了解的小伙伴&#xff0c;在不久的将来&#xff0c;一定会…

网络攻防——kali操作系统基本使用

1.阅读前的声明 本文章中生成的木马带有一定的攻击性&#xff0c;使用时请遵守网络安全相关的法律法规&#xff08;恶意攻击操作系统属于违法行为&#xff09;。 2.环境安装 生成木马主要需要如下工具&#xff1a;kali操作系统&#xff0c;VMware15&#xff08;搭建kali操作…

用Python制作动态钟表:实时显示时间的动画

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame绘制钟表函数主循环 完整代码 引言 动态钟表是一种直观且实用的UI元素&#xff0c;能够实时显示当前时间。在这篇博客中&#xff0c;我们将使用Python创建一个动态钟表&#xff0c;通过利用Pygame库来实…

无线物联网题集

测试一 未来信息产业的发展在由信息网络向 全面感知和 智能应用两个方向拓展、延伸和突破。 各国均把 物联网作为未来信息化战略的重要内容,融合各种信息技术,突破互联网的限制,将物体接入信息网络。 计算机的出现,开始了第四次工业革命,开始了人机物的高度融合&#xff08;&…

LVS负载均衡群集部署之——DR模式的介绍及搭建步骤

一、LVS-DR集群介绍1.1 LVS-DR 工作原理1.2 数据包流向分析1.3 LVS-DR 模式的特点1.4 LVS-DR中的ARP问题1.4.1 问题一1.4.2 问题二二、构建LVS-DR集群2.1 构建LVS-DR集群的步骤&#xff08;理论&#xff09;1.配置负载调度器&#xff08;192.168.80.30&#xff09;&#xff08;…