关于OpenGPU

http://www.opengpu.org/forum.php?mod=viewthread&tid=2503&extra=page%3D1



查看:  6437 | 回复:  20
   

关于OpenGPU [复制链接]

   
draziwest

上骑都尉(正五品)

注册时间
2009-3-9
积分
752
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
电梯直达
1#
  发表于 2010-4-18 22:22:24  | 只看该作者  | 倒序浏览
看了前面的帖子,对这个项目很有兴趣,我也说说我的想法。算是抛砖引玉。

需要回答这样几个问题:最终的目标是什么?支持什么样的api?application是什么样的?

作为一个开源项目,目标又是GPU,是个水很深很深的领域。我觉得要让项目能够进行下去,一定要有比较合适的目标。而且要把整个过程分解成很多小步骤。最好是每个小的步骤都很看到效果,比如可以运行一些简单的测试程序,demo等等。这样也给参与者信心做下去。

可以考虑把目标分成多个小目标一步一步的实现。整个过程应该是一个慢慢进化的过程。可能一开始有一个很粗糙的东西,但是它能运行一些东西,然后逐渐进化,变成一个比较成熟的结构。整体上,可以考虑多参照最新的成果,但是定下来以后就不应该有什么打的变动了。

我有一个想法,不知道可行性如何。为了让每一步都可行,考虑从一个纯软件的实现入手。比如,从一个C/C++的OpenGL实现开始(这个可以从一个开源的OpenGL实现开始),把其中的各个pipeline stage替换成用硬件描述语言SystemC/Verilog实现的模块。输入输出用一些封装手段让它们可以和软件实现的其他部分交互。最简单的办法是输入输出都写到内存里。这样做的好处是,可以快速建模,并且随时可以运行应用程序来验证建模的正确性。同时也可以估计性能参数latency,throughput等等。

上述建模同时也需要权衡到芯片级的设计需要。比如,模块划分等等。芯片级的划分,我觉得比较重要的几个因素。一个是功能划分,这个最容易理解。另一个是各个功能模块需要达到的性能参数,比如through-put,latency。然后是,是否需要访问memory,如果需要访问memory的through-put,latency的设计需求是什么?对于需要较高memory through-put的模块,通常都需要离memory近一些,这样可以减少latency从而降低为了hide latency不得不使用的dram。

上传一个手画的图,只是为了描述一下我的想法,跟具体架构方案无关。

首先,我们有一个纯软件的OpenGL的实现,比如Mesa(或者别的简单一点的更好)。其中有完整的 IA => VS => GS => Raster => PS => Output Merger(上述名字只是借用DX的说法来抽象各个模块,用做举例用)。这时候,我们可以用这个OpenGL库运行各种基于OpenGL的应用程序。这个也可以用来作为基础驱动。

然后,我们可以把其中某些部分用SystemC/Verilog等硬件描述语言实现,细粒度取决于需求,粗略的可以只有算法,细致的可以到时序。举例说明,第一个版本,可以把IA用SystemC实现,由于IA是Pipeline的起点,还需要一个模拟和芯片通讯(PCIE?)的模块(Chip Iface)。这个模块提供了像芯片发送指令的接口。IA的最终结果回写到内存中。驱动余下部分的pipeline就可以从这个结果开始做剩下的事情。这可以当作版本1。

接下来的版本2,可以考虑把VS(比如)用硬件描述语言实现。这时,我们有了IA和VS,就可以按照芯片级的设计规划把它们连起来。模块之间传递数据也可以采用灵活的方法,大量的不变数据在不同的模块之间共享时,可以考虑把数据放到memory(FB)中的办法,模块直接传递指针。

到最后,就会有一个比较完整的实现。

IMG_0039.jpg (1.9 MB, 下载次数: 7)

1

查看全部评分

  • ic.expert

分享0 收藏1 0 0
 
回复

使用道具 举报

   
ic.expert

管理员

注册时间
2007-7-11
积分
32646
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
2#
  发表于 2010-4-19 05:33:18  | 只看该作者
看了前面的帖子,对这个项目很有兴趣,我也说说我的想法。算是抛砖引玉。

