Указывая на мгновение очевидное. Ваш код выборочно изменяет данные в maxBuf, что приводит к сбою векторизатора. Просто измените код, чтобы использовать вместо него std :: max ....
for (int i = 0; i < bufSize; ++i) {
maxBuf[i] = std::max(maxBuf[i], buf[i]);
}
... и код теперь будет векторизован.
Подтверждение: https://godbolt.org/z/rviiKF
Внутренний l oop развернут и теперь использует AVX2:
.LBB0_12: # =>This Inner Loop Header: Depth=1
vmovdqu ymm0, ymmword ptr [rsi + rax]
vmovdqu ymm1, ymmword ptr [rsi + rax + 32]
vmovdqu ymm2, ymmword ptr [rsi + rax + 64]
vmovdqu ymm3, ymmword ptr [rsi + rax + 96]
vpmaxub ymm0, ymm0, ymmword ptr [rdi + rax]
vpmaxub ymm1, ymm1, ymmword ptr [rdi + rax + 32]
vmovdqu ymmword ptr [rsi + rax], ymm0
vmovdqu ymmword ptr [rsi + rax + 32], ymm1
vpmaxub ymm0, ymm2, ymmword ptr [rdi + rax + 64]
vpmaxub ymm1, ymm3, ymmword ptr [rdi + rax + 96]
vmovdqu ymmword ptr [rsi + rax + 64], ymm0
vmovdqu ymmword ptr [rsi + rax + 96], ymm1
vmovdqu ymm0, ymmword ptr [rsi + rax + 128]
vmovdqu ymm1, ymmword ptr [rsi + rax + 160]
vpmaxub ymm0, ymm0, ymmword ptr [rdi + rax + 128]
vpmaxub ymm1, ymm1, ymmword ptr [rdi + rax + 160]
vmovdqu ymmword ptr [rsi + rax + 128], ymm0
vmovdqu ymmword ptr [rsi + rax + 160], ymm1
vmovdqu ymm0, ymmword ptr [rsi + rax + 192]
vmovdqu ymm1, ymmword ptr [rsi + rax + 224]
vpmaxub ymm0, ymm0, ymmword ptr [rdi + rax + 192]
vpmaxub ymm1, ymm1, ymmword ptr [rdi + rax + 224]
vmovdqu ymmword ptr [rsi + rax + 192], ymm0
vmovdqu ymmword ptr [rsi + rax + 224], ymm1
add rax, 256
add rdx, 4
jne .LBB0_12