【发布时间】:2016-12-11 01:14:20
【问题描述】:
最近我想知道在 C 中计算 tanh(x) 函数的速度有多快。所以我编写了以下简单代码:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
int main() {
clock_t elapsed1 = -clock();
double x = 3.14;
for(int i = 0; i < 100000000; i++) {
x = tanh(x);
}
elapsed1 += clock();
printf("X = %f\n", x);
printf("time %lu\n", elapsed1);
return 0;
}
我已经在我的 CPU 上运行它(单线程 2.5GHz)并使用 Ubuntu 15.04 获得了 370 000 的时间。我的朋友有 MacOS 10.10.3(单线程 1.4GHz),她得到了 180 000。
我使用以下代码编译它:gcc -std=c99 -Wall -Wextra -pedantic -lm
她:gcc -std=c99 -Wall -Wextra -pedantic
我不明白较慢的 CPU 怎么能以快两倍的速度计算如此幼稚的代码 sn-p?为什么苹果不需要-lm?有什么关系吗?
如果 Apple 有一些很棒的数学库,那么在基本的 C 编译器/库中实现它们是否困难?为什么?
编辑:
确切地说:我的 CPU 比她更新更强大,所以应该没有问题。
我还在其他机器上运行过代码,它们的速度也较慢。
【问题讨论】:
-
可能取决于 L1 缓存大小、流水线长度等。您应该让我们知道您在两台机器上的 CPU 类型。
-
计算的值是否相同?
-
是的,确实如此。我有 Intel Core i7-4710MQ,不知道她有什么 CPU,但它是 core i5
-
您正在使用两种不同的硬件和软件环境,并尝试对它们进行基准测试。可能是 CS 中最具挑战性的任务之一。这个等式中的变量太多了。
-
可能还想尝试开启优化(例如:-O2)。
标签: ios c math gcc optimization