需要回答这样几个问题:最终的目 ...
draziwest 发表于 2010-4-18 22:22 



    

说的好! 我总结一下?

第一,原形选取。GPU包括Driver等一系列模块,最好有一个现成的纯算法的Gloden Reference级别的C Model软件包,并且是分离OGL ES/D3D Pipeline的。
第二,小步快走!在实施阶段市一个一个的短期相互链接。为了能够小步快走,大牛建议使用TLM/RTL级别Pipeline Stage替换算法级模块的方式来进行。



那第一个问题,OGL、OES还是D3D?

如果是D3D的话,可以考虑DX10。优点是,接口清晰,有微软的Ref Code,并且绝对是Driver/Hardware分离的结构。代码工程,并且有详细文档。前期可以节约很多时间。但是缺点微软都是NDA发放资料的。虽然代码我可以提供,我也不怕微软告我,但是项目展开前期要非常小心释放Ref源代码和控制可靠人员加入,避免源代码外流而引起微软注意。而在项目后期我们可以重写这个Ref Model。到时候就是完全公开了。

如果用OGL的话,接口太复杂了,MESA倒是不错的Ref Model,但是要如何着手使用它呢?我本人是二把刀图形学,不像他们专门做过CG Paper的,mesa早就烂熟于胸。

如果是OES的话,干脆连一个Ref Model都找不到,之前Blue1025大牛再看一个开源的软件包,不知道进展如何可否说说??




PS:我个人倾向D3D :>  不过D3D也不简单,比如纹理格式那叫一个多……
我没什么大的野心,只是希望最后能有一个FPGA Verification,至于很多模块(包括Memory Controllor)都可以从OpenCore上面找到。包括和CPU联访。

:>
2

查看全部评分

  • 日向雏田[1]

  • draziwest

 
 
回复

使用道具 举报

   
jerry_gzy

版主

注册时间
2010-4-11
积分
1118

  • 串个门
  • 加好友
  • 打招呼
  • 发消息
3#
  发表于 2010-4-23 07:51:45  | 只看该作者
如果以一个GPGPU的角度来设计,我觉得我一定会加入,openGL方面还不是很精通,但是core level design倒是可以做个FPGA的版本来验证一下.
 
 
回复

使用道具 举报

   
ic.expert

管理员

注册时间
2007-7-11
积分
32646
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
4#
  发表于 2010-4-23 09:24:12  | 只看该作者
如果以一个GPGPU的角度来设计,我觉得我一定会加入,openGL方面还不是很精通,但是core level design倒是可以 ...
jerry_gzy 发表于 2010-4-23 07:51 



    
大牛能说说自己对GPGPU架构相关特性的一起期望么?OpenGPU架构中Shader Unit肯定是可通用的核心了。但是Fixed Function肯定也还会有。回头我组织一下最新架构编程模型的文档给大牛批评

:》
 
 
回复

使用道具 举报

   
jerry_gzy

版主

注册时间
2010-4-11
积分
1118

  • 串个门
  • 加好友
  • 打招呼
  • 发消息
5#
  发表于 2010-4-23 09:50:56  | 只看该作者
回复 4# ic.expert 


   ic兄过奖了,: )我现在也只是刚入门,还有很多知识需要向大家学习,不过看到论坛那么多志同道合的牛人,不搞出点什么名堂实在有点可惜.因为我最近在做个毕业项目和流处理这方面有关,所以很希望能把相关的知识应用起来.我的一个想法就是,未来的FPGA如果可以动态生成大量的stream processor, 那hardware 的open source会不会崛起?
 
 
回复

使用道具 举报

   
draziwest

上骑都尉(正五品)

注册时间
2009-3-9
积分
752
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
6#
  发表于 2010-4-23 10:50:19  | 只看该作者
回复 3# jerry_gzy 

我在想,我们是不是可以考虑把重点放到通用处理单元上。fix function部件可以考虑,第一步,纯cpu实现;第二步,对某些应用,比如光栅化,可以考虑用并行算法改造以后放到通用处理单元上。
 
 
回复

