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

zkVM设计性能分析

1. 引言

本文主要参考:

  • 2023年9月ZKSummit10 Wei Dai @1k(x) & Terry Chung @1k(x)分享视频 ZK10: Analysis of zkVM Designs - Wei Dai & Terry Chung

当前有各种zkVM,其设计思想各有不同,且各有取舍,本文重点对现有各zkVM设计进行分析。
zkVMs寒武纪大爆发:
在这里插入图片描述

  • 2020年之前的zkVM方案均是学术性的,不具备实用性,具体有:
    • TinyRAM(2013年)
    • vnTinyRAM
    • Buffet
    • Geppetto
    • Spice等
  • 2021年之后开始有商业化的zkVM方案,特别是近两年来各种zkVM方案开始大爆发,有:
    • Cairo-VM
    • Risc-Zero
    • zkSyncVM
    • polygon zkEVM
    • Scroll zkEVM
    • Delphinus zkWasm
    • Valida
    • Triton VM
    • powdr risc-v
    • Fluent zkWasm
    • Jolt
    • polygon Miden等

本文内容框架为:

  • 何为zkVMs?为何需要zkVMs?
  • zkVM设计性能分析:
    • ISA性能分析
    • Arithmetization性能分析
    • Proof system性能分析
  • 结论及开放性问题

2. 何为zkVMs?为何需要zkVMs?

2.1 为何需要zkVMs?

zk Circuits vs. zkVMs:
在这里插入图片描述

  • 编程语言:zk Circuits通常采用Circom、HDL等面向领域编程语言编写;而zkVMs采用Rust、WASM、Risc-V、LLVM等高级通用语言编写。
  • 易用性及生态:难于用zk Circuits来表达具有很多分支的复杂逻辑;而zkVMs的程序有大量现有可靠的软件。
  • 性能:zk Circuits性能较高,因其对特定计算的约束进行了手动调优;而zkVMs性能要慢约10~100倍。本文重点关注的是如何提升zkVMs的性能。

2.2 何为VMs?

虚拟机采用指令集架构(Instruction set architecture,ISA),即:

  • 具有固定语义的一组有限数量的指令集。

在这里插入图片描述

虚拟机(Virtual Machine,VM)的主要结构有:

  • 程序:由指令序列组成。虚拟机每次仅读取程序中的一条指令。
  • 内存
  • 虚拟机:主要工作为:
    • 1)读取输入
    • 2)对内存(RAM)读写
    • 3)修改本地机器状态:内部机器状态为:Stack和(或)Registers。
    • 4)写输出
    • 5)中止执行

现有的VM/zkVM架构,以及内部机器状态内存模型,选型情况为:
在这里插入图片描述

2.2.1 VM选择——Harvard架构 vs. Von Neumann架构

前序博客见:

  • 哈佛架构 VS 冯·诺依曼架构

在做zkVM设计时,对应虚拟机(VM)架构通常需考虑在哈佛架构 和 冯·诺依曼架构 之间二选一:

  • 哈佛架构:程序和内存分属不同区域。
    • 优点为:
      • 无program loader
      • 仅lookup table需要额外的cycles。
    • 缺点为:
      • 无JIT
      • per program setup(需对每个程序做setup)
  • 冯·诺依曼架构:程序在内存中。
    • 优点为:
      • 通用,更接近现代CPUs
    • 缺点为:
      • 必须约束所取指令的正确性
      • 需要program loader(来将程序加载到内存中), 意味着需要更多cycles

在这里插入图片描述

2.2.2 VM内部机器状态内存模型选择——Stack, Register, vs. Direct Memory

虚拟机内部机器状态内存模型,通常有3种选择:

  • 1)Stack Machine:通过访问stack top来进行数据移动,指令更简单。如:
    • EVM
    • Miden-asm
    • Wasm
  • 2)Register Machine:指令比Stack Machine要短,但更复杂,不过数据移动操作要少的多。如:
    • RISC-V
  • 3)Direct Memory Machine:无需数据移动(zero data movement),但有更多的读写操作。如:
    • LLVM-IR
      在这里插入图片描述
      在这里插入图片描述
      三种虚拟机内部机器状态内存模型的性能对比为:
      在这里插入图片描述

