首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将SPIR二进制分解为LLVM IR

将SPIR二进制分解为LLVM IR
EN

Stack Overflow用户
提问于 2015-07-09 16:17:21
回答 1查看 626关注 0票数 0

我的理解是,SPIR二进制被认为是LLVM比特码,SPIR是LLVM IR的子集。此外,SPIR与设备无关。我尝试使用llvm命令对我从clGetProgramInfo获得的二进制文件使用CL_PROGRAM_BINARIES作为参数,但是它告诉我“无效的bitcode签名”。llvm at分析器返回“顶层无效记录”。

通过使用Clang将我的OpenCL内核转换为LLVM或LLVM,我可以走相反的道路。但是,bitcode文件的大小大约要小10倍,所以我很确定它与我的SPIR二进制文件不一样。

为了完整起见,我的GPU确实有cl_khr_spir扩展。

  1. 我对SPIR二进制代码LLVN的理解正确吗?
  2. 有办法将SPIR二进制文件分解成LLVM IR吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-09 16:56:56

您是正确的,因为SPIR 1.2是LLVM (特别是LLVM3.2)的一个子集。请注意,SPIR的最新版本(称为SPIR-V)不是从LLVM IR派生出来的,而是一个独立的、从头开始的中间表示形式。

使用llvm-dis是正确的方法来分解一个基于LLVM的SPIR二进制文件.因为SPIR1.2是从LLVM3.2派生的,所以这只能保证对llvm-dis的LLVM3.2版本有效。在实践中,我发现对于更新版本的LLVM来说,这仍然很好,但是不能保证总是这样。

尽管您的设备支持cl_khr_spir扩展,但是当您从clGetProgramInfo查询CL_PROGRAM_BINARIES时,并不需要它实际返回SPIR二进制文件。许多平台将返回一个本地二进制文件(例如x86或本地GPU ),或者其他一些中间表示(这可能是为什么LLVM无法识别您的二进制文件是基于LLVM的)。没有通过OpenCL运行时API检索SPIR二进制文件的标准化机制。

使用clang将OpenCL C内核编译到LLVM /SPIR1.2是获得LLVM文件的最佳方法,然后可以使用llvm-dis解压缩该文件。一些供应商(例如英特尔)也提供了离线编译器和他们的OpenCL SDK,这些SDK提供了专门的命令/工具来实现这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31322968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档