将多个内核放在一个程序中和为每个内核编译不同的程序的实际区别是什么,除了源代码组织?具体而言,寄存器压力是由程序大小还是由程序中选择的实际内核所决定的?所有内核的__local存储的总和是否分配给任何内核的运行?是否有其他与性能相关的观察结果(例如,代码上传大小到设备等)?
将多个内核放在一个程序中和为每个内核编译不同的程序的实际区别是什么,除了源代码组织?具体而言,寄存器压力是由程序大小还是由程序中选择的实际内核所决定的?所有内核的__local存储的总和是否分配给任何内核的运行?是否有其他与性能相关的观察结果(例如,代码上传大小到设备等)?
这可能与设备有关,我是从英特尔GPU的经验中得出的结论。程序范围的资源只对该程序中的内核可见。此外,寄存器分配是按内核进行的;因此,在K个程序中有1个内核与在1个程序中有K个内核对寄存器压力没有影响。您需要为每个程序进行构建和链接。因此,如果您不使用所有K个内核,则在一个程序中编译K个内核在启动时间方面效率较低。
__local
内存,如果我在两个不同的内核中声明了两个池,是否有任何一个内核只分配了这两个池的总和,还是遵循寄存器分配的相同规则? - Lorenzo Pistone