2.3 何为zkVMs?

zkVM的目的在于:

  • 给定初始程序、初始程序输入、初始内部机器状态,证明以上VM的有效执行。

zkVMs主要分为四大阶段:

  • 1)Setup阶段:根据参数(如最大trace行数、固定列数、哈希函数等),获得Proving key和Verification key。

  • 2)生成Witness阶段:(Executor)根据程序和程序输入,生成execution trace(即witnesses)。该execution trace中包含了:

    • 该程序的执行
    • 以及,帮助约束该执行有效性的额外信息。

    在生成Witness阶段,还包括将程序切分以供后续并行证明的工作。

  • 3)Proving阶段:根据execution trace和Proving key,生成proof。

  • 4)Verification阶段:根据proof和Verification key,生成验证是否通过的结果Y/N。

在这里插入图片描述

3. zkVM设计性能分析

传统虚拟机中,其效率分析的核心思想为:

  • VM效率 约等于 (程序中的指令数 x 执行单条指令用时) ,即:
    T ≈ P中指令数  × time instruction T\approx \text{P中指令数 }\times \frac{\text{time}}{\text{instruction}} TP中指令数 ×instructiontime

当使用zkVM证明某固定、抽象程序P时,借鉴相同的思想:

  • zkVM效率 约等于 (程序中的指令数 x 单条指令的约束复杂度 x 单个约束证明用时) ,即:zkVM证明用时 T T T以如下公式来表示:
    T ≈ P中指令数  × time instruction ≈ P中指令数  × "Constraint complexity" instruction × time "Constraint complexity" \begin{aligned}T &\approx \text{P中指令数 }\times \frac{\text{time}}{\text{instruction}} \\ &\approx\text{P中指令数 }\times \frac{\text{"Constraint complexity"}}{\text{instruction}} \times \frac{\text{time}}{\text{"Constraint complexity"}}\end{aligned} TP中指令数 ×instructiontimeP中指令数 ×instruction"Constraint complexity"×"Constraint complexity"time

其中的“约束”为:

  • 衡量某类proof system复杂度的单位。

取决于所采用的proof system类型,具体的“约束复杂度”是指,如:

  • R1CS约束数
  • 具有固定配置的Plonk电路中的cells数
  • 具有固定depth的GKR电路中的wires数

为此,在对zkVM做性能分析时,将“(程序中的指令数 x 单条指令的约束复杂度 x 单个约束证明用时)”拆分成3个维度来分析,其中:

  • 1)程序中的指令数:对应为ISA(Instruction set architecture)性能分析。
  • 2)单条指令的约束复杂度:对应为Arithmetization性能分析。
  • 3)单个约束证明用时:对应为Proof system性能分析。
    在这里插入图片描述

3.1 ISA性能分析

ISA(Instruction set architecture)性能分析,主要关注的是程序中的指令数。
传统ISA和“ZK ISA”是针对不同的场景进行了优化:

  • 传统ISA为:

    • 内存局限性:处理器具有内存上限。
    • 程序size(如压缩):无法有太多通用寄存器。
    • 执行速度
  • "ZK ISA"为:

    • 每个cycle,一条指令:具有指令上限。
    • 指令大小的影响小:指令可包含更多信息,如引用更多寄存器或本地变量。
    • 证明速度或性能。

在这里插入图片描述
以,在软件中实现SHA256 one-round压缩函数 所需的指令数,为例,不同虚拟机对比情况为:
在这里插入图片描述
其中:

  • 前三种(EVM、Miden-asm、Wasm)为stack machine,具有相对更多的local data movement操作。
  • RISC-V为register machine,具有少得多的local data movement操作。
  • LLVM-IR为direct memory模式,具有虚拟寄存器,从而具有zero data movement。

在这里插入图片描述
在这里插入图片描述
由此可知,实际的ISA性能,取决于所采用的机器内部状态内存模型:

  • 1)Stack machines:具有大量stack操作(数据移动操作)(高达50%~60%)。
  • 2)Register machines:
    • 当寄存器压力低时,其性能好。
    • 当寄存器压力高时(~30%),需要大量的数据移动。
  • 3)Direct memory machines:
    • 消除了local data movement,即无需数据移动。
    • Caveat(警告):可能会导致更复杂的arithmetization?
      在这里插入图片描述

