问题标签 [spir]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
158 浏览

opencl - OpenCL SPIR 二进制构建在 Intel Skylake GPU 上非常慢

我有许多编译成SPIR二进制文件的 OpenCL 内核。我明白那个:

从 SPIR 二进制文件构建程序需要额外的时间,而不是从中间二进制文件构建程序,因为涉及额外的翻译和优化步骤。

请参阅:通过英特尔® OpenCL™ 代码生成器使用 SPIR 获得乐趣和利润

但是,SPIR在 Intel Skylake i7 GPU 上构建内核需要将近一分钟!
这是一个SPIR特定的问题吗?会SPIR-V更快吗?

0 投票
0 回答
224 浏览

opencl - 减少时内核本地数组中的障碍(CLK_LOCAL_MEM_FENCE)奇怪的死锁

该代码由 clCreateProgramWithSource 运行良好,由 clCreateProgramWithBinary 解除锁定。工作组的大小是(8,8),我在Intel Graphics win8.1+ HD4600/530和win10+HD630上重现了死锁。

创建 spir 的 cmd 是

我试过'-cl-opt-disable',同样的死锁。我试过低于等价,也死锁了。

我可以使用指令点来避免减少,而我想知道更多。我错过了什么?或者有什么方法可以将两种方式的 gen 组装出来比较它们的差异?非常感谢。

0 投票
1 回答
698 浏览

c++ - 捕获到 SYCL 异常:错误:[ComputeCpp:RT0101] 无法创建内核((内核名称:SYCL_class_multiply))

我克隆了https://github.com/codeplaysoftware/computecpp-sdk.git并修改了 computecpp-sdk/samples/accessors/accessors.cpp文件。

我刚加了std::cout << "SYCL exception caught: " << e.get_cl_code() << '\n';

查看完全修改的代码

构建后,我执行了二进制文件并得到以下错误输出:

硬件配置如下:

请帮助理解错误并解决相同的问题。让我知道是否需要更多信息。我想在我的 NVidia GPU 上运行这个示例代码。

0 投票
1 回答
223 浏览

opencl - 在 Windows 上使用 clBuildProgram 加载 SPIR 二进制文件

我正在尝试加载我用 clang+llvm 6.0.1 创建的 SPIR 二进制文件。

创建了几个不同的文件:

这一切都发生在 Windows 上,安装了 AMD APP SDK 3 和 Adrenalin 18.6.1 驱动程序。

在此之后,我尝试从二进制文件创建一个程序:

这一切都很好,我在这里没有任何错误,但是我在之后尝试构建它时会这样做:

我得到的错误是:

调用 clBuildProgram 时出现错误 CL_INVALID_COMPILER_OPTIONS

我也试过没有“-x spir ...”的东西,但后来我得到了:

错误:无效值(生产者:'LLVM6.0.1' 读者:'LLVM 3.9.0svn')

编辑:

CL_DEVICE_NAME: gfx900
CL_DEVICE_VERSION: OpenCL 2.0 AMD-APP (2580.6)
CL_DEVICE_OPENCL_C_VERSION: OpenCL C 2.0
CL_DRIVER_VERSION: 2580.6 (PAL,HSAIL)
CL_DEVICE_SPIR_VERSIONS: 1.2

运行clCreateProgramWithBinary后,我使用 clGetProgramBuildInfo 查询设备并得到:CL_PROGRAM_BINARY_TYPE
= [CL_PROGRAM_BINARY_TYPE_INTERMEDIATE]

所以这应该意味着二进制文件正在被识别,否则我猜它会返回 CL_PROGRAM_BINARY_TYPE_NONE

编辑2:

我认为 clang 并没有创建一个“好的”二进制文件,但是如何创建它呢?

感谢你的帮助!

0 投票
1 回答
74 浏览

vulkan - 有没有办法强制 SPIR-V 汇编函数同时接受 Private 和 Function 存储类数组?

我正在为 SPIR-V 着色器编写二进制处理模块,以解决由于驱动程序错误而导致的 float4x3[6] 矩阵的对齐问题。现在我有:

  • 注入必要的适当 OpTypes 和 OpTypePointers。
  • 处理二进制文件以将常量缓冲区成员从 float4x3[6] 更改为 vec4[18]
  • 注入函数将 vec4[18] 正确解包到 float4x3[6] 中,接受 vec4[18] 作为指向统一数组 18 的指针。
  • 创建了私有存储限定符矩阵解包目标作为 OpVariables。(SPIR-V 中的私有只是意味着调用级全局......)。
  • 注入了关于复合提取和构造的序言来调用我的新函数。(因为我看到我们需要将参数从常量缓冲区复制到函数,所以这就是我所做的)。
  • 从入口点调用该函数,以便每个 float4x3[6] 成员在 main() 启动时准备好解包矩阵。
  • 更改了引用常量缓冲区中给定成员的 OpAccessChain 操作,并将它们与引用我的新私有目标的访问链交换。

但现在我遇到了麻烦。看起来 SPIR-V 中的函数可以接受 Private 或 Function 存储限定符指针。不是都。有什么办法可以告诉 SPIR-V “是的,你可以在这里将这两个存储类作为参数转储”?

或者我是否需要重新设计我的解决方案以利用函数存储类矩阵目标,并在每次将它们用于新函数时注入它们并调用以解压它们?这似乎不太优雅,因为那时可能会有更多的解包操作。而且更轻松,因为我必须分别扫描每个 OpFunction 块并将带有函数存储的 OpVariables 注入使用矩阵的每个块中。

我的问题是,在完成所有这些机器之后,我的目标是作为私有存储持续时间的 OpTypePointer 生活的。因此我不能在从 HLSL 生成的任何 SPIR-V 函数中使用它们,因为它们采用函数持续时间的 OpTypePointers。我的解包函数是唯一的例外,因为我直接将它逐字节地注入到 SPIR-V asm 中,并且能够精确地调整标头中的 OpFunctionParameters。