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

OpenCL SPIR二进制构建在Intel Skylake GPU上非常慢,opencl,spir,Opencl,Spir,我有许多OpenCL内核被编译成SPIR二进制文件。我明白: 从SPIR二进制文件构建程序需要额外的时间,而不是从中间二进制文件构建程序,因为需要额外的翻译和优化步骤 见: 然而,在英特尔Skylake i7 GPU上构建SPIR内核几乎需要一分钟 这是一个SPIR特定问题吗?SPIR-V会更快吗?相比之下,在线(非SPIR)编译器需要多长时间?你的内核有多大?对我来说似乎太过分了;我们的在线内核最多只需要几秒钟。但同样,FPGA OpenCL编译在完全优化时可能需要数小时或数天的时间。@Dit

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

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

见:

然而,在英特尔Skylake i7 GPU上构建
SPIR
内核几乎需要一分钟

这是一个
SPIR
特定问题吗?
SPIR-V
会更快吗?

相比之下,在线(非SPIR)编译器需要多长时间?你的内核有多大?对我来说似乎太过分了;我们的在线内核最多只需要几秒钟。但同样,FPGA OpenCL编译在完全优化时可能需要数小时或数天的时间。@Dithermaster加载
IR
格式的内核文件在第一次加载时需要82毫秒,在后续加载时需要7毫秒。显然,处理器/GPU在第一次加载后缓存内核。有两个内核文件:简单的
SPIR
内核文件在650mS以下加载,复杂的需要55秒以上。复杂的内核文件有11个内核,大约650行,使用MSVC 2017中最新版本的Code Builder编译只需一分钟。哇,加载IR甚至需要55秒?一分钟后编译成IR?看起来很奇怪。也许把它分成多个程序(而不是一个有11个内核的程序)?@Dithermaster我想你误读了一些数字,加载IR只花了82毫秒,SPIR的时间超过了55秒。IR加载时间不是问题,我更愿意加载SPIR格式以实现可移植性,但不会有这样的开销!我担心SPIR-V格式可能同样慢,但我的系统不支持它。不幸的是,我不能进一步拆分程序,因为内核有很多共同的代码。你称之为IR是什么?我认为SPIR是IR。您的意思是加载从先前编译中保存的二进制文件吗?无论如何,长达一分钟的编译似乎是一个bug。我想知道,因为这也是关于英特尔的,如果这个话题与此相关(你使用短路条件吗?),那么在线(非SPIR)编译器相比需要多长时间?你的内核有多大?对我来说似乎太过分了;我们的在线内核最多只需要几秒钟。但同样,FPGA OpenCL编译在完全优化时可能需要数小时或数天的时间。@Dithermaster加载
IR
格式的内核文件在第一次加载时需要82毫秒,在后续加载时需要7毫秒。显然,处理器/GPU在第一次加载后缓存内核。有两个内核文件:简单的
SPIR
内核文件在650mS以下加载,复杂的需要55秒以上。复杂的内核文件有11个内核,大约650行,使用MSVC 2017中最新版本的Code Builder编译只需一分钟。哇,加载IR甚至需要55秒?一分钟后编译成IR?看起来很奇怪。也许把它分成多个程序(而不是一个有11个内核的程序)?@Dithermaster我想你误读了一些数字,加载IR只花了82毫秒,SPIR的时间超过了55秒。IR加载时间不是问题,我更愿意加载SPIR格式以实现可移植性,但不会有这样的开销!我担心SPIR-V格式可能同样慢,但我的系统不支持它。不幸的是,我不能进一步拆分程序,因为内核有很多共同的代码。你称之为IR是什么?我认为SPIR是IR。您的意思是加载从先前编译中保存的二进制文件吗?无论如何,长达一分钟的编译似乎是一个bug。我想知道,既然这也是关于英特尔的,那么这个话题是否相关(是否使用短路条件?)