最近遇到了一个报错,kernel是这样写的: float *a = fvec4[0]
(fvec4是一个vload4的float)``
什么意思呢?spec上对于float4还有float8等vector的访问是如何访问的呢?
float4 caseThis = {1.0f, 2.0f, 3.0f ,4.0f};
那么如果我需要访问第一个数据1.0f
,我会是这样的:caseThis.x
其他的三个则是 caseThis.y caseThis.z caseThis.w
而不是使用[]
,如:caseThis[0] //undef behavior
但是如amd nv以及其他编译器看样子都是支持[]
(从playground上看也是这样),那没办法,跟进业界,也做一下呗;
既然s0 s1这样的能够访问,那么实现[]
最简单的方法就是把[]
的处理逻辑做到和它差不多。