请选择 进入手机版 | 继续访问电脑版

开源计算机图形学社区(Open Source Computer Graphics Community) |OpenGPU Forum (2007-2013)| OpenGPU Project

 找回密码
 注册
搜索
查看: 632|回复: 3

如何基于C的程序更改成并行运算 [复制链接]

Rank: 4

注册时间
2017-10-4
积分
32
发表于 2017-10-4 17:24:04 |显示全部楼层
在跟着老师学习并行计算,求大佬说一说如何基于C转换到opencl里面的并行,只有一个简单的kernel的我知道,但是有很多个函数都可以并行加速有多个kernel,且C中又有许多if之类的判断语句该要怎么改??求大佬们帮帮忙!!!谢谢!

Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28

注册时间
2007-6-11
积分
29826
发表于 2017-10-8 20:24:16 |显示全部楼层
先看输入输出,然后把程序分为,准备数据,处理数据,接受数据,3个部分,Kernel就是“处理数据”那个部分。有没有if else看具体情况,如果是局部的,那无所谓。

使用道具 举报

Rank: 4

注册时间
2017-10-4
积分
32
发表于 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循环嵌套且里面的函数用到的数据有关联要怎么改成并行的呢?小白问一些低级的问题希望体谅一下。。。再次谢谢您

使用道具 举报

Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28

注册时间
2007-6-11
积分
29826
发表于 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|开源计算机图形学社区(Open Source Computer Graphics Community) | OpenGPU Project | OpenGPU Forum (2007-2013)

GMT+8, 2017-10-23 23:17 , Processed in 0.214001 second(s), 11 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部