嵌入式计算和视觉加速的开放标准
嵌入式计算和视觉加速的开放标准
Khronos将软件连接到硅
开放、免版税的互操作性标准,以利用GPU、XR和多处理器硬件的力量3D图形、增强和虚拟现实、并行编程、推理和视觉加速非营利、成员驱动的标准组织,向任何公司开放经验证的多公司治理和知识产权框架。
成立于2000年
约200名会员|~40%美国、30%欧洲、30%亚洲
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432767-763653602.png)
对并行处理的需求
单处理器
编程简单,但可能无法提供足够的性能
尤其是当摩尔定律频率/功率缩放正在放缓时
多处理器
额外的处理器可以处理扩展的工作负载,但会增加系统设计和编程的复杂性:
(i) 将工作负载划分为内核程序,以便在可用处理器之间进行分配
(ii)同步使用计算和内存资源
(iii)交流中间数据和结果
开放标准API和语言可以帮助管理这种复杂性
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432764-1385069718.png)
什么是开放互操作性标准?
开放标准
互操作性是精确规定的通信
例如,软件到硬件,客户端到服务器
OPEN标准规范是通过多公司合作在商定的IP框架下创建的
开放的标准规范加上一致性测试使多重一致性实现能够满足不同市场、价位和用例的需求
开放源代码
开源项目是通过多公司合作和通过贡献许可证的软件努力创建的
设计治理范围从窄到宽
取决于项目的历史和目的
开放标准通常使用开放源代码来共享示例实现、工具、示例、一致性测试、验证器等的开发工作。
通常用于硬件API,以实现不同实现之间的竞争,而不会出现碎片。
通常用于软件库和语言,以通过单个实现共享工作并获得一致性。
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432742-1287509760.png)
开放互操作性标准的好处
•经验证的解决方案–通常免费提供
-利用重要的行业努力和行业专业知识
•对硬件和软件开发人员的好处
-跨平台应用程序的可移植性和可重用性
-全行业的工具和库生态系统
•嵌入式市场的好处
-软件和硬件解耦,简化开发、集成和安全认证
-跨代可重用性和现场可升级性
为什么要开放标准? |
扩大商业机会 兼容产品和服务的网络效应 |
降低成本 分享设计成果,推动销量增长 |
避免市场摩擦 减少碎片和混乱 |
加快上市时间 利用经验证的功能和测试 |
|
何时? |
当技术得到验证 避免由标准委员会进行研发 |
共识需求 没有可用标准的缺点非常明显 |
怎么做? |
建立信任的多公司治理 避免单一公司控制或依赖 |
明确的知识产权政策 免版税标准推动广泛采用 |
通过灵活的可扩展性进行创新 扩展及时满足客户和市场需求 |
精心抽象的创新 自由创新实施细节 |
Khronos合作框架
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432699-1168713043.png)
Khronos现行标准
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432719-1450516401.png)
Khronos标准与计算、嵌入式、视觉和安全关键型市场最相关
Khronos计算加速度标准
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432679-1272804171.png)
OpenCL–低级并行编程
应用程序加速的编程与运行时框架
将计算密集型内核卸载到并行异构处理器上
CPU、GPU、DSP、FPGA、Tensor处理器OpenCL C或C++内核语言
平台层API
查询、选择和初始化计算设备
运行时API
在多个设备上构建和执行内核程序
显式应用程序控制
哪些程序在什么设备上执行
数据存储在系统存储器中的位置
程序何时运行,以及哪些操作依赖于早期操作
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432694-1328694054.png)
补充仅GPU的API
更简单的编程模型
相对轻量级的运行时
更大的语言灵活性,例如指针
严格定义的数字精度
机器学习加速API
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432739-1823537464.png)
OpenCL 3.0采用和路线图
•采用新的统一规范格式的定期(大致)季度发布
-3.0.16于2024年4月发布,最终确定了外部存储器和信号量
•大量开源活动
-Mesa Rusticl Linux版
-clang/LLVM编译前端
-基于Vulkan的clspv和Ancle分层实现,基于DX12的OpenCLon12分层实现
•OpenCL作为Vulkan之上的计算层逐渐被接受
-特别是对于机器学习
•活跃的扩展渠道——由移动、嵌入式和台式机市场驱动
-可记录命令缓冲区、统一共享内存、协作矩阵和其他ML原语
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432480-487565648.png)
SYCL单源C++并行编程
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432719-1288006182.png)
SYCL调度
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432488-733519199.png)
SYCL在开发中的实施
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432488-1966607322.png)
SYCL实验开
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432742-2056057695.png)
SYCL Next
•作为KHR扩展逐步发布新功能的战略路径
-完成测试和实施
•主要优先事项是:
-语法改进
-队列事件性能
-任务图
-编译时属性
-层次并行性
•寻求有关优先功能的反馈!
- https://community.khronos.org/c/sycl/
- https://registry.khronos.org/SYCL/
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432674-2065719997.png)
Intel oneAPI DPC++和UXL基础
•Intel oneAPI DPC++符合SYCL 2020规范
-统一共享内存、并行约简、工作组算法、类模板
论证推导、访问器简化、扩展互操作性等等
•UXL统一加速基础
-加速计算开放生态系统
-工具和库
-编译器和开发工具
-API和规范
•Khronos和UXL刚刚宣布进行联络
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432718-219395862.png)
OpenVX跨供应商视觉与推理
基于图形的高级抽象实现可移植、高效的视觉处理
处理器供应商创建、优化和发货的优化OpenVX驱动程序
可在几乎任何具有性能可移植性的硬件或处理器上实现
图可以包含视觉处理和用于全局优化的NN节点
运行时图形执行只需要很少的主机CPU交互
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432700-1770934244.png)
OpenVX路线图
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432739-1153491611.png)
对API功能安全的需求日益增长
安全关键API减少了功能安全至关重要的系统级认证工作
1) 简化以减少文档和测试表面积
2) 简化系统设计和测试的确定性行为
3) 明确而全面的故障处理
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432783-2078537677.png)
摄像机系统API标准的需求
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432762-386180368.png)
嵌入式摄像机系统API-正在开发中
开放、跨供应商、免版税的摄像头、传感器和ISP控制开放标准
嵌入式、移动、工业、XR、汽车和科学市场
好处
摄像头/传感器代码的可移植性,使新传感器的系统集成更加容易
跨多代相机和传感器保存应用程序代码
对传感器流生成进行复杂控制,实现有效的下游处理
有效的摄像机API抽象将使摄像机和传感器供应商能够暴露
硬件功能,而不披露专有的实现细节,同时获得
访问更大的图书馆和应用程序生态系统
典型Kamaros软件堆栈
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432695-11547500.png)
Kamaros和Vulkan
•Kamaros正在重新使用Vulkan设计元素
-节省重新设计重复出现的元素的时间
-队列、缓冲区、同步等。
•作为Vulkan扩展或独立API部署
-独立API可以在没有GPU的情况下实现
•Vulkan设计已得到充分验证
-低级别、明确的硬件访问
-具有计算和图形功能的无缝互操作
•利用Vulkan生态系统
-SDK工具,包括层和加载程序
-使用Vulkan CTS的相关部件
-开发人员熟悉程度
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432478-794232466.png)
典型Kamaros系统实施
可以使用任何API——例如Khronos开放标准
如果Kamaros被实现为Vulkan扩展,则可以是ISP上的单个Vulkan运行时,并且下游处理Kamaros功能可以集成到OpenVX节点中。
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432695-825259721.png)
Kamaros便携式应用程序结构
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432680-2066792833.png)
Kamaros、Khronos和EMVA合作
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432673-451846284.png)
Khronos/EMVA有一个持续协调的联络协议和指定联络人的联合会员特权。
SPIR-V生态系统
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432745-628935504.png)
API分层
利用SPIR-V的开源编译器生态系统越来越强大。
行
无需额外的内核级驱动程序即可实现内容,从而使平台受益。
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432741-1210980641.png)
列
即使没有本机驱动程序,也可以跨多个平台提供API,从而提供应用程序部署灵活性并消除碎片,从而使ISV受益。
分层OpenCL实现
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432739-356015330.png)
使用OpenCL的应用程序、库和引擎
适用于低级别异构并行编程的通用、跨供应商、开放标准
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432495-28361699.png)
执行OpenCL程序
内核程序是可执行代码的基本单元(类似于C函数)
OpenCL程序是内核和函数的集合
主机应用程序使用OpenCL命令队列向设备发送内核和数据传输功能以供执行。
通过将命令排入命令队列,内核和数据传输功能可以与应用程序主机代码异步并行执行。
作为一种开放标准,OpenCL是一种经过充分验证的设计,可从许多硅供应商那里获得,这些供应商拥有广泛的可用工具、编译器、库和教育材料生态系统。
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164432698-1349175118.png)
OpenCL开源项目发展势头
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164606755-1739048820.png)
OpenCL咨询小组
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164606769-1623367156.png)
参与进来
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164606776-719244140.png)
SYCL参考
•支持SYCL开发人员的新资源
•灵感来自cppreference.com
•SYCL 2020 API简介
•规范仍然是规范性文件
用于OpenCL的C++
开源编译器前端
取代OpenCL C++内核语言规范
官方发布在OpenCL Docs repo
启用完整的OpenCL C和大多数C++17功能
OpenCL C代码有效且完全兼容
允许现有应用程序逐步过渡到C++
Clang自9.0版起支持
必要时生成SPIR-V 1.0和SPIR-V 1.2
通过cl_ext_cxx_for_opencl扩展进行在线编译
![](https://img2024.cnblogs.com/blog/1251718/202406/1251718-20240629164606796-547876416.png)
OpenCL规范发布和路线图
OpenCL 3.0.16于2024年4月4日发货
继续进行新功能和错误修复的常规发布节奏
用于外部共享和Interop的外部内存对象和信号量已完成
内核时钟扩展临时发布
参考文献链接
https://www.khronos.org/assets/uploads/developers/presentations/Khronos_Embedded_Compute_and_Vision_Overview_Jun24.pdf
人工智能芯片与自动驾驶