6.8 控制流语句(Control Flow Statement)

文章内容源自《GPU编程与CG语言之阳春白雪下里巴人》,因笔者读书易中途放弃,遂每读一章节,将其移至平台,以此作为对自己读书的勉励。笔者用粗体斜体 标注了关键词句,望感兴趣的读者们一起学习共勉。猛戳这里查看更多!

6.8 控制流语句(Control Flow Statement)

程序最小的独立单元是语句(statement),语句一般由分号结尾,缺省情况下,语句是顺序执行的,但是当涉及逻辑判断控制时,就要求有控制流程序语句。控制流程序语句分为条件语句循环语句,在C语言中,条件语句有if、if-else、switch等,而循环过程则由while、do-while和for语句支持。Cg中的控制流语句和循环语句与C语言类似:条件语句有:if、if-else;循环语句有:while、forbreak 语句可以和在for语句中使用。

Cg语言中的控制流语句要求其中的条件表达式返回值都是bool类型,这一点是与C语言不同之处(C语言中,条件表达式返回值可以是0、1)

vs_2_x, vp30 和 vp40 这些profile支持分支指令(又称转移指令,branch instruction) ,for和while循环指令在这些profile中被完全支持。在文献【3】中提到:

“In other profiles, for and while loops may only be used if the compiler can fully unroll them (that is, if the compiler can determine the iteration count at compile time)”。

这句话的意思是“在其他的profiles中,for和while循环只有当确切的知道循环次数时才能被使用 ”。但经过试验,如果使用“在 fp40 和 ps_3_0 之前的”片段 profiles编译含义 for, while 语句时会出现错误提示信息:

error c6003:instruction limit of exceeded……

因此,如果没有确切的把握,不要在低级的profiles中使用循环控制语句。同样,return只能作为后一条语句出现。函数的递归调用(recursion)在 Cg语言中是被禁止的。Switch 、case 和 default 在 Cg 中作为保留关键字存在,但是它们目前不被任何profile所支持。

你可能感兴趣的:(6.8 控制流语句(Control Flow Statement))