在 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.mzph.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行日志。这意味着你将只看到容器最近生…