OpenCL内核大小对性能的影响

时间:2018-03-26 21:54:19

标签: performance parallel-processing opencl gpu

我有两个几乎相同的OpenCL内核,但有一些细微差别。一个内核执行256个FMA操作,另一个内核在循环体中执行512个操作。

以下是内核的一般结构:

__kernel void WGSXMAPIXLLXOPS8(const __global float * restrict GIn, __global float * restrict GOut, const float M, const float N, const float P) {
        const int XGL = get_global_id(0);
        const int XGRid = get_group_id(0);
        const int XGRnum = get_num_groups(0);
        const int XLSize = get_local_size(0);
        const int XLid = get_local_id(0);
        // Just a private variable
        float MF = (float) XGL;
        float NF = (float) N;
        float PF = (float) P;
        float tempOutTotal = 0;

        // Start of a new level of for loop
        for (int lcdd = 0; lcdd < 2; lcdd++) {
                float temp1 = 1.0;
                temp1 = temp1 * MF + temp1;
                temp1 = temp1 * MF + temp1;
                ...
                temp1 = temp1 * MF + temp1;
                temp1 = temp1 * MF + temp1;
                GOut[XGL] = temp1;
        }

}

现在,我通过将浮点运算的总数除以完成它的时间来计算这些内核的GFlops。我在GPU上部署了141076个工作项。对于具有256个FMA操作的内核,我得到大约1696.5个GFlops,对于具有512个FMA操作的内核,我得到大约2043.74个生命值。

从我的角度来看,我有足够的并行性,并且我在内核中有足够的操作。除非我的假设是错误的。

现在的问题是:为什么在内核中有更多的操作可以提高性能?我知道并行性确实很重要,并且每个内核都应该做足够的操作。那么,究竟是什么导致了这种性能上的特定差距?

更具体地说,占用率与内核操作的数量和类型之间是否有任何关系?

0 个答案:

没有答案