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

WebGPU入门

1. 引言

前序博客:

  • CUDA入门
  • WebGPU+ZKP:客户端证明

WebGPU——Draft 2023.7.17 由苹果、谷歌、Mozilla团队发起,当前处于草稿阶段,旨在成为W3C推荐标准。

WebGPU为 在图形处理单元(GPU)上执行诸如渲染和计算之类的操作 提供了API。

GPU支持丰富的渲染和并行计算应用。WebGPU是通过API,将GPU的硬件能力 供Web使用。WebGPU API为对原生GPU API进行高效映射。WebGPU与WebGL无关,且不明确锚定OpenGL ES (OpenGL for Embedded Systems)。

WebGPU:

  • 1)将物理GPU硬件看成是GPUAdapter。
  • 2)通过GPUDevice来连接GPUAdapter。
  • 3)GPUDevice的GPUQueue用于执行指令。
  • 4)GPUDevice可能有自身的内存,可高速访问处理器单元。
  • 5)GPUBuffer和GPUTexture是由GPU内存支持的物理资源。
  • 6)GPUCommandBuffer和GPURenderBundle是用户录制(user-recorded)指令的容器。
    GPU执行编码在GPUCommandBuffer内的指令,通过pipeline来喂入数据。
    • 6.1)GPUCommandBuffer:由fixed-function和programmable stages混合组成。
      • Programmable stages执行shaders,shaders为设计运行于GPU硬件上的特定程序。shaders代码运行在GPU硬件的计算单元内。
    • 6.2)pipeline:大多数pipeline状态由GPURenderPipeline或GPUComputePipeline对象定义。
      不包含在pipeline对象中的状态则通过指令编码阶段设定,如beginRenderPass()或setBlendConstant()。
  • 7)GPUShaderModule包含着色器(shader)代码。
  • 8)GPUSampler或GPUBindGroup,用于配置GPU使用物理资源的方式。
  • 9)未来将通过Web Workers来支持多线程。

2. 坐标系统

渲染(rendering)操作可采用如下坐标系统:【注意,WebGPU的坐标系统 与 某graphics pipeline内的DirectX坐标系统 匹配。】

  • 1)归一化设备坐标(Normalized device coordinates(NDC)):具有3个维度:

    • − 1.0 ≤ x ≤ 1.0 -1.0\leq x \leq 1.0 1.0x1.0
    • − 1.0 ≤ y ≤ 1.0 -1.0\leq y \leq 1.0 1.0y1.0
    • 0.0 ≤ z ≤ 1.0 0.0\leq z \leq 1.0 0.0z1.0
    • 左下角坐标为 ( − 1.0 , − 1.0 , z ) (-1.0, -1.0, z) (1.0,1.0,z)
  • 2)Clip space坐标:具有4个维度 ( x , y , z , w ) (x,y,z,w) (x,y,z,w)

    • 2.1)Clip space坐标可:
      • 用作某vertex的clip position(即某vertex shader的position output)。
      • 用作clip volume。
    • 2.2)Clip space坐标 与 归一化设备坐标 之间的关系为:
      • 若point p = ( p . x , p . y , p . z , p . w ) p=(p.x,p.y,p.z,p.w) p=(p.x,p.y,p.z,p.w)在clip volume内,则其归一化设备坐标为 ( p . x ÷ p . w , p . y ÷ p . w , p . z ÷ p . w ) (p.x\div p.w, p.y \div p.w, p.z \div p.w) (p.x÷p.w,p.y÷p.w,p.z÷p.w)
  • 3)Framebuffer坐标:用于对framebuffer内的pixels进行寻址:

    • 3.1)具有2个维度。
    • 3.2)每个pixel在 x x x y y y维度的单位为1。
    • 3.3)左上角坐标为 ( 0.0 , 0.0 ) (0.0, 0.0) (0.0,0.0)
    • 3.4) x x x向右侧增长。
    • 3.5) y y y向下侧增长。
  • 4)Viewport坐标:在Framebuffer坐标 x , y x,y x,y维度的基础上,增加了depth z z z

    • 通常 0.0 ≤ z ≤ 1.0 0.0\leq z\leq 1.0 0.0z1.0,但可通过setViewport()来修改minDepth和maxDepth。
  • 5)Fragment坐标:与vIewport坐标匹配。

  • 6)UV坐标:用于sample textures,具有2个维度:

    • 0 ≤ u ≤ 1.0 0\leq u\leq 1.0 0u1.0
    • 0 ≤ v ≤ 1.0 0\leq v\leq 1.0 0v1.0
    • ( 0.0 , 0.0 ) (0.0, 0.0) (0.0,0.0)为texture内存地址顺序上的首个texel。
    • ( 1.0 , 1.0 ) (1.0, 1.0) (1.0,1.0)为texture内存地址顺序上的最后一个texel。
  • 7)Window坐标 或 present坐标:与framebuffer坐标匹配,用于与外部显示等接口交互。