3.2 Arithmetization性能分析

Arithmetization性能分析,关注的是:

  • 单条指令的约束复杂度。

在这里插入图片描述
实际在对Arithmetization性能分析时,主要分为2大块:

  • Segment性能分析
  • “Recursion复杂度”+“Continuation复杂度” 性能分析。

3.2.1 Segment性能分析

算术化是指将对程序执行segment的约束,转换为:

  • Permutation check、
  • Gate check、
  • lookup、
  • Copy check

等组合,然后进一步转换为2大类子约束表达:

  • Zero check
  • Product check

取决于具体所采用的PolyIOP方案,后续的方案以及影响性能的关键运算也有所不同:

  • 单变量PolyIOP:相关方案有Plonk、STARK、Plookup等,对应为Quotient check,影响性能的关键运算为FFT。
  • 多变量PolyIOP:相关方案有GKR、HyperPlonk、Jolt/Lasso、ProtoStar等,对应为Sum check,影响性能的关键运算为MLE。
    在这里插入图片描述

在这里插入图片描述
以基于STARK的zkVM为例,将程序正确执行的execution trace切分为多个segment。其Prover的证明用时由:

  • 派生多项式,以及对多项式进行承诺

所主导。根据RISC0、Triton、Plonky2所提供的数据:

  • 经典的STARK Provers有60%~80%的证明时长用于派生和commit多项式。
3.2.1.1 STARK VMs vs. SNARK VMs

在这里插入图片描述
当前基于STARK方案的zkVM有:

  • Risc0
  • Miden
  • Cairo
  • Valida
  • Nock
  • TritonVM
  • zkSync VM
  • Polygon zkEVM

这些STARK zkVMs的性能分析对比情况为:【关键数据见最后2列】
在这里插入图片描述
现有的基于SNARK方案的zkVMs,采用的都是基于Halo2的方案,具体有:

  • zkWasm
  • Powdr的Risc-v
  • Scroll的zkEVM

这些SNARK zkVMs性能对比为:
在这里插入图片描述

3.2.2.2 segment性能提升措施

为提升Arithmetization segment性能,其目标应为:

  • 尽可能使,单个指令的committed cells,数量最少。

具体措施有:

  • 1)移除重复的cells。仅对每个指令的“state change”进行commit。
    • 对“non-local” 数据/计算,采用permutation/lookups。
    • powdr risc-v中的寄存器(编码在列中),占约50%的列。
  • 2)采用表达性更好的IOP arguments:
    • fixed lookup tables可改进bitwise运算性能。
    • 改进关键IOP原语的性能,如在单个table中查找 M M M个列集合,采用更好的lookup argument会具有更好的性能:
      在这里插入图片描述
  • 3)具有“flexible area”的co-processors,有助于改进单个指令开销。

在这里插入图片描述

3.2.2“Recursion复杂度”和“Continuation复杂度” 性能分析

在这里插入图片描述
当将1个完整的execution trace切分为 t t t个segment时,总的复杂度为:

  • 证明所有 t t t个(具有 n n n-step)segments复杂度
  • 证明所有 t − 1 t-1 t1个 recursive proofs的复杂度

相应的关键路径为:

  • 1个segment proof
  • log ⁡ ( t ) \log(t) log(t)个recursive proofs

在这里插入图片描述
如Risc0中,有多达50%的开销用于对“continuation” state进行序列化。

对比SNARKs(Plonk)、Folding/Accumulation、STARKs等方案的recursion threshold开销为:
在这里插入图片描述
在这里插入图片描述

3.3 Proof system性能分析

Proof system性能分析,关注的是:

  • 单个约束证明用时。

对于多项式承诺方案(PCS,Polynomial Commitment Scheme),基于FRI的PCS性能要由于基于MSM的多项式承诺方案性能:【其中y轴表示的是每秒承诺的域元素数】
在这里插入图片描述
在这里插入图片描述

4. 结论及开放性问题

关于ISA的开放性问题有:

  • 如何将现有工具应用到zk-efficient ISA中?
  • 可进一步消除data movement么?如对memcpy进行direct argument?

