Por que o GCC gera código 15-20% mais rápido ao otimizar para tamanho (-Os) em vez de velocidade (-O2)?
Olá a todos! Sou novo em C++ e estou tentando entender as flags de otimização do GCC. Tenho um pequeno programa de processamento de imagens: aplico um filtro Gaussiano a uma matriz de pixels (tamanho 4096x4096). Compilo com diferentes flags e meço o tempo de execução. Como esperado, -O2 dá um ganho em comparação com -O0. Mas notei algo estranho: com a flag -Os (otimização para tamanho do código) o programa roda 15-20% mais rápido do que com -O2 (otimização para velocidade)! Aqui está o código simplificado:
```cpp
#include
#include
#include
void gaussian_blur(const std::vector& src, std::vector& dst, int width, int height) {
const float kernel[5] = {0.0545, 0.2442, 0.4026, 0.2442, 0.0545};
for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x) {
float sum = 0.0f;
for (int ky = -2; ky <= 2; ++ky) {
for (int kx = -2; kx <= 2; ++kx) {
int ix = std::clamp(x + kx, 0, width - 1);