多次调用kernel结果出错

qq_23404257 2014-12-18 03:48:05
大家好,我是新人,现在想问个问题。我的显卡是GT650,线程最多1024*4。 远远不够用,于是我就在kernel代码里让每个线程循环1万次,也就是处理1万个数据。 问题1: 为什么2万次以及以上得出来的结果不对?是不是里面寄存器啊什么的溢出了什么的?
于是我又想了个馊点子:问题2:主机调用kernel,然后接着再写一条调用kernel。出来的结果就不对?(是明显的不对,不是逻辑问题问题的不对)


现在我能想到的就是把运行正常的代码封装成一个函数,另外再重新写个main,再在里面重复调用封装好的函数。这样结果是对的,可是这样每调用一次又得重新读入数据,分配内存,数据传输,太浪费时间了啊...
...全文
347 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
linxxx3 2014-12-18
  • 打赏
  • 举报
回复
如果机器是单显卡,并且这块显卡还被用作图形显示,满足这两个条件,那么碰到的问题,可能是单个kernel执行的时间超过上限(1秒或者2秒?具体时间忘了)。 确认问题的话,根本解决的办法有两个:装双显卡或者使用命令行界面的linux。 像你第二种方式,改程序也可以,如果kernel执行的时间确实长,多次传输和计算,相比一次计算几倍量的数据,不会有大的损失。因为数据量大的时候,传输和计算的时间,跟数据量成正比,跟你调用多少次kernel没有关系。
YCMyTot 2014-12-18
  • 打赏
  • 举报
回复
1. GTX650 每个Block内的线程最多支持1024个。 2. 寄存器的数量是有限的。 3. 能不能把代码贴出来,我们一起看一下?

579

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