3. WebGPU编程模型

3.1 Timeline

WebGPU的行为以“timeline”来表示。算法内的每个操作都发生在某timeline。timeline会明确定义操作顺序以及某操作对应某state。
WebGPU的timeline类型有:【Immutable value可用于任意timeline】

  • 1)Content timeline:与Web script执行关联。包含了调用本协议的所有方法。
  • 2)Device timeline:与User agent发布的GPU device operations关联。包括:
    • 创建adapters、devices、GPU resources以及state objects。从user agent角度来看,这些为经典的同步操作。
  • 3)Queue timeline:与GPU计算单元内的操作执行关联。包含实际运行在GPU之上的draw、copy、compute jobs。

如GPUDevice.createBuffer():

  • 1)用户填充GPUBufferDescriptor 并为其创建一个GPUBuffer。这发生在Content timeline。
  • 2)User agent在Device timeline创建一个底层buffer。

3.2 内存模型

一旦在应用初始化阶段获得了某GPUDevice,则可将WebGPU平台描述为如下层次:

  • 1)User agent:用于实现本协议。
  • 2)具有该设备底层原生API驱动的操作系统。
  • 3)实际的CPU和GPU硬件。

不同层次具有不同的内存类型,user agent在实现本协议时需考虑到:

  • 1)script-owned内存:如由script创建的某ArrayBuffer,通常对GPU驱动不可访问。
  • 2)user agenet可能有不同的进程来负责运行与GPU驱动的content和communication。此时,使用跨进程共享内存来传输数据。
  • 3)特定的GPU有其自身的高带宽内存,这些集成GPU通常与系统共享内存。

为使GPU的渲染或计算高效,大多数物理资源都以内存形式分配。当用户需要为GPU提供新数据时:【以下为最差情况,实际实现时,通常不需要跨越进程边界、或者可将驱动管理内存直接暴露给用户的ArrayBuffer,从而可避免数据拷贝。】

  • 1)数据可能首先得跨越进程边界,到达与GPU驱动通信的user agent部分。
  • 2)然后,可能需要使其对驱动可见,有时需要将其拷贝到驱动分配的staging memory中。
  • 3)最后,可能需要将数据传输到GPU专用内存中,可能会将内部layout转换为对GPU来说更可高效处理的方式。

所有以上数据转换同时通过WebGPU的user agentLai shixian d .

参考资料

[1] WebGPU——Draft 2023.7.17

相关文章:

WebGPU入门

1. 引言 前序博客: CUDA入门WebGPUZKP:客户端证明 WebGPU——Draft 2023.7.17 由苹果、谷歌、Mozilla团队发起,当前处于草稿阶段,旨在成为W3C推荐标准。 WebGPU为 在图形处理单元(GPU)上执行诸如渲染和…...

React Dva项目中.roadhogrc.mock.js直接自动导入mock目录下所有文件方式

上文 React Dva项目中模仿网络请求数据方法 中,我们书写了Dva项目模拟后端数据的方式 但是 我们.roadhogrc.mock.js中的这个处理其实并不好用 我们还需要一个一个的引入 我们可以直接靠一段代码 import fs from fs; import path from path; const mock {} fs.re…...

跨境独立站如何应对恶意网络爬虫?

目录 跨境出海独立站纷纷成立 爬虫威胁跨境电商生存 如何有效识别爬虫? 技术反爬方案 防爬虫才能保发展 中国出海跨境电商业务,主要选择大平台开设店铺,例如,亚马逊、eBay、Walmart、AliExpress、Zalando等。随着业务的扩大&…...

C# SourceGenerator 源生成器初探

简介 注意: 坑极多。而且截至2023年,这个东西仅仅是半成品 利用SourceGenerator可以在编译结束前生成一些代码参与编译,比如编译时反射之类的,还有模板代码生成都很好用。 演示仓库传送门-Github-yueh0607 使用 1. 创建项目 …...

网络安全/信息安全—学习笔记

一、网络安全是什么 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…...

【Visual Studio】无法打开包括文件: “dirent.h”: No such file or directory

VS2017/2019 无法打开包括文件: “dirent.h”: No such file or directory 1 “dirent.h”: No such file or directory 在windows下的VS2017/2019编译器中,发现无法打开“dirent.h”,主要是MSVC并没有实现这个头文件,但是在Linux这个头文件…...

asp.net MVC markdown编辑器

