相关疑难解决方法(0)

使用C++和Linux的高分辨率计时器?

在Windows下也有像一些方便的功能,QueryPerformanceCountermmsystem.h创建高分辨率定时器.Linux有类似的东西吗?

c++ linux timer

46
推荐指数
4
解决办法
8万
查看次数

如何使用C++/C++ 11打印当前时间(以毫秒为单位)

目前我使用此代码

string now() {
    time_t t = time(0);
    char buffer[9] = {0};

    strftime(buffer, 9, "%H:%M:%S", localtime(&t));
    return string(buffer);
}
Run Code Online (Sandbox Code Playgroud)

格式化时间.我需要添加毫秒,因此输出的格式为:16:56:12.321

c++ linux windows time c++11

19
推荐指数
5
解决办法
5万
查看次数

MATLAB的tic-toc和C的时钟差异

我编写了一些C代码,在使用MEX编译之后我将其称为MATLAB.在C代码中,我使用以下代码测量计算的一部分时间:

clock_t begin, end;
double time_elapsed;
begin = clock();
/* do stuff... */
end = clock();
time_elapsed = (double) ((double) (end - begin) / (double) CLOCKS_PER_SEC);
Run Code Online (Sandbox Code Playgroud)

经过的时间应该是以秒为单位的执行时间.

然后我将值输出time_elapsed到MATLAB(它被正确导出;我检查过).然后MATLAB端我调用这个C函数(在我使用MEX编译它之后)并使用tic和测量它的执行时间toc.结果是完全荒谬的是我使用tic和toc计算的时间是0.0011s(500次运行时的平均值,st.dev.1.4e-4),而C代码返回的时间是0.037s(平均500次运行,st.dev.00,616).

人们可能会注意到两个非常奇怪的事实:

  1. 整个函数的执行时间低于部分代码的执行时间.因此,MATLAB或C的测量结果都非常不准确.
  2. 在C代码中测量的执行时间非常分散并且表现出非常高的st.偏差(变异系数44%,而tic-toc仅为13%).

这些计时器发生了什么事?

c time matlab mex

8
推荐指数
1
解决办法
2109
查看次数

高分辨率时序部分代码

我想测量循环中函数的速度.但是为什么我这样做的方式总是打印"0"而不是9位十进制精度(即纳秒/微秒)的高分辨率时序?

这样做的正确方法是什么?

