OpenCL用于多核CPU运算
这两天把OpenCL用在了多核cpu上,我用的i5-3470,开始跑了下nvidia提供的opencl样例程序“中值滤波”,我把代码更改了下,用i5的多核cpu跑了起来,测了一下,滤波一次,用cpu单核单线程串行运算时2.3秒滤波一次,用opencl给多核cpu进行并行计算,0.16秒滤波一次。i5-3470只有4核4线程啊。。。如何得到14倍左右的性能提升的?算法我也比较过代码了,基本上是一样的,只是一个写成了并行的kernel,一个是串行的for循环,没有相差太多
望高手能分析下原因,拯救我一下,寝食难安啊,万分感谢
------解决方案--------------------那就可能是测时代码有问题。上代码。
------解决方案--------------------
你说的有道理。
我觉得这可能是由于不同情况下调用开销的问题,CPU情况下,有很多逻辑运算单元参与循环操作,opencl情况下,可能有些逻辑工作已经蕴涵于kernel的设计之中。
另外, opencl在cpu上实现时,还会精心处理关于内存的使用,以减少内存冲突的几率。
以上只是我的猜测,具体可以参见《Heterogeneous computing with OpenCl》第六章关于opencl在cpu上的实现部分。