假设一个添加两个向量的函数
void add256(int* r, int* p, int* q) {
for (int i=0; i<256; ++i) {
r[i] = p[i] + q[i];
}
}
现在,如果我知道r
与和p
是否在同一个数组中,是否可以帮助使用并行添加指令优化代码?p
q
restrict
我问这个问题是因为在 GCC 上,
typedef struct { int x[256]; } int256;
void add256t(int256* r, int256* p, int256* q) {
for (int i=0; i<256; ++i) {
r->x[i] = p->x[i] + q->x[i];
}
}
可以使用精确假设的条件和我想要的 asm 进行优化,但是在不同的情况下分离会使代码变得一团糟,而 asm 分离的情况做同样的事情