#include <iomanip>
#include <iostream>
#include <time.h>
int main() {


 for (int i = 0; i <100; i++) {
    std::clock_t startTime = std::clock(); 
    // a very fast function in the middle
    cout << "Time: " << setprecision(9) << (clock() - startTime + 0.00)/CLOCKS_PER_SEC << endl;
 }

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

相关问题:

c++ time high-resolution

7
推荐指数
1
解决办法
5132
查看次数

我的硬件上的time.h clock()坏了吗?

我尝试测量在OMAP ZOOM 3430 MDK附带的TMS32064x + DSP上执行一段代码所需的时钟周期.我看一下DSP芯片的"程序员指南",它说DSP支持clock()功能.

我做的很简单,我就是这么做的

start = clock();
for (i=0;i<100;i++){
    /* do something here */
}
stop = clock();
total = stop - start;
Run Code Online (Sandbox Code Playgroud)

然后将"start","stop"和"total"的值放入以前使用ARM处理器分配的共享内存中.然后我只是将它打印到ARM端的屏幕上.

问题是,在我第一次执行时,我总是得到相同的"总"值,然后在我的下一次运行中我总是得到0!"开始"和"停止"值与"总"值一起出现.

最奇怪的是他们似乎遵循了一点点模式!我把输出结果如下:

# ./sampleapp
Total = 63744
Start clock() value = 0x000000f9
Stop  clock() value = 0x0000f9f9
# ./sampleapp 
Total = 4177526784
Start clock() value = 0x00f9f9f9
Stop  clock() value = 0xf9f9f9f9
# ./sampleapp
Total clock cyles = 0
Start clock() value = 0xf9f9f9f9
Stop  clock() value = 0xf9f9f9f9
Run Code Online (Sandbox Code Playgroud)

显然,clock()运行不正常,但我不确定这是因为我做错了什么,还是因为我的硬件不支持这种类型的东西.任何想法为什么会这样?

c c++ embedded clock omap

7
推荐指数
1
解决办法
1767
查看次数

如何在C++中的特定时间启动函数?

是否可以在C++中的特定时间调用函数?例如,我想在number_of_elapsed_milliseconds_since_application_start = x时启动函数doIt().

跨平台解决方案将是理想的.

c++ time

6
推荐指数
1
解决办法
3355
查看次数

CLOCKS_PER_SEC在不同操作系统中的行为

我正在运行一个cpp代码,但有一件事我注意到在Windows 7上,C++代码中的CLOCKS_PER_SEC给出1000而在linux fedora 16上它给出了1000000.有人可以证明这种行为吗?

c++ linux windows-7 fedora16

6
推荐指数
1
解决办法
7875
查看次数

Windows与Linux内存分配/ std :: list构造函数性能

我正在将C++代码从Linux移植到Windows.在这个过程中,我发现以下行在Windows下(在完全相同的硬件上)慢了大约10倍:

list<char*>* item = new list<char*>[160000]; 
Run Code Online (Sandbox Code Playgroud)

在Windows上需要大约10毫秒,而在Linux上需要大约1毫秒.请注意,这是平均时间.在Windows上运行此行100次需要约1秒.

这在win32和x64上都会发生,两个版本都在Release中编译,速度通过QueryPerformanceCounter(Windows)和gettimeofday(Linux)来测量.

Linux编译器是gcc.Windows编译器是VS2010.

不知道为什么会发生这种情况?

c++ linux windows memory-management stl

5
推荐指数
1
解决办法
1101
查看次数

CUDA程序中的性能受到影响,在for循环中重复调用内核

我有一个CUDA程序在for循环中重复调用内核.该代码通过使用前一个中计算的值来计算矩阵的所有行,直到完成整个矩阵.这基本上是一种动态编程算法.下面的代码与内核并行填充许多单独矩阵的(i,j)条目.

for(i = 1; i <=xdim; i++){

  for(j = 1; j <= ydim; j++){ 

    start3time = clock();
    assign5<<<BLOCKS, THREADS>>>(Z, i, j, x, y, z)
    end3time = clock(); 
    diff = static_cast<double>(end3time-start3time)/(CLOCKS_PER_SEC / 1000); 
    printf("Time for i=%d j=%d is %f\n", i, j, diff); 
  }

}
Run Code Online (Sandbox Code Playgroud)

内核assign5很简单

__global__ void assign5(float* Z, int i, int j, int x, int y, int z) {

  int id = threadIdx.x + blockIdx.x * blockDim.x;

  char ch = database[j + id];

  Z[i+id] = (Z[x+id] + Z[y+id] + Z[z+id])*dev_matrix[i][index[ch …
Run Code Online (Sandbox Code Playgroud)

for-loop cuda gpu dynamic-programming

3
推荐指数
1
解决办法
1764
查看次数

如何在C++中计时事件?

我希望能够获得在我的C++程序中执行某些操作所需的纳秒数.

对象创建,函数执行它的时间等等.

Java,我们做的事情是这样的:

    long now = System.currentTimeMillis();
    // stuff
    long diff = (System.currentTimeMillis() - now);
Run Code Online (Sandbox Code Playgroud)

你会如何在C++中做同样的事情?

c++

2
推荐指数
1
解决办法
6483
查看次数

在 C++ 中计算经过的时间

我需要计算我的函数经过的时间。现在我正在使用 std::clock 并且据我所知这是测量 CPU 时间,这可能与实时不同。

std::clock_t start;
double duration;

start = std::clock();

someFunctionToMeasure();

duration = (std::clock() - start) / (double)CLOCKS_PER_SEC;
Run Code Online (Sandbox Code Playgroud)

所以我想知道两件事

  1. std::clock 究竟是如何工作的?它只是在计算该功能时测量CPU吗?

  2. 有没有更好的方法来测量计算我的函数所用的时间?

c++ clock

2
推荐指数
2
解决办法
8672
查看次数

在Linux上运行的C++程序中定时函数

我正在尝试使用在用户空间中执行所花费的时间来计算我的C++程序的功能.我从程序内部尝试了clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&start)命令,但我担心这是CPU时间而不是我实际需要的用户时间.时间"程序名称"在这种情况下不起作用,因为我只计时功能.任何帮助都会很棒.谢谢!

c++ linux timing

1
推荐指数
1
解决办法
3546
查看次数