Скажем, функция, которая добавляет два вектора
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, делая то же самое