gpu interview

opengpu
http://www.opengpu.org/forum.php?mod=viewthread&tid=968
1. 利用图形API 和CUDA进行GPU通用计算的性能区别?

  1. GPU的指令和CPU指令的最大区别?

  2. 你怎么样知道是否达到了GPU的理论加速倍数?怎么计算?

  3. GPU架构的缺点?如果让你设计,你会怎么改进?

  4. GPU有通过成千上万线程来隐藏访问延迟,CPU也有隐藏访问延迟的优化,最大的区别是什么?

1.利用图形API需要把问题转化为图形学的变化,需要懂得图形学的定义,比较麻烦,需要理解Cg,HLSL这样的图新编程语言,比较麻烦;而CUDA是C语言的扩展,比较适合做通用计算,不需要把问题转化为图形学的问题。

  1. CPU需要运行OS,不但要处理中断,还要负责存储器空间分配与回收。为了OS的安全起见,都要专用的Kernel Mode以及Privilege Register的支持,所以CPU指令有很多都是操作特权寄存器。GPU目前还做不到这一点。未来的LRB也许可以。

3.通过计算算法复杂度,可以得到理论的复杂度,然后根据warp的active情况,可以计算出来,一次启动的warp有多少个,然后可以得到这个并行算法在实际的GPU上的运算时间多少。就是计算并行算法复杂度,然后“计算器”的个数~这里需要转化为gpu的core,但是这里不能简单的转化,如果再考虑一下每一条指令的执行的cycle的情况,和内存延迟的情况,那就更麻烦了……,其实计算也挺麻烦的……我怀疑问问题的这个兄弟,能计算出来不:)你可以问他一下,内存加载的时候的计算周期是都少,这里其实还有硬件加速的情况~如果只有一个线程,也会有合并访问~

4.GPU的缺点,a.精度问题,b.编程模式不太灵活,优化需要对硬件深入了解,c.内存访问模型不太灵活;改进,1.增加内存访问的灵活性,2.弱化编程模型,使得优化不再那么麻烦;

5.CPU的线程切换开销是昂贵的,一般都是需要1000cycle而gpu的线程切换只有1个cycle,而在CPU上能同时active的线程数量是有限的core的个数,和GPU不是一个量级的;

两者隐藏延迟技术的区别。从架构角度来看,CPU依靠Cache和Speculative Ex/Ld来隐藏延迟,而GPU是依靠TLP和Prefetch来隐藏延迟。(线程级并行、预读取)

发布了33 篇原创文章 · 获赞 17 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章