可否让CUDA的并行运算与CPU的多核并行运算同时进行?

BoweirrKing 2014-10-30 10:58:48
我有一段涉及到大量浮点运算的程序,在使用了OpenMP并行计算之后,虽然快了许多,但是还是不太令人满意。
所以就想借这里问一下,可不可以让CUDA的并行运算与CPU的多核并行运算同时进行?就是在一个程序/进程中,两边同时计算,那速度不就更快了?

算法我已经改造好了,可以进行并行计算的。我的这个程序的运算结果的IO数据量很小,但是迭代计算很多,不知道我的这个想法是不是有可行性?

PS:显卡是970的,不好好利用下真是浪费了~~
...全文
892 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
stellarman 2015-01-12
  • 打赏
  • 举报
回复
理论上是可以的,但要注意一下几个问题: 1:执行时间应该是剩下的7个cpu和你的gpu的执行时间基本一样。不过问题是cpu的个数最后是2的倍数,所以用4个cpu可能反而会好一些; 2:数据的隔离。openmp是shared memory所以,你传给gpu的数据要是private的; 我建议你用多个gpu,比如两个,这样performance好,而且程序也好维护。 最后一个问题,没有看到程序很难给答案,感觉是你的CUDA memory不够了,你自己在check一下
  • 打赏
  • 举报
回复
这个还得分析下加速比,然后再平衡一下负载吧?
引用 7 楼 li6823456 的回复:
最近也在琢磨这个问题,我的电脑cpu是8线程的。我先用openmp创建8线程,其中一个线程负责cuda,其他做并行。如果线程之间完全独立还是可以的,如果线程之间需要通信可能麻烦点。而且如果想最求速度的话,CPU和GPU均衡负载却是个问题,虽然我也想了些办法,但效果不理想。网上有大神说可以用MPI分出两个节点,一个节点CUDA,一个节点omp,动态分配任务。另外可以看看CUDA异步调用,感觉可以实现这个问题。 另外最近我碰到一个问题,不知你能不能帮到我。我在cuda的kernel中创建了一N维数组,double的,只参与计算,不返回值。也就是每个线程都需要这么一个数组来暂存计算中间量。不知为何,当N取很大的时候,大概100000,kernel貌似就不计算了。是不是CUDA显存控制的问题。不知有没有解决办法
PhD_C 2014-12-11
  • 打赏
  • 举报
回复
最近也在琢磨这个问题,我的电脑cpu是8线程的。我先用openmp创建8线程,其中一个线程负责cuda,其他做并行。如果线程之间完全独立还是可以的,如果线程之间需要通信可能麻烦点。而且如果想最求速度的话,CPU和GPU均衡负载却是个问题,虽然我也想了些办法,但效果不理想。网上有大神说可以用MPI分出两个节点,一个节点CUDA,一个节点omp,动态分配任务。另外可以看看CUDA异步调用,感觉可以实现这个问题。 另外最近我碰到一个问题,不知你能不能帮到我。我在cuda的kernel中创建了一N维数组,double的,只参与计算,不返回值。也就是每个线程都需要这么一个数组来暂存计算中间量。不知为何,当N取很大的时候,大概100000,kernel貌似就不计算了。是不是CUDA显存控制的问题。不知有没有解决办法
YCMyTot 2014-10-31
  • 打赏
  • 举报
回复
" 中午刚刚才查了一堆的资料,了解到OpenCL才是CUDA架构下的,一套用于开发并行程序的API标准库 " 不是很懂!!!
adagio_chen 2014-10-30
  • 打赏
  • 举报
回复
没用过openmp,不过我猜想应该是可以的吧,和单核程序没有什么区别
BoweirrKing 2014-10-30
  • 打赏
  • 举报
回复
OpenCL的Kernel程序居然是在需要运行时动态编译???
BoweirrKing 2014-10-30
  • 打赏
  • 举报
回复
我的是一个计算和输出Mandelbrot图形的程序。 其中用到了高精度浮点运算库MPIR。(之所以用MPIR是因为long double类型的数据的精度是有限的,用MPIR基本上可以达到任意或无限精度) 假定使用了MPIR的核心的分形计算函数叫做foo(),那么现在我的目标就是想在OpenCL里面(即.cl文件里),和 通常的EXE里面,并行的调用foo()函数,以完成分形计算。 不知道这样有没有可行性??
Spidey212 2014-10-30
  • 打赏
  • 举报
回复
当然可以并行运行,只是如果涉及到openMP线程与openGL线程的交互就有点复杂了,能否介绍具体点
BoweirrKing 2014-10-30
  • 打赏
  • 举报
回复
不好意思,我在概念上还是有点模糊。。。 在我的这种情况下,我应该说:“使用OpenCL与OpenMP是否可以并行工作?” 中午刚刚才查了一堆的资料,了解到OpenCL才是CUDA架构下的,一套用于开发并行程序的API标准库。

580

社区成员

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

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