8 reasons why SPIR-V makes a big difference

From all the news that came out of GDC, I’m most eager to talk about SPIR-V. This intermediate languagespir-vwill make a big difference for the compute-industry. In this article I’d like to explain why. If you need a technical explanation of what SPIR-V is, I suggest you first read gtruc’s article on SPIR-V and then return here to get an overview of the advantages.

Currently there are several shader and c ompute languages, which SPIR-V tries to replace/support. We have GLSL, HLSL for graphics shaders, SPIR (without the V), OpenCL, CUDA and many others for compute shaders.

If you have questions after reading this article, feel free to ask them in a comment or to us directly.

1. It’s used by Vulkan

Yes, this is the number one reason. This will make SPIR-V a big standard for compute, probably bigger than OpenCL (in its current form). That’s a reason we will go big on this here at StreamComputing.

Vulkan is the stateless version of OpenGL – not even fully released, but now already the future de-facto cross-platform standard for modern graphics. Seems support for it is very complete. As it uses SPIR-V as shader language, this will greatly push SPIR-V. You have to understand, this is quite aggressive pushing. It unfortunately is needed with all those big corporations having their me-too languages everywhere. Once SPIR-V is everywhere, all languages that compile to SPIR-V are also supported – that probably will include HLSL, GLSL and various OpenCL languages.

2.It supports OpenCL C, C++ and more

In theory also OpenGL could accept SPIR-V next to GLSL on modern graphics cards – this would avoid the need to have GLSL and SPIR-V next to each other. Same for DirectX and HLSL. There is always demand for writing one single code-base and have support for many platforms, so expect many languages and tools that can export to and import from SPIR-V.

spir-v_in_out

Lots of input possibilities from GLSL and OpenCL to complete new languages. Currently only two main driver targets. “Other languages” where SPIR-V can export to, includes LLVM.

Even CUDA-kernels or HLSL could get compiled to SPIR. This means that porting can even go faster, if the host-code isn’t too complex.

SPIR-V is the base, not for only 

See what is already coming around on Github. I already see Python, dotNET/Linq and GLSL! No HLSL or CUDA yet – ask us for more info…

3. It’s better than the LLVM-based SPIR

Flexibility is key. LLVM has it’s own agenda, which seemed to be too different from what Khronos wanted with SPIR. A few years I wrote “SPIR by example” where you already see the limits of LLVM for the purposes of SPIR – important data was put in comments. SPIR-V is SPIR without limits.

2015-spir-v-page6

4. Tools can do (static) analysis on SPIR-code

Many, many languages a problem? Not at all – tools just have to focus on SPIR, and the frontend-compilers need to make sure the mapping to the original source is fluent. This makes it possible to have tool-support for new kernel-languages for free.

5. It integrates very well with the existing LLVM too-chain

SPIR-V is a clean language to have as a frontend-language for LLVM. SPIR-V is expected to get an official LLVM frontend soon. For now there is LunaGLASS’s project.

6. It is the same on mobile processors

As Vulkan has the same API for embedded processors, SPIR-V is also the same for mobile and desktop. There is only the checking of the GPU-capabilities, as we know from OpenCL (memories, compute capabilities), which is simpler to code.

7. It is handled by the OpenCL Runtime

khronos-SPIR-V-flowchart

There are two options for handling SPIR-V. First is using an adapted version of the GLSL-compiler, but that won’t be able to use the full spectrum of V’s capabilities without a lot of fixing. The better solution is to adapt the OpenCL-compiler built for that platform – and that’s what Khronos also had in mind. Above is an image of the flow – as you see OpenCL 2.1 is the minimum version needed.

2015-spir-v-page8

8. Better IP protection

Where OpenCL kernels could “accidentally” be read, when hidden in the code, SPIR-V gives better legal protection. SPIR-V has to be decoded and falls under the same laws that protect decoding of JAVA or dotNET code.

8 reasons why SPIR-V makes a big difference

From all the news that came out of GDC, I’m most eager to talk about SPIR-V. This intermediate languagespir-vwill make a big difference for the compute-industry. In this article I’d like to explain why. If you need a technical explanation of what SPIR-V is, I suggest you first read gtruc’s article on SPIR-V and then return here to get an overview of the advantages.

