Opencl 单个程序中有多个内核,而每个程序只有一个内核

Opencl 单个程序中有多个内核,而每个程序只有一个内核,opencl,Opencl,将多个内核放在一个程序中,或者为每个内核编译不同的程序(不包括源代码组织),实际的区别是什么?具体来说,寄存器压力是由程序的大小决定的,还是由程序中选择的实际内核决定的?是否为任何内核的运行分配了所有内核的所有\u本地存储的总和?是否还有其他与性能相关的观察(例如,将代码上载到设备的大小等)?这可能是特定于设备的,我是根据英特尔GPU的经验说的。程序范围资源将仅对该程序中的内核可见。除此之外,寄存器分配是每个内核的;因此,K个程序中的1个内核与1个程序中的K个内核对寄存器压力没有影响。您确实为每

将多个内核放在一个程序中,或者为每个内核编译不同的程序(不包括源代码组织),实际的区别是什么?具体来说,寄存器压力是由程序的大小决定的,还是由程序中选择的实际内核决定的?是否为任何内核的运行分配了所有内核的所有
\u本地
存储的总和?是否还有其他与性能相关的观察(例如,将代码上载到设备的大小等)?

这可能是特定于设备的,我是根据英特尔GPU的经验说的。程序范围资源将仅对该程序中的内核可见。除此之外,寄存器分配是每个内核的;因此,K个程序中的1个内核与1个程序中的K个内核对寄存器压力没有影响。您确实为每个程序构建和链接。因此,如果不使用所有的K内核,在一个程序中编译K内核在启动时间方面的效率较低。

谢谢。我对英特尔GPU特别感兴趣。我忘了在问题中提到,
\u local
内存呢?如果我在两个不同的内核中声明了两个池,那么任何内核都会分配这两个池的总和,还是遵循相同的寄存器分配规则?不,本地内存只是运行内核的工作组的本地内存。这两种编译策略没有区别。