【发布时间】:2019-09-19 04:28:52
【问题描述】:
所以我有一个结构数组:
typedef struct {
float x;
float y;
float z;
} Point;
const int SIZE = 16;
Point* points;
points = malloc(SIZE * sizeof(Point));
现在我还有一个数组结构:
typedef struct {
float* vectorX;
float* vectorY;
float* vectorZ;
} arrayStruct;
arrayStruct myArrayStruct;
// Allocate Memory
myArrayStruct.vectorX = _aligned_malloc(sizeof(float)* SIZE, 32);
myArrayStruct.vectorY = _aligned_malloc(sizeof(float)* SIZE, 32);
myArrayStruct.vectorZ = _aligned_malloc(sizeof(float)* SIZE, 32);
所以现在我的问题是: 有没有一种快速/简单的方法可以使用 SIMD(内在函数)将 AoS(结构数组)转换为数组结构?
【问题讨论】:
-
“使用 SIMD”是什么意思? SIMD 在向量寄存器上执行计算,它不能改变你给它的代码结构。
-
如果速度很重要,那为什么要使用 malloc 来处理固定大小的小型数组?
-
如果 SIZE 是固定的,并且您可以使 arrayStruct 连续,那么问题会减少到 16x3 转置。
标签: c arrays struct simd intrinsics