关于Arithmetization的开放性问题有:

  • 降低单个指令的复杂度
  • 降低递归(recursion)复杂度
    • “doubly-fast”哈希函数(如Poseidon2、Tip5、XHash{8,12}、Monolith等)
  • 降低"continuation"复杂度

关于proof system/PCS的开放性问题有:

  • FFT、MLE、PCS应封装为库,项目方可受益于这些原语的更好实现。
  • 更好的bench工具,来对比各个方案的性能。

在这里插入图片描述

参考资料

[1] 2023年9月ZKSummit10 Wei Dai @1k(x) & Terry Chung @1k(x)分享视频ZK10: Analysis of zkVM Designs - Wei Dai & Terry Chung【1k(x)为早期密码学投资基金】

相关文章:

zkVM设计性能分析

1. 引言 本文主要参考: 2023年9月ZKSummit10 Wei Dai 1k(x) & Terry Chung 1k(x)分享视频 ZK10: Analysis of zkVM Designs - Wei Dai & Terry Chung 当前有各种zkVM,其设计思想各有不同,且各有取舍,本文重点对现有各z…...

调用gethostbyname实现域名解析(附源码)

VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...&a…...

面向无线传感器网络WSN的增强型MODLEACH设计与仿真(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

前端页面初步开发

<template><div><el-card class"box-card" style"height: 620px"><el-input v-model"query.name" style"width:200px" placeholder"请输入用户姓名"></el-input>&nbsp&nbsp&nbsp…...

【赠书活动第3期】《构建新型网络形态下的网络空间安全体系》——用“价值”的视角来看安全

目录 一、内容简介二、读者受众三、图书目录四、编辑推荐五、获奖名单 一、内容简介 经过30多年的发展&#xff0c;安全已经深入到信息化的方方面面&#xff0c;形成了一个庞大的产业和复杂的理论、技术和产品体系。 因此&#xff0c;需要站在网络空间的高度看待安全与网络的…...

基于SpringBoot的智能推荐的卫生健康系统

目录 前言 一、技术栈 二、系统功能介绍 用户管理 科室类型管理 医生信息管理 健康论坛管理 我的发布 我的收藏 在线咨询 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在…...

几种开源协议的区别(Apache、MIT、BSD、MPL、GPL、LGPL)

作为一名软件开发人员&#xff0c;你一定也是经常接触到开源软件&#xff0c;但你真的就了解这些开源软件使用的开源许可协议吗&#xff1f; 你不会真的认为&#xff0c;开源就是完全免费吧&#xff1f;那么让我们通过本文来寻找答案。 一、开源许可协议简述 开源许可协议是指开…...

通过usb串口发送接收数据

USB通信使用系统api&#xff0c;USB转串口通信使用第三方库usb-serial-for-android&#xff0c; 串口通信使用Google官方库android-serialport-api。x 引入包后在本地下载的位置&#xff1a;C:\Users\Administrator\.gradle\caches\modules-2\files-2.1 在 Android 中&#x…...

Python3数据科学包系列(三):数据分析实战

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 Python3数据科学包系列(三):数据分析实战 国庆中秋宅家自省: Pyth…...

UE4.27.2 自定义 PrimitiveComponent 出现的问题

目录 CreatePrimitiveUniformBufferImmediateFLocalVertexFactory 默认构造函数GetTypeHashENQUEUE_RENDER_COMMANDnull resource entry in uniform buffer parameters FLocalVertexFactory 在看大象无形&#xff0c;其中关于静态物体网络绘制的代码出错的 bug 我也搞了一会………...

【docker】数据卷和数据卷容器

一、如何管理docker容器中的数据&#xff1f; 二、数据卷 1、数据卷原理 将容器内部的配置文件目录&#xff0c;挂载到宿主机指定目录下 数据卷默认会一直存在&#xff0c;即使容器被删除 宿主机和容器是两个不同的名称空间&#xff0c;如果想进行连接需要用ssh&#xff0c;…...

HTML——列表,表格,表单内容的讲解

文章目录 一、列表1.1无序&#xff08;unorder&#xff09;列表1.2 有序&#xff08;order&#xff09;列表1.3 定义列表 二、表格**2.1 基本的表格标签2.2 演示 三、表单3.1 form元素3.2 input元素3.2.1 单选按钮 3.3 selcet元素 基础部分点击&#xff1a; web基础 一、列表 …...

Mongodb学习

一、初步了解 1.1 Mongodb 是什么 MongoDB 是一个基于分布式文件存储的数据库&#xff0c;官方地址 https://www.mongodb.com/ 1.2 数据库是什么 数据库&#xff08;DataBase&#xff09;是按照数据结构来组织、存储和管理数据的 应用程序 1.3 数据库的作用 数据库的主要…...

2024届计算机毕业生福利来啦!Python毕业设计选题分享Django毕设选题大全Flask毕设选题最易过题目

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…...

网络爬虫指南

一、定义 网络爬虫&#xff0c;是按照一定规则&#xff0c;自动抓取网页信息。爬虫的本质是模拟浏览器打开网页&#xff0c;从网页中获取我们想要的那部分数据。 二、Python为什么适合爬虫 Python相比与其他编程语言&#xff0c;如java&#xff0c;c#&#xff0c;C&#xff…...

9、媒体元素标签

9、媒体元素标签 一、视频元素 video标签 二、音频元素 audio标签 <!--音频和视频 video&#xff1a;视频标签 audio&#xff1a;音频标签 controls&#xff1a;控制选项&#xff0c;可以显示进度条 autoplay&#xff1a;自动播放 -->示例 <!DOCTYPE html> &…...

php单独使用think-rom数据库 | thinkphp手动关闭数据库连接

背景&#xff08;think-orm2.0.61&#xff09; 由于需要长时间运行一个php脚本&#xff0c;而运行过程并不是需要一直与数据库交互&#xff0c;但thinkphp主要是为web站点开发的框架&#xff0c;而站点一般都是数据获取完则进程结束&#xff0c;所以thinkphp没提供手动关闭数据…...

337. 打家劫舍 III

题目描述 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root 。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两…...

tio-websocket-spring-boot-starter的最简单实例,看完你一定有所收获

前言 我最近一个月一直在寻找能够快速开发实时通讯的简单好用的模块,所以我就去寻找了一下相关的内容.在此之前我使用的是Spring原生的webSocket,她有个弊端就是设置组不容易设置,而且配置上也稍微复杂一点,需要配置拦截器和处理器,还需要把它放入到Springboot的启动容器里面,也…...

列出连通集

输入样例: 8 6 0 7 0 1 2 0 4 1 2 4 3 5 输出样例: { 0 1 4 2 7 } { 3 5 } { 6 } { 0 1 2 7 4 } { 3 5 } { 6 } solution #include <stdio.h> #include <string.h> int arcs[10][10]; int visited[10] {0}; void DFS(int n, int v); void BFS(int n , int i)…...

前端 富文本编辑器原理——从javascript、html、css开始入门

文章目录 ⭐前言⭐html的contenteditable属性&#x1f496; 输入的光标位置&#xff08;浏览器获取selection&#xff09;⭐使用Selection.toString () 返回指定的文本⭐getRangeAt 获取指定索引范围 &#x1f496; 修改光标位置&#x1f496; 设置选取range ⭐总结⭐结束 ⭐前…...

堆--数据流中第K大元素

如果对于堆不是太认识&#xff0c;请点击&#xff1a;堆的初步认识-CSDN博客 数据流与上述堆--数组中第K大元素-CSDN博客的数组区别&#xff1a; 数据流的数据是动态变化的&#xff0c;数组是写死的 堆--数组中第K大元素-CSDN博客题的小顶堆加一个方法&#xff1a; class MinH…...

【算法|动态规划No.12】leetcode152. 乘积最大子数组

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…...

Covert Communication 与选择波束(毫米波,大规模MIMO,可重构全息表面)

Covert Communication for Spatially Sparse mmWave Massive MIMO Channels 2023 TOC abstract 隐蔽通信&#xff0c;也称为低检测概率通信&#xff0c;旨在为合法用户提供可靠的通信&#xff0c;并防止任何其他用户检测到合法通信的发生。出于下一代通信系统安全链路的强烈…...

计算机毕业设计 基于协调过滤算法的绿色食品推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

华为云云耀云服务器L实例评测|部署在线影音媒体系统 Jellyfin

华为云云耀云服务器L实例评测&#xff5c;部署在线影音媒体系统 Jellyfin 一、云耀云服务器L实例介绍1.1 云服务器介绍1.2 产品规格1.3 应用场景1.4 支持镜像 二、云耀云服务器L实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Jellyfin3.1 Jellyfin 介绍3.2 Docke…...

GhostNet原理解析及pytorch实现

论文&#xff1a;https://arxiv.org/abs/1911.11907 源码&#xff1a;https://github.com/huawei-noah/ghostnet 简要论述GhostNet的核心内容。 Ghost Net 1、Introduction 在训练良好的深度神经网络的特征图中&#xff0c;丰富甚至冗余的信息通常保证了对输入数据的全面理…...

视频二维码的制作方法,支持内容修改编辑

现在学生经常会需要使用音视频二维码&#xff0c;比如外出打开、才艺展示、课文背诵等等。那么如何制作一个可以长期使用的二维码呢&#xff1f;下面来给大家分享一个二维码制作&#xff08;免费在线二维码生成器-二维码在线制作-音视频二维码在线生成工具-机智熊二维码&#x…...

清华GLM部署记录

环境部署 首先安装anaconda&#xff08;建议包管理比较方便&#xff09;windows用户需手动配置一下环境变量&#xff0c;下面默认是在ubuntu环境说明创建python环境&#xff0c;conda create -n your_env_name python3.10 (注&#xff1a;官方是提供是python3.8&#xff0c;但…...

贪心算法+练习

正值国庆之际&#xff0c;祝愿祖国繁荣昌盛&#xff0c;祝愿朋友一生平安&#xff01;终身学习&#xff0c;奋斗不息&#xff01; 目录 1.贪心算法简介 2.贪心算法的特点 3.如何学习贪心算法 题目练习&#xff08;持续更新&#xff09; 1.柠檬水找零&#xff08;easy&…...

购物网站线下推广方案/焊工培训心得体会

人脸识别&#xff0c;是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流&#xff0c;并自动在图像中检测和跟踪人脸&#xff0c;进而对检测到的人脸进行脸部的一系列相关技术&#xff0c;通常也叫做人像识别、面部识别。人脸…...

视频制作软件电脑/厦门网站快速排名优化

env 构建时变量 之前讲的是全局变量&#xff0c;现在是构建时候自己定义所运行的一些变量 定义&#xff1a; 通过键值对&#xff08;k-v&#xff09;格式定义流水线在运行时的环境变量&#xff0c; 分为流水线级别和阶段级别。(可以使用enviorment语句块里面去写我们的变量&…...

如何给自己公司做网站/黄页网络的推广网站有哪些类型

1.字符串中查找字符或字符串并返回索引&#xff0c;字符串中提取字符或字符串 函数find_first_of() 查找在字符串中第1个出现的字符c&#xff0c;而函数find_last_of()查找最后一个出现的c。匹配的位置是返回值。如果没有匹配发生&#xff0c;则函数返回-1。 int find_first_…...

c 网站开发 pdf/吉林网站seo

FROM: http://www.cnblogs.com/CsOH/p/5904430.html 问题&#xff1a;有n个数组成一个序列&#xff0c;有m个形如询问L, R的询问&#xff0c;每次询问需要回答区间内至少出现2次的数有哪些。 朴素的解法需要读取O(nm)次数。如果数据范围小&#xff0c;可以用数组&#xff0c;时…...

莱芜百度网站建设/好用的磁力搜索引擎

开启页面表单的Rest功能 spring:mvc:hiddenmethod:filter:enabled: true #开启页面表单的Rest功能<form action"/user" method"get"><input value"REST-GET提交" type"submit" /> </form><form action"/…...

温州做网站seo/2022网络热词30个

在程序开发过程中&#xff0c;我们时不时要用到一些定时器&#xff0c;通常如果时间精度要求不高&#xff0c;可以使用sleep&#xff0c;uslepp函数让进程睡眠一段时间来实现定时&#xff0c;前者单位为秒(s)&#xff0c;后者为微妙(us)&#xff1b;但有时候我们又不想让进程睡…...