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

 找回密码
 注册

扫一扫,访问微社区

搜索
查看: 2503|回复: 8

GPU对分支的执行效率问题

[复制链接]
发表于 2017-4-10 18:13:01 | 显示全部楼层 |阅读模式

分别用 C++ 和 OpenCL 实现了 bsp 场景的光线追踪渲染(使用while实现递归,内存访问只有最基本的碰撞信息,cl buffer flag为 CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR),代码几乎完全一样,CPU只用了单线程,效果如下:

GPU 19秒  ( GeForce GTX 750 Ti -- GM107 -- A2 -- 1163MHz )
CPU 29秒  ( Intel Core i5 4590 -- Haswell -- 3500 MHz )

运行时用 GPU-Z 看了 GPU Load 是100% 。

结果很意外啊,根本不能加速,CPU 还可以开启多线程,那就比 GPU 渲染还快很多了。

我原以为 GPU 那么多核同时跑,效率应该快很多倍。

这个结果正常吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2017-4-10 20:47:29 | 显示全部楼层
正常也不正常,因为GPU不适合这种轻量级和Incoherent的工作,当你的场景重量级到能够掩盖GPU延迟的时候就可能接近CPU了,因为大量的时间花在调用上,而不是实际计算上。如果GPU算超大规模矩阵迭代这种,就比CPU强多了。
 楼主| 发表于 2017-4-11 12:26:58 | 显示全部楼层
Jedimaster 发表于 2017-4-10 20:47
正常也不正常,因为GPU不适合这种轻量级和Incoherent的工作,当你的场景重量级到能够掩盖GPU延迟的时候就可 ...

跟CPU一样,这个应用里GPU的主要消耗还是在计算上,因为我把核心的递归求交函数直接返回的话,速度是很快的。其他代码可以说对效率影响很小。

我疑惑的是,这样一个bsp递归求交函数,拥有几十上百处理单元的GPU运行效率比CPU单线程快不了多少,原因何在?是不是代码里有不少分支循环导致?


发表于 2017-4-11 13:21:17 | 显示全部楼层
听上去很有趣,方不方便贴一点shader的代码大家一起研究下。
 楼主| 发表于 2017-4-11 13:54:32 | 显示全部楼层
IceCode 发表于 2017-4-11 13:21
听上去很有趣,方不方便贴一点shader的代码大家一起研究下。


完整 OpenCL 代码看附件。

我刚学CL不久,不少写法可能不是最优化的,希望不要误导。


核心算法就是bsp场景遍历求交,基本上是从 Quake 代码里照搬的。

我现在想尝试探索下在游戏里应用 ray tracing,可以先从小的场景做起。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2017-4-11 20:11:51 | 显示全部楼层
欢迎交流学习。我也是做这方面探索的。推荐看一下gpu高性能计算的书籍噢。
下面是我们的一些成果。

 楼主| 发表于 2017-4-12 12:46:11 | 显示全部楼层
yjlh1234_1 发表于 2017-4-11 20:11
欢迎交流学习。我也是做这方面探索的。推荐看一下gpu高性能计算的书籍噢。
下面是我们的一些成果。

效果很牛啊,渲染速度也快。场景结构组织是什么类型的(bsp,bvh等)?光线求交有什么优化吗?
发表于 2017-4-12 14:22:18 | 显示全部楼层
Awakening3D 发表于 2017-4-12 12:46
效果很牛啊,渲染速度也快。场景结构组织是什么类型的(bsp,bvh等)?光线求交有什么优化吗? ...

BVH,注意优化一下节点的平衡。SAH值仔细点。光线求交速度一般,注意存储位置和尽量压缩数据大小。
 楼主| 发表于 2017-5-3 12:24:13 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2018-5-24 02:44 , Processed in 0.042011 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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