一个核函数中指令个数是不是有上限?

一个核函数中指令个数是不是有上限?如果有是不是与计算能力有关?
换句话说就是核函数中的C语句的个数也有上限?

放心用吧。的确有限制。但NV没有公布具体数字。我也不能提供任何具体数字。

编译出来的二进制的kernel(你可以大致当成cubin), 只要小于10-20MB, 你可以放心用。

LZ您好,这个有限制的,但一般是足够大的,无需担心。

具体限制为:
Maximum number of instructions per kernel:
1.x计算能力的硬件 : 2 million
2.x及更高的计算能力的硬件: 512 million

以及这里的instruction不是c语句,但是这个数量是足够巨大的,c语句的数量也是无需担心的。

上述信息来源于 CUDA C Programming Guide Appendix F.

祝您编码顺利~

我不知道这个per kernel指的是所有线程的总和,还是一个线程

感谢ICE更正并指出具体数字。

那么对于2.x+, 512M条指令,用常见的8B一条来算,已经4GB了。足够您用了。请楼主无需担心。

就是kernel代码里面的指令数,kernel代码编译成的指令数,可能是直接的二进制指令,据某来源的说法,也可能是按照PTX指令算的。手册没有指明这一点。

因为CUDA是SIMT的,所以可以看作是所有的线程跑的是一样的代码(分支等是特殊处理),所以一个kernel写好了,指令数是固定的,和invoke kernel时使用的线程数量是无关的。

以及我认为表中给出的指令数量不是每个线程都算一遍的。

大致如上,祝您好运~

哦,就是说我写个上万行的kernel函数,没啥错误的情况下,而且运行时间也小于最大运行时间限制的话,也是可行的了?

是的,如有疑问,请写一个试试看?

写个了,结果就是语句多了,Nsight断不下来了,具体内容在另外一个帖子里

请证明您的问题是因为 您的kernel里面指令数量超过了限值造成该现象,否则将不构成您说的因果关系。

正因为我搞不清有没有因果关系,才到贵论坛来讨教的啊

既然您表示您自己无法确定上述一定有因果关系,我将无视您上述所有对该因果关系持确定性的看法。

以及对本问题“和函数中指令个数是不是有上限”已经在前面楼层完整地回答过了。不再赘述。
以及,包括NV官方资料和其他大量实践表明,kernel内部的指令数量限值是足够大的,我认为您的问题不是因为指令数量太多引起的。

大致如上。

谢谢!!!!!!

不客气的,祝您好运~