GPU的设计是真正的并行设计。因此在编程的过程中你不能假设数据的先后顺序,也不允许访问其他线程的数据。例如sum求和就是一个最明显的例子。GPU擅长向量的点积和叉积、矩阵变换、插值处理等。在编写shader的时候,尽量避免使用:
1
2
3
|
float
TWOPI = 3.14*2.0;
//应该使用float TWOPI = 6.28;不要让GPU帮你这种已经知道固定值是多少的运算,尤其是浮点运算;
float
radius = 10.0/2.0;
//应该使用 float radius = 5.0;
float
dist = radius / 2.0;
//应该使用float dist = radius * 0.5; 尽量避免使用除法;
|
向量之间相乘,可以使用点积来代替,这是GPU的强项。