一个核函数中指令个数是不是有上限?如果有是不是与计算能力有关?
换句话说就是核函数中的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内部的指令数量限值是足够大的,我认为您的问题不是因为指令数量太多引起的。
大致如上。
谢谢!!!!!!
不客气的,祝您好运~