问题标签 [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.
opencl - OpenCL SPIR 二进制构建在 Intel Skylake GPU 上非常慢
我有许多编译成SPIR
二进制文件的 OpenCL 内核。我明白那个:
从 SPIR 二进制文件构建程序需要额外的时间,而不是从中间二进制文件构建程序,因为涉及额外的翻译和优化步骤。
请参阅:通过英特尔® OpenCL™ 代码生成器使用 SPIR 获得乐趣和利润
但是,SPIR
在 Intel Skylake i7 GPU 上构建内核需要将近一分钟!
这是一个SPIR
特定的问题吗?会SPIR-V
更快吗?
opencl - 减少时内核本地数组中的障碍(CLK_LOCAL_MEM_FENCE)奇怪的死锁
该代码由 clCreateProgramWithSource 运行良好,但由 clCreateProgramWithBinary 解除锁定。工作组的大小是(8,8),我在Intel Graphics win8.1+ HD4600/530和win10+HD630上重现了死锁。
创建 spir 的 cmd 是
我试过'-cl-opt-disable',同样的死锁。我试过低于等价,也死锁了。
我可以使用指令点来避免减少,而我想知道更多。我错过了什么?或者有什么方法可以将两种方式的 gen 组装出来比较它们的差异?非常感谢。
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 上运行这个示例代码。
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 并没有创建一个“好的”二进制文件,但是如何创建它呢?
感谢你的帮助!
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。