Currently there are several shader and c ompute languages, which SPIR-V tries to replace/support. We have GLSL, HLSL for graphics shaders, SPIR (without the V), OpenCL, CUDA and many others for compute shaders.

If you have questions after reading this article, feel free to ask them in a comment or to us directly.

1. It’s used by Vulkan

Yes, this is the number one reason. This will make SPIR-V a big standard for compute, probably bigger than OpenCL (in its current form). That’s a reason we will go big on this here at StreamComputing.

Vulkan is the stateless version of OpenGL – not even fully released, but now already the future de-facto cross-platform standard for modern graphics. Seems support for it is very complete. As it uses SPIR-V as shader language, this will greatly push SPIR-V. You have to understand, this is quite aggressive pushing. It unfortunately is needed with all those big corporations having their me-too languages everywhere. Once SPIR-V is everywhere, all languages that compile to SPIR-V are also supported – that probably will include HLSL, GLSL and various OpenCL languages.

2.It supports OpenCL C, C++ and more

In theory also OpenGL could accept SPIR-V next to GLSL on modern graphics cards – this would avoid the need to have GLSL and SPIR-V next to each other. Same for DirectX and HLSL. There is always demand for writing one single code-base and have support for many platforms, so expect many languages and tools that can export to and import from SPIR-V.

spir-v_in_out

Lots of input possibilities from GLSL and OpenCL to complete new languages. Currently only two main driver targets. “Other languages” where SPIR-V can export to, includes LLVM.

Even CUDA-kernels or HLSL could get compiled to SPIR. This means that porting can even go faster, if the host-code isn’t too complex.

SPIR-V is the base, not for only 

See what is already coming around on Github. I already see Python, dotNET/Linq and GLSL! No HLSL or CUDA yet – ask us for more info…

3. It’s better than the LLVM-based SPIR

Flexibility is key. LLVM has it’s own agenda, which seemed to be too different from what Khronos wanted with SPIR. A few years I wrote “SPIR by example” where you already see the limits of LLVM for the purposes of SPIR – important data was put in comments. SPIR-V is SPIR without limits.

2015-spir-v-page6

4. Tools can do (static) analysis on SPIR-code

Many, many languages a problem? Not at all – tools just have to focus on SPIR, and the frontend-compilers need to make sure the mapping to the original source is fluent. This makes it possible to have tool-support for new kernel-languages for free.

5. It integrates very well with the existing LLVM too-chain

SPIR-V is a clean language to have as a frontend-language for LLVM. SPIR-V is expected to get an official LLVM frontend soon. For now there is LunaGLASS’s project.

6. It is the same on mobile processors

As Vulkan has the same API for embedded processors, SPIR-V is also the same for mobile and desktop. There is only the checking of the GPU-capabilities, as we know from OpenCL (memories, compute capabilities), which is simpler to code.

7. It is handled by the OpenCL Runtime

khronos-SPIR-V-flowchart

There are two options for handling SPIR-V. First is using an adapted version of the GLSL-compiler, but that won’t be able to use the full spectrum of V’s capabilities without a lot of fixing. The better solution is to adapt the OpenCL-compiler built for that platform – and that’s what Khronos also had in mind. Above is an image of the flow – as you see OpenCL 2.1 is the minimum version needed.

2015-spir-v-page8

8. Better IP protection

Where OpenCL kernels could “accidentally” be read, when hidden in the code, SPIR-V gives better legal protection. SPIR-V has to be decoded and falls under the same laws that protect decoding of JAVA or dotNET code.

