Добавить в корзинуПозвонить
Найти в Дзене
Машинное обучение

✔️ Одно слово в C, которое может ускорить ваш цикл

В C есть ключевое слово restrict. Оно говорит компилятору простую, но очень важную вещь: «Эти указатели не пересекаются в памяти». Без restrict компилятор обязан быть осторожным. Он не знает, могут ли a, b и result указывать на один и тот же участок памяти. Поэтому он не всегда может агрессивно оптимизировать код. С restrict ситуация меняется: - компилятор уверен, что указатели не alias друг друга - цикл можно безопаснее векторизовать - загрузки и записи можно переупорядочивать - проще включать SIMD-инструкции - GCC и Clang получают больше свободы для оптимизаций Пример: void add_arrays(int *restrict a, int *restrict b, int *restrict result, int n) { for (int i = 0; i < n; i++) result[i] = a[i] + b[i]; } Но есть важный момент. restrict - это обещание программиста компилятору. Если вы соврали и передали пересекающиеся массивы, поведение может стать неопределённым. Именно поэтому restrict полезен в участках кода, где вы точно контролируете память: численные вычисления, обработк

✔️ Одно слово в C, которое может ускорить ваш цикл

В C есть ключевое слово restrict.

Оно говорит компилятору простую, но очень важную вещь:

«Эти указатели не пересекаются в памяти».

Без restrict компилятор обязан быть осторожным. Он не знает, могут ли a, b и result указывать на один и тот же участок памяти. Поэтому он не всегда может агрессивно оптимизировать код.

С restrict ситуация меняется:

- компилятор уверен, что указатели не alias друг друга

- цикл можно безопаснее векторизовать

- загрузки и записи можно переупорядочивать

- проще включать SIMD-инструкции

- GCC и Clang получают больше свободы для оптимизаций

Пример:

void add_arrays(int *restrict a,

int *restrict b,

int *restrict result,

int n)

{

for (int i = 0; i < n; i++)

result[i] = a[i] + b[i];

}

Но есть важный момент.

restrict - это обещание программиста компилятору. Если вы соврали и передали пересекающиеся массивы, поведение может стать неопределённым.

Именно поэтому restrict полезен в участках кода, где вы точно контролируете память: численные вычисления, обработка массивов, графика, DSP, low-level performance-код.

Иногда одно слово даёт компилятору больше информации, чем десяток ручных микрооптимизаций.