Наиболее значимый трюк, который вы можете сделать: если эти массивы на самом деле указатели и вы передаете их в функцию, обязательно restrict - квалифицируйте указатель суммы, еслина самом деле предполагается, что он указывает на массив, который не зависит от 2:
void do_sum(size_t size,
float * restrict sum,
float * array1,
float * array2)
или с подсказками размера
void do_sum(size_t size,
float sum[restrict static size],
float array1[static size],
float array2[static size])
Это позволит компилятору генерировать гораздо более эффективнокод, потому что он гарантирует, что ни array1[n]
, ни array2[n]
не смогут получить доступ к той же памяти, что и sum[k]
для любого n
или k
, используемого в функции
Посмотрите разницу в Godbolt: с ограничением и без