在 ASP.NET MVC 中,你可以使用一些第三方 Markdown 编辑器来让用户在网页上方便地编辑和预览 Markdown 内容。这些编辑器通常提供实时预览功能,将 Markdown 文本转换为实时渲染的 HTML,并支持编辑器工具栏来辅助用户编辑。 以下是一些流行的…...

论文浅尝 | 预训练Transformer用于跨领域知识图谱补全

笔记整理:汪俊杰,浙江大学硕士,研究方向为知识图谱 链接:https://arxiv.org/pdf/2303.15682.pdf 动机 传统的直推式(tranductive)或者归纳式(inductive)的知识图谱补全(KGC)模型都关注于域内(in-domain)数据,而比较少关…...

算法工程师-机器学习面试题总结(2)

线性回归 线性回归的基本思想是? 线性回归是一种用于建立和预测变量之间线性关系的统计模型。其基本思想是假设自变量(输入)和因变量(输出)之间存在线性关系,通过建立一个线性方程来拟合观测数据&#xff…...

低成本32位单片机空调内风机方案

空调内风机方案主控芯片采用低成本32位单片机MM32SPIN0230,内部集成了具有灵动特色的电机控制功能:高阶4路互补PWM、注入功能的高精度ADC、轨到轨运放、轮询比较器、32位针对霍尔传感器的捕获时钟、以及硬件除法器和DMA等电机算法加速引擎。 该方案具有…...

读发布!设计与部署稳定的分布式系统(第2版)笔记25_互联层之路由和服务

1. 控制请求数量 1.1. 这个世界可以随时摧毁我们的系统 1.1.1. 要么拒绝工作 1.1.2. 要么扩展容量 1.1.3. 没有人会在与世隔绝的环境中使用服务,现在的服务大多必须处理互联网规模的负载 1.2. 系统的每次失效,都源自某个等待队列 1.3. 每个请求都会…...

AI面试官:LINQ和Lambda表达式(二)

AI面试官:LINQ和Lambda表达式(二) 当面试官面对C#中关于LINQ和Lambda表达式的面试题时,通常会涉及这两个主题的基本概念、用法、实际应用以及与其他相关技术的对比等。以下是一些可能的面试题目,附带简要解答和相关案…...

Mysql原理篇--第二章 索引

文章目录 前言一、mysql的索引是什么?1.1 索引的结构:1.2 b树特性:1.3 b树每个节点的结构:1.4 b树 键值的大小排序:1.4 b树 存储(InnoDB): 二、索引类型2.1 主要的索引类型&#xff…...

保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识

1.简介 有的小伙伴或者童鞋们可能会好奇地问,不是讲解和分享抓包工具了怎么这里开始讲解HTTP和HTTPS协议了。这是因为你对HTTP协议越了解,你就能越掌握Fiddler的使用方法,反过来你越使用Fiddler,就越能帮助你了解HTTP协议。 Fid…...

【iOS】单例、通知、代理

1 单例模式 1.1 什么是单例 单例模式在整个工程中,相当于一个全局变量,就是不论在哪里需要用到这个类的实例变量,都可以通过单例方法来取得,而且一旦你创建了一个单例类,不论你在多少个界面中初始化调用了这个单例方…...

从Vue2到Vue3【五】——新的组件(Fragment、Teleport、Suspense)

系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介从Vue2到Vue3【一】Composition API(第一章)从Vue2到Vue3【二】Composition API(第二章)从Vue2到Vue3【三】Composition API(第三章)从Vue2到Vue3【四】C…...

PostgreSQL——sql文件导入

Windows方式: 进入PostgreSQL安装目录的bin,进入cmd 执行命令: psql -d 数据库名 -h localhost -p 5432 -U 用户名 -f 文件目录 SQL Shell: 执行命令: \i 文件目录(Windows下要加引号和双斜线)...

[SQL挖掘机] - 全连接: full join

介绍: 在sql中,join是将多个表中的数据按照一定条件进行关联的操作。全连接(full join)是一种连接类型,它会返回所有满足连接条件的行,同时还包括那些在左表和右表中没有匹配行的数据。 在进行全连接时,会…...

SpringDataJpa 实体类—主键生成策略

主键配置 IdGeneratedValue(strategy GenerationType.IDENTITY)Column(name "cust_id")private Long custId;//主键 Id:表示这个注解表示此属性对应数据表中的主键GeneratedValue(strategy GenerationType.IDENTITY) 此注解表示配置主键的生成策…...

【LeetCode 算法】Parallel Courses III 并行课程 III-拓扑

文章目录 Parallel Courses III 并行课程 III问题描述:分析代码拓扑 Tag Parallel Courses III 并行课程 III 问题描述: 给你一个整数 n ,表示有 n 节课,课程编号从 1 到 n 。同时给你一个二维整数数组 relations ,其…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...