用户
 找回密码
 立即注册
发表于 2013-11-13 21:53:12
wzk6_3_8 发表于 2013-11-13 21:39
其实对于好的编译器,这个根本没差别。我一直就觉得CUDA编译器比较差。

wzk6_3_8您好:

话不能这么说哦,NVCC定有各种不足,但是这个例子却不能说明NVCC的不足。

这两种写法的逻辑依赖链是不同的,而编译器是不能改变实现顺序的,也就是说编译器没有权利把第一种代码的写法编译成第二种实现(两次FMA)。
当然人在为自己的算法选择具体实现的时候,是可以写成第二种方法的,由此带来的浮点数结果上的差别,也是需要写程序的人自己有一个预判。

我认为这个才是中肯的结论,您觉得呢?

祝您在论坛过的开心~
使用道具 举报 回复 支持 反对
发表于 2013-11-21 00:30:01

恩...編譯器的做法確實可能跟我想的不太一樣...

補充:
會用到ILP的情況大概是register用的或很少kernel工作量少,每條thread大部份的時間都在等待上個執行結果。

這個時候即使開了大量的thread也不會增加效率,反而要縮減thread讓1個thread做原本2個thread、4個thread的事情。

這樣thread才會夠忙碌,不會空等。對於這樣的情況Occupancy反而變得不是衡量效率的關鍵。
使用道具 举报 回复 支持 反对
发表于 2013-11-21 10:54:19
iHakka 发表于 2013-11-21 00:30
恩...編譯器的做法確實可能跟我想的不太一樣...

補充:

说的很好,我也认为ILP远比多线程重要。
使用道具 举报 回复 支持 反对
发表于 2013-11-21 12:26:00
gpu 发表于 2013-11-21 10:54
说的很好,我也认为ILP远比多线程重要。

gpu您好:

12#的观点有前提条件,我觉得不能直接推广到您的13#的结论。

当然您可以继续保留自己的观点,此处仅作简要说明,以免其他看帖的网友迷惑。

祝您好运~
使用道具 举报 回复 支持 反对
发表于 2013-11-21 15:44:03
ice 发表于 2013-11-21 12:26
gpu您好:

12#的观点有前提条件,我觉得不能直接推广到您的13#的结论。

开普勒不是每次每个WARP发射2条指令码?
如果算法设计指令依赖严重,导致每次每个WARP只能发射1条指令,线程再多也就50%利用率。
如果算法的ILP设计很好,很少线程足矣高效率。
当然如果算法本身不能ILP,那也没办法的事。但尽力挖掘ILP远比尽力多线程重要得多,我想这个是正确的。难道不是这样的吗?
使用道具 举报 回复 支持 反对
发表于 2013-11-21 15:46:31
gpu 发表于 2013-11-21 15:44
开普勒不是每次每个WARP发射2条指令码?
如果算法设计指令依赖严重,导致每次每个WARP只能发射1条指令, ...

这个是没错的.但是一般情况下,编译器会尽量安排平均4条指令里有2条可以同时发射的(因为实际上只需要有50%的机会可以双发射即可满足SP们的要求.当然为了照顾其他单元,越多越好)

但建议kepler上还是多少ILP一下,不用多,能保证2条同时进行足矣.
使用道具 举报 回复 支持 反对
发表于 2013-11-21 15:56:23
玫瑰幻想 发表于 2013-11-21 15:46
这个是没错的.但是一般情况下,编译器会尽量安排平均4条指令里有2条可以同时发射的(因为实际上只需要有50% ...

NV的编译器很好很智能,很多东西做到了编译器里面,真的很不错。
使用道具 举报 回复 支持 反对
发表于 2013-11-21 16:43:45
玫瑰幻想 发表于 2013-11-21 15:46
这个是没错的.但是一般情况下,编译器会尽量安排平均4条指令里有2条可以同时发射的(因为实际上只需要有50% ...

另外,你这个50%的数据是如何得到的呢?这个我没弄明白。
使用道具 举报 回复 支持 反对
12
发新帖
您需要登录后才可以回帖 登录 | 立即注册