286 字
1 分钟
循环展开优化技术
n * n 的循环展开
第一个 n : 表示每次处理几个变量
第二个 n : 表示几个累计变量
原始函数
void combine() { long i; long length = vec_length(v); data_t *d = get_vec_start(v); data_t t = 1; for (i = 0; i < length; i++) t = t * d[i]; *dest = t;}4 * 1 路循环, 每次循环处理四个元素, 保存在一个累计变量
void combine41() { long i; long length = vec_length(v); data_t *d = get_vec_start(v); data_t t = 1; for (i = 0; i < length - 4; i += 4) { t = t * d[i]; t = t * d[i + 1]; t = t * d[i + 2]; t = t * d[i + 3]; }
for (; i < length; i++) t *= d[i];
*dest = t;}4 * 4 路循环, 每次循环处理 4 个元素, 保存在 4 个累计变量
void combine44() { long i; long length = vec_length(v); data_t *d = get_vec_start(v); data_t t = 1; data_t t1 = 1; data_t t2 = 1; data_t t3 = 1; data_t t4 = 1; for (i = 0; i < length - 4; i+= 4) { t1 = t1 * d[i]; t2 = t2 * d[i + 1]; t3 = t3 * d[i + 2]; t4 = t4 * d[i + 3]; }
t = t1 * t2 * t3 * t4;
for (; i < length; i++) t *= d[i];
*dest = t;}部分信息可能已经过时