如何解决逐一opencl访问向量元素
我需要在opencl的for循环中将矢量类型的两个浮点数相加
float16 temp;
for( int j = 0; j <16; j++)
{
float sum = row * column; // Row x column
temp = sum;
}
我需要输出类似temp = sum0,sum1 .....
解决方法
常规的float
是解决之道。虽然您可以使用float16
,.s0
,...,.s1
来分别解决.sf
的组成部分,但是您不能使用循环索引在循环中自动执行此操作(请参见OpenCL 1.2 Reference Guide)。 float16
的唯一方法是在每次循环迭代时手动将其写下来,这是不实际的。
不过,使用float temp[16];
可以做到这一点。您的代码将如下所示:
float temp[16];
for(int j=0; j<16; j++) {
float sum = row * column; // Row x column
temp[j] = sum;
}
要将temp
转换为float16
,您必须为每个组件手动完成,这又很繁琐:
float16 temp2 = (float16)(temp[0],temp[1],...,temp[16]);
我建议您完全消除特定应用程序中的float16
。使用常规的float*
数组更实用(在循环中自动建立索引),并且在从全局内存访问数据时也更快:您可以使用数组结构,而不必绑定到慢得多的数组结构上数据布局。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。