他们在速度方面(使用asm或不使用)和实际应得的速度之间有什么好处

时间:2013-08-12 06:30:38

标签: c optimization

在我的情况下,我想要更好的速度 速度之间哪一个更好。

例如:

int n=0;
__asm {
MOV n, 100
INC n
ADD n, 100
}
printf("%d\n", n);

int n=0;
n = 100;
n++;
n += 100;
printf("%d\n", n);

我使用以下代码来了解它们之间有什么更好的结果,但它们不会给我一个结果来告诉我什么更好。

double duration;
clock_t start, end;
start = clock();

// code here

end = clock();
duration = (double)(end - start) / CLOCKS_PER_SEC;
printf("%f\n", duration );

3 个答案:

答案 0 :(得分:1)

除了测量时钟周期外,您还可以使用反汇编来确定编译器选择的确切内容

基本上在如此小的代码中,编译器很可能为更快和更小的代码做出正确的选择(特别是如果针对速度进行了优化),并且在这种情况下,优选使用C而不是asm来实现代码的可移植性和避免你做一些小改动时的错误

如果编译器没有选择与你的程序集相同的方法,我会试图找出原因。这可能非常重要。

答案 1 :(得分:0)

您可以使用cpu周期来衡量两种方法的性能差异。试试这个,而不是时钟:

inline uint64 getCycles() {
    uint64 cycles;

    __asm__ __volatile__("rdtsc" : "=A" (cycles));

    return cycles;
}

答案 2 :(得分:0)

我认为两个版本之间没有太大区别。唯一的区别可能是您可以编写最适合您的CPU的asm代码,但编译器可能会编写一般代码。

如果你有内存操作,if语句,for循环可能会有区别。

循环,缓存问题和系统调用是消费者最大的时间。

我想说为这样一个简单的可读性案例编写C代码是明智的。

您可以编写干净的C代码并通过其他方式获得最佳性能:使用特殊硬件(例如:GPU),更好的算法,重新定义问题,更好的编译器使用....