中文第一计算机图形学社区OpenGPU 版权所有2007-2018

 找回密码
 注册

扫一扫,访问微社区

搜索
查看: 1103|回复: 3

如何基于C的程序更改成并行运算

[复制链接]
发表于 2017-10-4 17:24:04 | 显示全部楼层 |阅读模式
在跟着老师学习并行计算,求大佬说一说如何基于C转换到opencl里面的并行,只有一个简单的kernel的我知道,但是有很多个函数都可以并行加速有多个kernel,且C中又有许多if之类的判断语句该要怎么改??求大佬们帮帮忙!!!谢谢!
发表于 2017-10-8 20:24:16 | 显示全部楼层
先看输入输出,然后把程序分为,准备数据,处理数据,接受数据,3个部分,Kernel就是“处理数据”那个部分。有没有if else看具体情况,如果是局部的,那无所谓。
 楼主| 发表于 2017-10-8 22:19:48 | 显示全部楼层

I

本帖最后由 mask123 于 2017-10-9 01:29 编辑
Jedimaster 发表于 2017-10-8 20:24
先看输入输出,然后把程序分为,准备数据,处理数据,接受数据,3个部分,Kernel就是“处理数据”那个部分 ...


大佬您好,那按照您所说的将一个程序分成这三个部分之后,处理数据部分具体是要用一个kernel还是多个kernel的依据是什么呢?另外C程序中有多个for循环嵌套且里面的函数用到的数据有关联要怎么改成并行的呢?小白问一些低级的问题希望体谅一下。。。再次谢谢您
发表于 2017-10-11 11:46:52 | 显示全部楼层
mask123 发表于 2017-10-8 22:19
大佬您好,那按照您所说的将一个程序分成这三个部分之后,处理数据部分具体是要用一个kernel还是多个kern ...

多少个Kernel取决于任务的分配。比如你要处理图片,每个像素就需要一个Kernel,然后这些Kernel组织为Group/Batch等等。

先重构C代码,把代码重构掉,也就是
for (i)
   输入数据InputData = 获取任务数据(i)
   输出数据OutputData = 生成输出数据(i) // 一般是个空
   执行任务的Kernel(OutputData, InputData)

然后只要搞清楚 执行任务的Kernel() 这个函数内部实现就行了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|小黑屋|Archiver|手机版|中文第一计算机图形学社区OpenGPU

GMT+8, 2018-4-19 23:45 , Processed in 0.038280 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表