8 reasons why SPIR-V makes a big difference相关推荐

  1. FFmpeg笔记--vcodec和-c:v,-acodec和-c:a的区别?

    在看ffmpeg命令的时候经常会看到有些地方使用--vcodec指定视频解码器,而有些地方使用-c:v指定视频解码器,那这两个有没有区别呢? ffmpeg的官方文档: -vcodec codec (o ...

  2. Redefining the shading languages ecosystem with SPIR-V

    SPIR-V,全称Standard Portable Intermediate Representation (SPIR) 是一种用在GPU通用计算和图形学上的中间语言(intermediate la ...

  3. 将HLSL射线追踪到Vulkan

    将HLSL射线追踪到Vulkan Bringing HLSL Ray Tracing to Vulkan Vulkan标志 DirectX光线跟踪(DXR)允许您使用光线跟踪而不是传统的光栅化方法渲染 ...

  4. Oracle SQL 高版本相关

    本文翻译自Troubleshooting: High Version Count Issues (文档 ID 296377.1),有删改 主要内容: 什么是高版本问题 什么是共享SQL? 什么是&qu ...

  5. High Version Count Issues(SQL高Version Count) (文档 ID 296377.1)

    Troubleshooting: High Version Count Issues (文档 ID 296377.1) In this Document Purpose   Ask Questions ...

  6. High Version Count Issues

    In this Document Purpose   Ask Questions, Get Help, And Share Your Experiences With This Article Tro ...

  7. Troubleshooting: High Version Count Issues (文档 ID 296377.1)

    In this Document   Purpose   Ask Questions, Get Help, And Share Your Experiences With This Article   ...

  8. Sentence-Bert论文中英文比对翻译

    Sentence-Bert论文全名: Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks Sentence-Bert论文地址: ...

  9. 《Real-Time Rendering 4th Edition》全文翻译 - 第3章 图形处理单元(GPU)(中)3.4 ~ 3.6

    不闹情绪了--好好学习,拯救世界-- 实时渲染(第四版)Real-Time Rendering (Fourth Edition) 第3章 图形处理单元(GPU) Chapter 3 The Graph ...

  10. Crash Dump Analysis 崩溃转储分析-摘抄翻译自深入解析windows操作系统

    Almost every Windows user has heard of, if not experienced, the infamous "blue screen of death. ...

最新文章

  1. Linux有问必答:如何安装autossh
  2. 从xib 创建 collectionViewCell
  3. 2019\Province_C_C++_B\试题F-特别数的和
  4. (98)FPGA边沿检测(下降沿检测)
  5. [转]Java实现定时任务的三种方法
  6. ssl客户端与服务端通信的demo
  7. 华为模拟eNSP器交换机简单开具以及基础命令
  8. Java最新学习笔记(2020版)丨基于JKD1.8
  9. 微信小程序 使用map组件 地图获取位置、移动选点、逆地址解析
  10. 理解CTP/XTP柜台对接
  11. 组建自己的局域网(可以将PC机实现为服务器)
  12. 紫光同创国产FPGA学习之IP Compiler
  13. windows下制作macos安装u盘_制作MacOS系统启动盘教程以及安装教程
  14. 抖音怎么创建共创抖音共创是什么?怎么操作全集教程
  15. zsh 和 fish 安装与使用
  16. 前端下载 “不支持打开该类型文件或文件已损坏“问题
  17. JavaScript 的 Math.floor() 函数
  18. K-临近算法介绍和实践
  19. 项目日志出现:syntax error, error in :‘it 5 LIMIT ? ‘, expect LIMIT, actual LIMIT pos 问题
  20. VMware Horizon 8 2012 -- 用于管理虚拟桌面 (VDI)、应用和在线服务的领先平台

热门文章

  1. 小程序开发代码_企业为什么要选择小程序定制开发?
  2. 内存分析_Redis内存爆炸增长?你需要知道这一套Redis内存分析方法
  3. linux tomcat启动nohup,linux下tomcat添加服务
  4. java输出set中的元素_老师,为什么遍历Set集合里的元素,一直都是有序的输出呢?...
  5. php 数组的处理,php 数组处理
  6. linux 运行jar main,Maven打包生成jar包并在linux下启动main方法
  7. mongodb数据库扩展名_MongoDB如何存储数据
  8. 蓝牙最新版本6.0_低功耗蓝牙的有趣事实
  9. 哈工大大数据实验_【新闻动态】南京大学PASA大数据实验室在KDD Cup 2020 AutoGraph自动化图数据建模国际挑战赛中荣获第二名...
  10. linux网络方面命令大全,Linux下必须知道的11个网络命令