首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JNCI/JCOL内核优化

JNCI/JCOL内核优化
EN

Stack Overflow用户
提问于 2011-08-29 15:17:19
回答 1查看 106关注 0票数 0

我有一个运行在开放式CL中的内核(通过jocl前端运行),与其他内核相比运行得非常慢,我试图弄清楚为什么和如何加速它。这个内核是非常基本的。它的唯一工作是抽取样本点的数量。它将输入数组中的每N个点复制到一个较小的输出数组中,以缩小数组大小。

内核被传递一个浮点数,指定在“好”点之间跳过多少点。因此,如果它通过1.5,它将跳过1分,102个,然后一个等等,以保持平均每1.5点被跳过。输入数组已经在GPU上(它是由较早的内核生成的),输出数组将留在内核上,因此向CPU或从CPU传输数据是不需要花费的。

这个内核运行速度比其他内核慢3-5倍,比一些快内核慢20倍。我意识到,我因为没有合并数组访问而受到了惩罚;但我不敢相信它会导致我运行如此之慢。在所有其他内核都接触到数组中的每个样本之后,我认为触摸数组中的任何X样例,即使没有合并,至少应该以相同的速度接触数组中的每个样本。

原始内核实际上同时抽取了两个数组,用于实数据和虚数据。我尝试将内核分成两个内核调用,一个用于抽取实调用,另一个用于抽取虚拟数据;但这一点都没有帮助。同样,我尝试“展开”内核,让一个线程负责3-4点的抽取,但这没有帮助。我尝试过处理传递到每个内核调用中的数据的大小(即对数千个数据点进行一次内核调用,或者对较小数量的数据点进行几次内核调用),这使我能够调整性能小的增益;但没有达到在GPU上实现这个内核所需的数量级。

为了给出一种规模感,这个内核每次迭代运行的时间是98 ms,而对于相同的输入数组大小,FFT只需要32 ms,而其他内核的运行时间是5 ms或更短。与其他内核相比,还有什么能使这么简单的内核运行得如此之慢呢?我是否可能真的不能对这个内核进行足够的优化以保证在GPU上运行它。我不需要这个内核比CPU运行得更快;只是不像CPU那么慢,所以我可以在GPU上保持所有的处理。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-30 11:39:19

事实证明,这个问题根本不是内核的问题。问题在于,当我试图释放缓冲区时,它会导致整个程序在内核(以及队列中的所有其他内核)完成时停止运行。这似乎不正确,据我所知,the只应该减少一个计数器,而不是阻塞在队列上。但是,重要的一点是,我的内核运行效率很高。

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

https://stackoverflow.com/questions/7232113

复制
相关文章

相似问题

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