gpt4 book ai didi

chapel - 使用计时器时 pi 计算速度变慢

转载 作者:行者123 更新时间:2023-12-02 09:05:20 26 4
gpt4 key购买 nike

以下代码是我计算 pi = 3.1415 的代码...大约使用 this公式:

use Time;
var timer = new Timer();

config const n = 10**9;
var x = 0.0, s = 0.0;

// timer.start(); // [1]_____

for k in 0 .. n {
s = ( if k % 2 == 0 then 1.0 else -1.0 ); // (-1)^k
x += s / ( 2.0 * k + 1.0 );
}

// timer.stop(); // [2]_____
// writeln( "time = ", timer.elapsed() ); // [3]_____

writef( "pi (approx) = %30.20dr\n", x * 4 );
// writef( "pi (exact) = %30.20dr\n", pi ); // [4]_____

当上面的代码编译为 chpl --fast test.chpl 并以 time ./a.out 执行时,则运行时为 ~4秒

pi (approx) =         3.14159265458805059268

real 0m4.334s
user 0m4.333s
sys 0m0.006s

另一方面,如果我取消注释行 [1--3] (以使用 Timer ),程序运行速度会慢很多,约 10 秒 作为

time = 10.2284
pi (approx) = 3.14159265458805059268

real 0m10.238s
user 0m10.219s
sys 0m0.018s

当我仅取消注释行 [4] (以打印 pi 的内置值,并保留行 [1-3] 时,也会出现同样的速度下降注释掉):

pi (approx) =         3.14159265458805059268
pi (exact) = 3.14159265358979311600

real 0m10.144s
user 0m10.141s
sys 0m0.009s

所以我想知道为什么会出现这种减速......

上面的代码中我是否遗漏了一些内容(例如,Timer 的错误使用)?

我的环境是通过自制程序安装的 OSX10.11 + chapel-1.16。更多详情如下:

$ printchplenv --anonymize
CHPL_TARGET_PLATFORM: darwin
CHPL_TARGET_COMPILER: clang
CHPL_TARGET_ARCH: native
CHPL_LOCALE_MODEL: flat
CHPL_COMM: none
CHPL_TASKS: qthreads
CHPL_LAUNCHER: none
CHPL_TIMERS: generic
CHPL_UNWIND: none
CHPL_MEM: jemalloc
CHPL_MAKE: make
CHPL_ATOMICS: intrinsics
CHPL_GMP: gmp
CHPL_HWLOC: hwloc
CHPL_REGEXP: re2
CHPL_WIDE_POINTERS: struct
CHPL_AUX_FILESYS: none

$ clang --version
Apple LLVM version 8.0.0 (clang-800.0.42.1)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
<小时/>

更新

根据建议,我按照 this 从源代码安装了 Chapel和 this页面并将 CHPL_TARGET_COMPILER=gnu 添加到 ~/.chplconfig (在运行 make 之前)。然后,上述所有三种情况的运行时间约为 4 秒。因此,该问题可能与 OSX10.11 上的 clang 有关。根据评论,较新的 OSX (>= 10.12) 不存在此问题,因此升级到较新的 OSX/clang (>= 9.0) 可能就足够了。仅供引用,更新后的环境信息(使用 GNU)如下:

$ printchplenv --anonymize
CHPL_TARGET_PLATFORM: darwin
CHPL_TARGET_COMPILER: gnu +
CHPL_TARGET_ARCH: native
CHPL_LOCALE_MODEL: flat
CHPL_COMM: none
CHPL_TASKS: qthreads
CHPL_LAUNCHER: none
CHPL_TIMERS: generic
CHPL_UNWIND: none
CHPL_MEM: jemalloc
CHPL_MAKE: make
CHPL_ATOMICS: intrinsics
CHPL_GMP: none
CHPL_HWLOC: hwloc
CHPL_REGEXP: none
CHPL_WIDE_POINTERS: struct
CHPL_AUX_FILESYS: none

最佳答案

Am I missing something in the above code (e.g., wrong usage of Timer)?

不,您没有错过任何东西,并且正在以完全合理的方式使用Timer(和Chapel)。根据我自己的实验(证实了你的实验,并在你的问题下的评论中注明),这看起来是一个后端编译器问题,而不是 Chapel 或你对它的使用的基本问题。

关于chapel - 使用计时器时 pi 计算速度变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47561759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com