代码之家  ›  专栏  ›  技术社区  ›  Community wiki

C中有哪些耗时的操作?

  •  14
  • Community wiki  · 技术社区  · 12 月前

    我想写一个可以在各种机器上编译和运行的快速基准测试程序。与其使用商业/开源可用的选项,我宁愿拥有自己的线程和算法优化技术。

    我已经使用了一些方法,包括递归计算斐波那契序列的第n个数,以及几千次播种/rand()。

    有没有其他算法相对简单,但同时计算密集(可能与数学有关)?

    (请注意,这些操作将用C语言实现。)

    14 回复  |  直到 15 年前
        1
  •  9
  •   Welbog    15 年前

    这个 Ackermann function 通常是一个有趣的项目,但如果你想在有生之年完成,就不要给它很大的投入。

        2
  •  3
  •   Aiden Bell    15 年前
        3
  •  3
  •   namenlos    15 年前

    我知道你说过你想自己制作,但也许你可以借鉴现有的基准来获得灵感。 The Computer language benchmark game 已经通过一组基准测试运行了许多编程语言。也许你可以从他们的基准中得到一些想法。

    我脑海中的一些快速想法:

    • 矩阵乘法:乘法2 大矩阵是相对的 计算密集型 必须考虑缓存

    • 生成素数

    • 整数分解

    • 求解常微分方程的数值方法- Runge-kutta 例如

        4
  •  2
  •   levesque    15 年前

    反转大矩阵。

        5
  •  2
  •   Jonathan    15 年前

    你可以计算大素数或整数的因式分解。

        6
  •  2
  •   jkp    15 年前

    看看 NAS Parallel Benchmarks 。这些最初是由 NASA 在Fortran中,使用MPI的超级计算机(现在仍然可用),但现在也有C、Java和OpenMP实现。

    其中大部分是 非常 计算密集型,因为它们旨在代表科学计算中使用的数值算法。

        7
  •  1
  •   Nick Dandoulakis    15 年前

    尝试计算数千或数百万 pi 数字。有不少 formulas 为该任务。

        8
  •  1
  •   Juan Techera    15 年前

    你有一些非常好的 project euler ,这些都是与数学有关的,如果你想使用更高的值,可能会很耗时。

        9
  •  0
  •   AlbertoPL    15 年前

    寻找素数被认为是相当耗时的。

        10
  •  0
  •   bayer    15 年前

    查看语言测试中的基准测试: http://shootout.alioth.debian.org/

    然而:基准只是基准,不一定能告诉你很多关于现实世界的信息,相反,可能会产生误导。

        11
  •  0
  •   samoz    15 年前

    如果你想尝试并行,可以做很多矩阵运算。您可以使用的矩阵的大小将受到内存的限制,但您可以进行任意数量的迭代。

    这将强调现代CPU附带的SIMD指令。

        12
  •  0
  •   Daniel Earwicker    15 年前

    这做了很多补充:

    int c = 0; 
    for (int n = 0; n < INT_MAX; n++)
        for (int m = 0; m < INT_MAX; m++)
            c++;
    
    std::cout << c;
    
        13
  •  0
  •   Frank V    15 年前

    你可以尝试一个输入集很大的tsort(Turbo Sort)。我知道这是一种常见的操作。

        14
  •  0
  •   user118861    15 年前

    启发式 NP-Complete 问题是获得一些CPU密集型代码的一种有趣方式。您可以为其中一个编写“解决方案”:) Karps NP完全问题。