Как написано, ваш код не показывает правильные объявления a
, b
и c
. Если они на самом деле являются указателями (включая аргументы функций, объявленные как массивы) или массивами в структурах с указанием на, убедитесь, что указатели restrict
определены, если это возможно. Это сделает так, чтобы приличный компилятор мог векторизовать ваш цикл.
Вы можете увидеть эффекты restrict
(и что произойдет, если вы удалите его) в примере кода, связанном с ответом P__J __. Без этого компилятор не может предположить, что a
не указывает на перекрытие памяти с тем, на что указывает b
или c
, поэтому он не может загрузить b[i+1]
или c[i+1]
до тех пор, пока a[i]
не будет сохранено. Это полностью исключает их параллельную загрузку, т. Е. По существу исключает векторизацию.
В противном случае нет, ваш цикл оптимален.