首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Intel 4000编程OpenCL GPU

用Intel 4000编程OpenCL GPU
EN

Stack Overflow用户
提问于 2018-09-05 15:36:16
回答 1查看 1.3K关注 0票数 0

我一直试图使用OpenCL c++绑定(Version1.2)实现一个简单的并行算法。大致如下是c代码(没有OpenCL):

代码语言:javascript
复制
typedef struct coord{
    double _x;
    double _y;
    double _z;
}__coord;

typedef struct node{
    __coord _coord;
     double _dist;
} __node;
double input[3] = {-1.0, -2, 3.5};
//nodeVector1D is a 1Dim random array of struct __node
//nodeVectorSize is the Size of the above array (>1,000)
double d = 0.0;
     for(int i=0; i < nodeVectorSize; i++){
         __node n = nodeVector1D[i];
         d += (input[0] - n._coord._x)*(input[0] - n._coord._x);
         d += (input[1] - n._coord._y)*(input[1] - n._coord._y);
         d += (input[2] - n._coord._z)*(input[2] - n._coord._z);
         n._dist = d;
     }

我使用MacBook Pro 13“,运行在MacBook上。OpenCL只检测CPU。CPU:英特尔常春藤i5 2.6GHz,集成GPU 1.6Ghz (英特尔高清图形4000)。最大检测到的组项大小为1024字节。当我运行上面的平面代码( 1024节点)时,它大约需要17微seconds.+。

当我使用OpenCL和C++库运行它的并行版本时,它花费的时间是它的10倍,大约87微秒(不包括程序创建、缓冲区分配和写入)。我在这里做错什么了?

注意:这个算法的OpenCL内核是显而易见的猜测,但是如果需要的话我可以发布它。提前谢谢。

编辑N#1:内核代码

代码语言:javascript
复制
__kernel void  _computeDist(
   __global void* nodeVector1D,
   const unsigned int nodeVectorSize,
   const unsigned int itemsize, 
   __global const double* input){
    double d = 0.;
    int i,c;
    double* n;
    i = get_global_id(0);
    if (i >= nodeVectorSize) return;
    n = (double*)(nodeVector1D + i*itemsize);
    for (c=0; c<3;c++){
        d += (input[c] - n[c])*(input[c] - n[c]);
    }
    n[3] = d;

}

对不起,空指针算法,但它有效(没有seg默认值)。我也可以发布OpenCL初始化例程,但我认为它在互联网上随处可见。不过,如果有人问起,我会发出去的。

@pmdj:正如我前面所说,OpenCL识别我的CPU,否则我就无法运行测试并获得上述性能结果。

@pmdj:据我所知,OpenCL内核代码总是用C编写的。然而,我标记C++是因为(正如我前面所说),我使用的是OpenCL C++绑定。

EN

回答 1

Stack Overflow用户

发布于 2018-09-07 16:54:14

我终于发现了这个问题。问题是Mac上的OpenCL返回错误的最大设备工作组大小为1024。我用不同的工作组大小进行了测试,当使用工作组大小为每组128个工作项时,性能提高了200%。这里有一个更清晰的基准图。IGPU代表集成GPU。(X轴:数组大小,Y轴:时间持续时间(以微秒为单位)

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

https://stackoverflow.com/questions/52188902

复制
相关文章

相似问题

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