使用道具 举报

   
jerry_gzy

版主

注册时间
2010-4-11
积分
1118

  • 串个门
  • 加好友
  • 打招呼
  • 发消息
7#
  发表于 2010-4-23 20:59:31  | 只看该作者
回复 6# draziwest 
做个CPU也可以,大家可以设计一套指令集,然后总结些设计经验也好. 但是cpu这东西,ASIC可能更实际些,FPGA的强项应该是灵活的ALU cluster,做流处理器比较合适.
 
 
回复

使用道具 举报

   
ic.expert

管理员

注册时间
2007-7-11
积分
32646
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
8#
  发表于 2010-4-24 14:29:10  | 只看该作者
大牛谦虚:〉在这方面我和大牛想法相当!

用FPGA实现灵活的Stream Processor,我觉得这个也是未来FPGA的潜力,不过FPGA的可重构粒度太小了,很容易造成性能面积功耗比率不高!可重构最好可以维持在一个适合的粒度上,而这个粒度是受到工艺的严格限制,但是由应用的编程模型驱动的。

我觉得可重构这种架构模式,会从改变未来软件和硬件的划分。也就时说,未来的软件都会通过自己的代码来产生适合自己的硬件结构,这种重构硬件所需要的代码有些需要编译器自动生成,有些需要手工IP Core的支持。到此时,硬件开源应该会大抵如软件开源一般盛行起来。而目前的FPGA还不能胜任这个工作。不过的确这是大势所趋!

也就是说,未来的程序员不再是仅仅编写软件,还要负责定制硬件(重构硬件)。
1

查看全部评分

  • 日向雏田[1]

 
 
回复

使用道具 举报

   
ic.expert

管理员

注册时间
2007-7-11
积分
32646
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
9#
  发表于 2010-4-24 15:18:32  | 只看该作者
回复  draziwest 
做个CPU也可以,大家可以设计一套指令集,然后总结些设计经验也好. 但是cpu这东西,ASIC可能 ...
jerry_gzy 发表于 2010-4-23 20:59 


GPU需要大量的RAM,尤其是Shader Unit,RAM越多越好。所以FPGA的片上RAM还是可以发挥性能的,另外还有FPGA的MAD单元,只不过现代GPU都是浮点操作,FPGA上计算资源我记得都是18bit定点。这可能需要一些权衡。

总之对于GPGPU Shader Unit这种流计算设备来说,FPGA验证还是比较适合的:〉


而GPU也需要自定义指令集,但是大多都是MIPS格式+D3D ASM内容的混合体,我07年撰写文档那部分指令集就是参考此类模式写的。我是觉得D3D10的接口还是比较清晰的,而且微软的Ref Code提供了一个HW C model以及对应的Driver。所以可以解约很多软件的工作量。不过微软的Ref code写的非常的软,我觉得第一步是需要把这个Ref Code改写为比较硬风格的C Model。这样至少整个算法能搞明白整个算法,并且有一个公开的Ref Code,避免惹上微软的麻烦。然后能用ESL的就直接ESL,其实很多流水线阶段都可以用ESL~~~比如Traingle Setup等等。不能ESL的在手工写RTL code~~~
 
 
回复

使用道具 举报

   
jerry_gzy

版主

注册时间
2010-4-11
积分
1118

  • 串个门
  • 加好友
  • 打招呼
  • 发消息
10#
  发表于 2010-4-27 10:54:59  | 只看该作者
