我正在寻找一种快速的方法来获取C中两次函数调用之间的经过时间.
我考虑使用jiffies,但它们不在用户区中.那么,我应该使用getimeofday()还是有任何最快的方法来做到这一点.
我只对两次调用之间的缩短时间感兴趣,以便在基准测试工具中使用.
因此,对于我在计算机系统课程中的最终作业,我们需要优化这些forloops,使其比原始版本更快.使用我们的linux服务器,基本等级不到7秒,完整等级不到5秒.我在这里的代码大约需要5.6秒.我想我可能需要以某种方式使用指针来使它更快,但我不是很确定.任何人都可以提供我的任何提示或选项吗?非常感谢!
QUICKEDIT:文件必须保持50行或更少,我忽略了教师所包含的那些注释行.
#include <stdio.h>
#include <stdlib.h>
// You are only allowed to make changes to this code as specified by the comments in it.
// The code you submit must have these two values.
#define N_TIMES 600000
#define ARRAY_SIZE 10000
int main(void)
{
double *array = calloc(ARRAY_SIZE, sizeof(double));
double sum = 0;
int i;
// You can add variables between this comment ...
register double sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0, sum5 = 0, …Run Code Online (Sandbox Code Playgroud) 在下面的代码中,我使用golang中的bufio将消息写入文件.我的磁盘I/O速度约为1000M/s.奇怪的是,当写入文件的大小小于20G时,写入速度约为每秒800M~900M,略低于I/O速度.但是,当文件大小超过21G时,我发现写入速度大约是每秒200M,远低于I/O速度.我不知道为什么,任何人都可以帮助我?谢谢.
package main
import "fmt"
import (
"os"
"time"
"flag"
"bufio"
)
func main() {
var pRound = flag.Int64("round", 3500000, "loop round")
flag.Parse()
var message string
for i := 0; i < 1024; i++ {
message += "1234567890"
}
message += "\n"
f, err := os.OpenFile("server", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666)
if err != nil {
fmt.Println(err)
return
}
w := bufio.NewWriter(f)
var i int64 = 0
round := *pRound
start := time.Now()
for i = 0; i < round; i++ {
w.WriteString(message) …Run Code Online (Sandbox Code Playgroud) %%time新单元格的第一行.我运行这个单元格并获得如下信息
CPU时间:用户2分8秒,系统:14.5秒,总计:2分22秒
停留时间:1分29秒
我的问题是这些参数意味着什么?CPU时间,用户,系统,总数(我认为这意味着用户+总数),挂起时间
I have an issue with the generation of makefiles stage of CMake being slow which is similar to this unanswered question:
CMake is slow to generate makefiles
My project is made up of a top level CMakeLists.txt file which uses add_subdirectory() to add various subprojects for individual library and executable components.
For a given component, the CMakeLists.txt file contains something like:
add_library(mylib SHARED
sourceFile1.cpp
sourceFile2.cpp
...
)
Run Code Online (Sandbox Code Playgroud)
I can build just the contents of that directory using:
make mylib
Run Code Online (Sandbox Code Playgroud)
If …
我创建了一个基准类,允许用户插入例如
$timer->checkpoint('1');
Run Code Online (Sandbox Code Playgroud)
检查一些代码的时间,内存消耗等......如果她/他想测试它,她/他必须插入代码的末尾
$result=$timer->result();
Run Code Online (Sandbox Code Playgroud)
这给公共函数result()提供了一些数据,例如内存使用(使用memory_get_peak_usage)和时间消耗(microtime()).
这对我来说都很好.
但是,如何使用现有内置php函数的组合来获取可被视为CPU消耗的值?
使用内置函数计算在某段代码上花费了多少时间非常容易,但我一直在想办法如何获得某段代码的CPU消耗.
我对bash中的sed效率有疑问.我有一系列流水线的sed语句,例如:
var1="Some string of text"
var2=$(echo "$var1" | sed 's/pattern1/replacement1/g' | sed 's/pattern2/replacement2/g' | sed 's/pattern3/replacement3/g' | sed 's/pattern4/replacement4' | sed 's/pattern5/replacement5/g')
Run Code Online (Sandbox Code Playgroud)
假设没有输入依赖于早期sed管道的编辑输出,我最好用表达式语句编写上面的脚本吗?例如:
var2=$(echo "$var1" | sed -e's/pattern1/replacement1/g' -e's/pattern2/replacement2/g' -e's/pattern3/replacement3/g' -e's/pattern4/replacement4/g' -e's/pattern5/replacement5/g')
Run Code Online (Sandbox Code Playgroud)
这里有效率吗?
我必须计算许多傅里叶变换.我想与我的许多内核并行执行这些操作.请注意,我不想要并行FFT算法,我只想发布许多令人尴尬的并行FFT.
我发现,当我的CPU使用率上升时,我的完成时间不会减少.
我们创建一些随机数据
In [1]: import numpy as np
In [2]: x = np.random.random(10000000) # some random data
Run Code Online (Sandbox Code Playgroud)
并计算一次计算FFT的时间和计算一次FFT所需的时间.
In [3]: %time _ = np.fft.rfft(x) # cost of one run
CPU times: user 589 ms, sys: 23.9 ms, total: 612 ms
Wall time: 613 ms
In [4]: %time _ = np.fft.rfft(x) # there is some speedup from mulitple runs
CPU times: user 365 ms, sys: 12.4 ms, total: 378 ms
Wall time: 381 ms
Run Code Online (Sandbox Code Playgroud)
我们按顺序在一系列数据上运行它
In [5]: %time …Run Code Online (Sandbox Code Playgroud) 有没有办法计算可执行文件的准确执行时间?
具体来说,我正在寻找一种可用于对使用 Matlab 编译的可执行文件进行计时的方法。我指的不是tic,toc。
我试过 >>time ./a.out
得到了
real 0m0.035s
user 0m0.008s
sys 0m0.004s
Run Code Online (Sandbox Code Playgroud)
它的真正含义是什么?
当我重复我得到
real 0m0.012s
user 0m0.000s
sys 0m0.012s
Run Code Online (Sandbox Code Playgroud)
如果我每次得到不同的输出时都尝试多次,为什么?我该如何解决。
我有大量基于Selenium的perl Testscripts.完成测试后,它会打印一个日志,如下所示.这指定了什么?如何计算下面的时间和基于什么
Files=1, Tests=17, 209 wallclock secs ( 0.13 usr + 0.01 sys = 0.14 CPU)
Run Code Online (Sandbox Code Playgroud) 如何使gprbuild默认执行并行构建?它不再是1990年了,拥有所有这些备用内核,并且不想继续添加-j0到命令行.
根据我对文档的理解,这应该有效:
package Builder is
for Default_Switches("Builder") use ("-j0");
end Builder;
Run Code Online (Sandbox Code Playgroud)
......但它没有; 它被忽略了.我已经看到了Default_Switches("Ada")应该起作用的互联网的提及,但所有这一切都是将--jobs选项传递给GNAT,这当然是错误的.
在程序的顶部和末尾,我使用clock()来计算程序完成所需的时间.不幸的是,它的报告时间似乎只有一半.我用"time"命令仔细检查了这一点.
我的计划报告:在45.86s完成
时间命令报告:实际0m22.837s用户0m45.735s sys 0m0.152s
使用我的手机定时,它在23秒完成(又名:"真实"时间)."用户"时间是所有线程的总和,因为我使用的是OpenMP.(你可以在这里阅读:'真实','用户'和'sys'在时间(1)的输出中是什么意思?)
那么,为什么clock()报告的是"用户"时间而不是"真实"时间?我应该使用不同的函数来计算程序运行的时间吗?
作为旁注,Windows的clock()按预期工作,并在"实际"时间内报告.
c ×4
time ×3
performance ×2
ada ×1
automation ×1
bash ×1
benchmarking ×1
build ×1
c++ ×1
clock ×1
cmake ×1
cpu ×1
debug-mode ×1
executable ×1
fft ×1
file ×1
fwrite ×1
gcc ×1
go ×1
io ×1
linux ×1
loops ×1
matlab ×1
meson-build ×1
numpy ×1
openmp ×1
optimization ×1
parameters ×1
perl ×1
php ×1
python ×1
regex ×1
runtime ×1
scipy ×1
sed ×1