首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将数据从int4向量复制到int8向量?

如何将数据从int4向量复制到int8向量?
EN

Stack Overflow用户
提问于 2019-09-18 07:56:24
回答 1查看 364关注 0票数 0

我正在尝试编写一个内核,其中一个参数是int4类型的8元素向量。然后,我尝试将向量读入本地内存,然后将向量中的数据复制到int8向量中。然后我想将int8向量存储到输出向量中。

我尝试为int8向量的每一半使用两个int4向量,但似乎行不通。

代码语言:javascript
运行
复制
__kernel void vecload(__global int4* vecA,
                      __global int* vecR) {

int id = get_local_id(0);

__local int4 vA;

vA = vecA[id];

int8 v = (int8)((int4)(vA.s0),(int4)(vA.s1);

vstore8(v, 0, vecR);
}

输出将vecA的第一个元素显示四次,然后显示第四个元素四次。它应该显示向量的所有8个元素。

EN

回答 1

Stack Overflow用户

发布于 2019-09-20 15:36:02

int4int8分别指包含4或8个整数的OpenCL矢量数据类型。在您的代码中,代码行

代码语言:javascript
运行
复制
int8 v = (int8)((int4)(vA.s0),(int4)(vA.s1));

(您忘记了右括号)包含等价于(int4)(vA.s0, vA.s0, vA.s0, vA.s0)的表达式(int4)(vA.s0),结果是

代码语言:javascript
运行
复制
int8 v = (int8)(vA.s0, vA.s0, vA.s0, vA.s0, vA.s1, vA.s1, vA.s1, vA.s1);

你想要的是这样的东西

代码语言:javascript
运行
复制
int8 v = (int8)(vA.s0, vA.s1, vA.s2, vA.s3, vA.s0, vA.s1, vA.s2, vA.s3);

或者,如果您想在v中使用来自vecA的两个连续元素,那么可以使用

代码语言:javascript
运行
复制
int4 vA = vecA[2*id  ];
int4 vB = vecA[2*id+1];
int8 v = (int8)(vA.s0, vA.s1, vA.s2, vA.s3, vB.s0, vB.s1, vB.s2, vB.s3);

此外,由于您没有在线程块中共享任何数据,因此也不需要将vA设为__local

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57983321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档