回复 9# ic.expert 


   我在架构区开了一个处女贴(http://www.opengpu.org/viewthread.php?tid=2584&extra=page%3D1), 不如大家先讨论一下目前的趋势如何?
 
 
回复

使用道具 举报

   
blue1025

版主

注册时间
2008-12-22
积分
1139
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
11#
  发表于 2010-5-11 17:56:53  | 只看该作者
刚看到帖子,ic大牛问道我所研究的vincent的模型如何,个人感觉,对于ogles1.1实现是非常有帮助的,但对于2.0,价值有限。
 
 
回复

使用道具 举报

   
空明流转

超级版主

注册时间
2009-3-31
积分
5570
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
12#
  发表于 2010-5-12 16:29:48  | 只看该作者
software model方面的工作,我倒是可以提供支持。。。嘎嘎
 
 
回复

使用道具 举报

   
hugo

飞骑尉(从六品)

注册时间
2010-5-20
积分
66
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
13#
  发表于 2010-5-20 10:42:18  | 只看该作者
我建議使用SystemC建一個GPU的Model
然後以此Model再建一個Emulator環境來開發軟體及OS

IC design 可用SystemC Model配合OVM來做開發

此處我可幫忙
hugochen
 
回复

使用道具 举报

   
botonne

武骑尉(从七品)

注册时间
2010-6-2
积分
2
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
14#
  发表于 2010-6-2 06:52:27  | 只看该作者
good article
80 字节以内
不支持自定义 Discuz! 代码
 
回复

使用道具 举报

   
zhangcheng

云骑尉(正七品)

注册时间
2010-8-21
积分
38
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
15#
  发表于 2010-8-28 17:05:25  | 只看该作者
哪里可以找到 ms 的 ref code?
 
 
回复

使用道具 举报

   
ic.expert

管理员

注册时间
2007-7-11
积分
32646
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
16#
  发表于 2010-9-18 09:17:47  | 只看该作者
哪里可以找到 ms 的 ref code?
zhangcheng 发表于 2010-8-28 17:05 



正规渠道的话就是跟微软签约:> 非正规渠道的话,我记得浙大CAD好像有外流的版本。
 
 
回复

使用道具 举报

   
tianguau

骁骑尉(正六品)

注册时间
2010-9-4
积分
163
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
17#
  发表于 2010-9-25 23:51:03  | 只看该作者
呵呵,你要是用ms的东东会比较麻烦,虽然看起来省事一点点,但是跟ms扯淡会让你头疼死的。

如果要做到话,建议还是自己做rm比较好。


对directx和opengl不了解。不能给什么建议。


正规渠道的话就是跟微软签约:> 非正规渠道的话,我记得浙大CAD好像有外流的版本。 ...
ic.expert 发表于 2010-9-18 09:17 
RTL solution & Development
 
回复

使用道具 举报

   
lurker0

云骑尉(正七品)

注册时间
2011-6-7
积分
24
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
18#
  发表于 2011-6-7 22:46:22  | 只看该作者
hugo 发表于 2010-5-20 10:42 
我建議使用SystemC建一個GPU的Model
然後以此Model再建一個Emulator環境來開發軟體及OS

同意hugo的看法。项目可以不用太关注软件驱动层(特别是驱动架构)方面的东西。
先把systemc模型做出来,然后写一个简单的C routine去验证。等chip做到一定成熟度之后
再去考虑用哪些API的问题。毕竟是很专业的开源项目,潜在的参与人员很少,不可能像
商业开发一样全盘展开。
 
 
回复

使用道具 举报

   
cailianjie

武骑尉(从七品)

注册时间
2011-12-14
积分
14
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
19#
  发表于 2012-1-1 12:17:14  | 只看该作者
呵呵   不是很懂两位大牛的讨论
 
 
回复

使用道具 举报

   
kom

轻车都尉(从四品)

注册时间
2012-5-10
积分
1887
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
20#
  发表于 2012-5-18 16:16:44  | 只看该作者
希望OpenGPU多出一些技术贴教程贴,学习学习
另外就是希望管理员有空把广告贴删了或直接封号
 
 
回复

使用道具 举报

   
l7331014

超级版主

注册时间
2010-3-7
积分
2901
  • 串个门
  • 加好友
  • 打招呼
  • 发消息
21#
  发表于 2012-5-19 09:03:09  | 只看该作者
本帖最后由 l7331014 于 2012-5-19 09:03 编辑
kom 发表于 2012-5-18 16:16 
希望OpenGPU多出一些技术贴教程贴,学习学习
另外就是希望管理员有空把广告贴删了或直接封号 ...


对付广告一向杀无赦的.
老程序员
 
回复

使用道具 举报

   


你可能感兴趣的:(GPU)