相关疑难解决方法(0)

乘以0优化

假设我有:

double f(const double *r) {
    return 0*(r[0]*r[1]);
}
Run Code Online (Sandbox Code Playgroud)

如果值可能是inf或nan,编译器是否应该能够优化分段,还是必须执行操作?

gcc -O3 -S test.c:

        .file   "test.c"
        .text
        .p2align 4,,15
.globl f
        .type   f, @function
f:
.LFB0:
        .cfi_startproc
        movsd   (%rdi), %xmm0
        mulsd   8(%rdi), %xmm0
        mulsd   .LC0(%rip), %xmm0
        ret
        .cfi_endproc
.LFE0:
        .size   f, .-f
        .section        .rodata.cst8,"aM",@progbits,8
        .align 8
.LC0:
        .long   0
        .long   0
        .ident  "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"
        .section        .note.GNU-stack,"",@progbits
Run Code Online (Sandbox Code Playgroud)

似乎没有消除?

啊哈:

gcc -O3  -ffast-math  -S test.c

        .file   "test.c"
        .text
        .p2align 4,,15
.globl f
        .type   f, @function
f:
.LFB0:
        .cfi_startproc
        xorpd   %xmm0, …
Run Code Online (Sandbox Code Playgroud)

c c++ optimization

21
推荐指数
2
解决办法
1826
查看次数

SIMD以下代码

如何在C中简化以下代码(当然使用SIMD内在函数)?我无法理解SIMD内在函数,这会有很大帮助:

int sum_naive( int n, int *a )
{
    int sum = 0;
    for( int i = 0; i < n; i++ )
        sum += a[i];
    return sum;
}
Run Code Online (Sandbox Code Playgroud)

c x86 sse simd

12
推荐指数
1
解决办法
6187
查看次数

标签 统计

c ×2

c++ ×1

optimization ×1

simd ×1

sse ×1

x86 ×1