如何计算程序运行时间
现场PLC设备运行时间计算程序
现场PLC设备运行时间计算程序
昨天一个同事向我反应说现场plc的设备运行时间计算不准确,有时候一个小时能差一分钟,他经过分析认为运行时间计算应该放到中断程序里处理。
我跟他说设备运行时间计算完全没有必要放在中断中执行,有误差肯定是编程有问题,然后我把我的算法给他分享了,并且这个算法我用了很久没有出现过明显误差,今天也跟大家分享一下。
程序用到了系统时钟M0.5(设置时钟标记地址为M0)秒方波。
具体算法是T_RT_M每秒加1,当它大于3600时表明记录时间超过1小时了,此时给T_RT_H加1,给T_RT_M减3600。
最后时间等于T_RT_H+(T_RT_M/3600),用实数表示。
因为是用上升沿计数,并
且秒信号是保持0.5秒的方波,所以程序扫描时间不大于500ms的情况下肯定能捕捉到,不会丢失脉冲。
以前发现有的程序虽然也采用秒方波计数的方式,但是没用用到两级累计的方法,而是每个脉冲给运行时间累计0.0002778小时,由于浮点数小数精度是不定的,当数据大到一定程度每次累加的小数就会被舍去,造成误差偏大。
成为PLC技术工程师,加薪升职无难事!
来源:西门子工业技术论坛。
vb6.0计算自己程序段所用时间的方法
文章标题:探索VB6.0程序段时间计算的方法在计算机编程领域,对程序段的执行时间进行准确测量和评估是非常重要的。
在VB6.0编程中,我们常常需要了解自己的程序段所用时间,以便对程序性能进行优化和改进。
本文将深入探讨VB6.0程序段时间计算的方法,帮助读者全面理解这一重要主题。
一、介绍在VB6.0编程中,要计算程序段所用时间,我们常常使用计时器(Timer)函数。
该函数返回从午夜以来的当前系统时间,以秒为单位。
我们可以通过记录程序段开始前和结束后的时间值,再求差来得到程序段的执行时间。
具体来说,可以用以下代码进行实现:```vbaDim startTime As SingleDim endTime As SingleDim elapsedTime As SinglestartTime = Timer' 执行需要计算时间的程序段endTime = TimerelapsedTime = endTime - startTime```以上代码中,我们先定义了三个变量startTime, endTime和elapsedTime分别用来存储开始时间、结束时间和执行时间。
我们利用Timer函数来获取当前系统时间,并通过求差来计算程序段的执行时间。
二、方法在实际编程中,我们也可以封装上述计时方法为一个函数,以便在需要的地方进行调用。
以下是一个示例函数:```vbaFunction CalculateElapsedTime() As SingleDim startTime As SingleDim endTime As SinglestartTime = Timer' 执行需要计算时间的程序段endTime = TimerCalculateElapsedTime = endTime - startTimeEnd Function```通过将计时逻辑封装为函数,我们可以在程序中更灵活地使用,提高代码的复用性和可读性。
1200plc计算累积运行时间
1200plc计算累积运行时间在工业自动化领域,PLC(可编程逻辑控制器)是一种常用的控制设备,它可以通过编程来控制生产过程中需要执行的各种操作。
其中,1200PLC是西门子公司推出的一款性能卓越的PLC产品,被广泛应用于各种工业控制领域。
在使用1200PLC进行工业控制时,了解和掌握如何计算累积运行时间是非常重要的,因为这可以帮助工程师监测设备的稳定性和工作状态,同时也对设备的维护和维修提供了重要参考。
我们来了解一下1200PLC是如何计算累积运行时间的。
在1200PLC的程序中,通常会设置一个累积计时器,用来记录设备的运行时间。
这个计时器会在设备启动时开始计时,直到设备停止或重置时停止计时。
通过读取这个累积计时器的数值,就可以得到设备的累积运行时间。
在实际的工程应用中,工程师可以根据需要,设置不同精度的累积计时器,以满足对设备运行时间的不同需求。
需要监测设备每天的运行时间,就可以设置一个精度为天的累积计时器;需要监测设备每小时的运行时间,就可以设置一个精度为小时的累积计时器。
通过这种方式,工程师可以根据实际情况来灵活地监测设备的运行时间,并及时采取相应的维护和维修措施。
1200PLC计算累积运行时间的方法还涉及到了对设备运行状态的监测和判断。
通常情况下,工程师会在PLC程序中设置相应的逻辑,用来判断设备的开启和关闭状态。
通过对设备状态的监测,可以有效地控制累积计时器的启动和停止,从而准确地记录设备的运行时间。
工程师还可以把累积计时器的数值输出到HMI(人机界面)上,以便操作人员随时了解设备的运行状态。
在实际的工程项目中,对1200PLC计算累积运行时间的需求是非常广泛的。
除了常规的设备运行时间监测外,有些项目还需要对设备的运行时间进行统计和分析,以便进行生产效率的评估和改进。
在这种情况下,工程师可以通过1200PLC的编程,实现对设备运行时间的自动记录和统计,从而为生产管理提供有力的支持。
了解和掌握1200PLC计算累积运行时间的方法对工程师来说是非常重要的。
c++程序运行时间的计时方法
c++程序运行时间的计时方法介绍
在C++中,可以使用多种方法来计时程序的运行时间。
下面是两种常见的方法:
1.使用<chrono>头文件中的high_resolution_clock:
这种方法使用了C++11中引入的<chrono>头文件,可以提供高精度的时间测量。
high_resolution_clock会以最高的可用分辨率来测量时间,因此可以更准确地测量程序的运行时间。
2.使用<ctime>头文件中的clock()函数:
这种方法使用了<ctime>头文件中的clock()函数,它返回从程序启动到当前时刻的时钟计时数。
通过将开始时间和结束时间的计时数相减,再除以每秒的时钟计时数(CLOCKS_PER_SEC),可以计算出程序的运行时间。
这种方法虽然不如<chrono>头文件中的方法精确,但在大多数情况下仍然可以提供足够准确的结果。
matlab中程序运算时间计算
3、cputime函数来完成
使用方法和etime相似,只是这个是使用cpu的主频计算的,和前面原理不同,使用格式如下
t0=cputime
。。。。。。。。。。。。。
t1=cputime-t0
复制代码
上面说到了三种方法,都是可以进行程序运行时间计算的,但是Matlab官方推荐使用tic/toc组合,When timing the duration of an event, use the tic and toc functions instead of clock or etime.
复制代码
2、etime(t1,t2)并和clock配合
来计算t1,t2之间的时间差,它是通过调用windows系统的时钟进行时间差计算得到运行时间的,应用的形式
t1=clock;
。。。。。。。Βιβλιοθήκη 。。。 t2=clock;
etime(t2,t1)
复制代码
至于例子我就不举了,因为在上面的例子中使用了etime函数了
% by dynamic of Matlab技术论坛
% see also
% contact me matlabsky@
% 2009-08-18 12:08:47
clc
tic;%tic1
t1=clock;
for i=1:3
etime计算程序从开始到现在运行的时间:2.562
======================================
toc计算第2次循环运行时间:2.8108
etime计算第2次循环运行时间:2.813
etime计算程序从开始到现在运行的时间:5.375
计算Python程序执行时间
计算Python程序执⾏时间在计算Python程序运⾏时间中有⽐较常见的三种⽅法。
法⼀:利⽤time模块的time⽅法1import time2 start_time=time.time()#记录程序开始执⾏的当前时间3for i in range(10):4print(i)5 time.sleep(1)6 stop_time=time.time()#记录执⾏结束的当前时间7 func_time=stop_time-start_time#得到中间功能的运⾏时间8print("func is running %s s"%func_time)法⼆:利⽤time模块clock⽅法1import time2 start_time=time.clock()#记录程序开始第⼀次调⽤CPU的时间3for i in range(10):4print(i)5 time.sleep(1)6 stop_time=time.clock()#记录执⾏结束再次调⽤CPU的时间7 func_time=stop_time-start_time#得到中间功能的运⾏时间8print("func is running %s s"%func_time)法三:利⽤datetime模块的date.now()⽅法1import datetime2import time3 start_time=datetime.datetime.now()#记录程序开始执⾏的当前时间4for i in range(10):5print(i)6 time.sleep(1)7 stop_time=datetime.datetime.now()#记录执⾏结束的当前时间8 func_time=stop_time-start_time#得到中间功能的运⾏时间9print("func is running %s s"%func_time)。
c语言计算程序运行时间的函数
c语言计算程序运行时间的函数以C语言计算程序运行时间的函数为题,我们来探讨一下如何在C 语言中编写一个函数来计算程序的运行时间。
在计算机科学中,我们经常需要评估程序的性能,其中一个重要指标就是程序的运行时间。
在C语言中,我们可以使用clock()函数来计算程序的运行时间。
clock()函数返回的是程序运行的时钟周期数,我们可以通过一些操作将其转换为以秒为单位的时间。
我们需要包含<time.h>头文件,这个头文件中包含了clock()函数的定义。
然后,我们可以在程序中定义一个函数来计算程序的运行时间,下面是一个具体的例子:```c#include <stdio.h>#include <time.h>void calculate_time(){clock_t start, end;double cpu_time_used;start = clock(); // 记录开始时间// 在这里插入你的代码,待计算运行时间的代码end = clock(); // 记录结束时间cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC; // 计算运行时间,单位为秒printf("程序运行时间为 %f 秒\n", cpu_time_used);}int main(){calculate_time();return 0;}```在上面的例子中,我们定义了一个名为calculate_time()的函数来计算程序的运行时间。
首先,我们声明了两个clock_t类型的变量start和end,分别用来记录程序的开始时间和结束时间。
然后,我们使用clock()函数来获取当前的时钟周期数,并将其赋值给start 变量。
接着,我们在待计算运行时间的代码前后分别调用了clock()函数,并将返回值赋值给end变量。
最后,我们使用公式((double) (end - start)) / CLOCKS_PER_SEC来计算程序的运行时间,并将结果打印输出。
计算程序运行时间的方法
计算程序运⾏时间的⽅法转⾃:1这个是windows⾥⾯常⽤来计算程序运⾏时间的函数;DWORD dwStart = GetTickCount();//这⾥运⾏你的程序代码DWORD dwEnd = GetTickCount();则(dwEnd-dwStart)就是你的程序运⾏时间, 以毫秒为单位这个函数只精确到55ms,1个tick就是55ms。
1 #include <iostream>2 #include <windows.h>3using namespace std;4int main(int argc, char* argv[])5 {6 DWORD start, end;78 start = GetTickCount();9for(int i=0;i<1000;i++)10 cout<<"you are a good child!"<<endl; //your code11 end = GetTickCount()-start;12 cout<<end<<endl;13return0;14 }2timeGetTime()基本等于GetTickCount(),但是精度更⾼1 DWORD dwStart = timeGetTime();23//这⾥运⾏你的程序代码45 DWORD dwEnd = timeGetTime();则(dwEnd-dwStart)就是你的程序运⾏时间, 以毫秒为单位虽然返回的值单位应该是ms,但传说精度只有10ms。
1 #include <iostream>2 #include <windows.h>3#pragma comment(lib,"winmm.lib")45using namespace std;6int main(int argc, char* argv[])7 {8 DWORD start, end;910 start = timeGetTime();11for(int i=0;i<100;i++)12 cout<<"you are a good child!"<<endl;13 end = timeGetTime()-start;14 cout<<end<<endl;15return0;16 }3⽤clock()函数,得到系统启动以后的毫秒级时间,然后除以CLOCKS_PER_SEC,就可以换成“秒”,标准c函数。
VCMFC中计算程序系统运行时间方法
法一利用GetTickCount函数获取程序运行时间。
long t1=GetTickCount();//程序段开始前取得系统运行时间(ms)。
//to do sthlong t2=GetTickCount();//程序段结束后取得系统运行时间(ms)cout<<t2-t1<<endl;//前后之差即程序运行时间。
法二利用C/C++计时函数获取程序运行时间代码#include "time.h"。
clock_t start, finish;start = clock();。
//to do sthfinish = clock();//cout<<(double)(finish-start)/CLOCKS_PER_SEC<<" seconds"<<endl; printf("%f seconds\n",(double)(finish-start)/CLOCKS_PER_SEC);。
函数/参数说明获取系统运行的时间法三利用CTime类获取系统时间CString str;//获取系统时间CTime tm;tm=CTime::GetCurrentTime();str=tm.Format("现在时间是%Y年%m月%d日 %X");AfxMessageBox(str);法四利用GetLocalTime类获取系统时间代码SYSTEMTIME st;CString strDate,strTime;GetLocalTime(&st);strDate.Format("%4d-%2d-%2d",st.wYear,st.wMonth,st.wDay); strTime.Format("%2d:%2d:%2d",st.wHour,st.wMinute,st.wSecond); AfxMessageBox(strDate);AfxMessageBox(strTime);。
VC++获取系统时间、程序运行时间(精确到秒,毫秒)的五种方法
VC++获取系统时间、程序运⾏时间(精确到秒,毫秒)的五种⽅法1.使⽤CTime类(获取系统当前时间,精确到秒)CString str;//获取系统时间CTime tm;tm=CTime::GetCurrentTime();//获取系统⽇期str=tm.Format("现在时间是%Y年%m⽉%d⽇ %X");MessageBox(str,NULL,MB_OK);a,从CTimet中提取年⽉⽇时分秒CTime t = CTime::GetCurrentTime(); int d=t.GetDay(); //获得⼏号 int y=t.GetYear(); //获取年份 int m=t.GetMonth(); //获取当前⽉份 int h=t.GetHour(); //获取当前为⼏时 int mm=t.GetMinute(); //获取分钟 int s=t.GetSecond(); //获取秒 int w=t.GetDayOfWeek(); //获取星期⼏,注意1为星期天,7为星期六b,计算两段时间的差值,可以使⽤CTimeSpan类,具体使⽤⽅法如下:CTime t1( 1999, 3, 19, 22, 15, 0 );CTime t = CTime::GetCurrentTime();CTimeSpan span=t-t1; //计算当前系统时间与时间t1的间隔int iDay=span.GetDays(); //获取这段时间间隔共有多少天int iHour=span.GetTotalHours(); //获取总共有多少⼩时int iMin=span.GetTotalMinutes();//获取总共有多少分钟int iSec=span.GetTotalSeconds();//获取总共有多少秒c,获得当前⽇期和时间,并可以转化为CStringCTime tm=CTime::GetCurrentTime();CString str=tm.Format("%Y-%m-%d");//显⽰年⽉⽇2.使⽤GetLocalTime:Windows API 函数,获取当地的当前系统⽇期和时间(精确到毫秒) 此函数会把获取的系统时间信息存储到SYSTEMTIME结构体⾥边typedef struct _SYSTEMTIME{WORD wYear;//年WORD wMonth;//⽉WORD wDayOfWeek;//星期:0为星期⽇,1为星期⼀,2为星期⼆……WORD wDay;//⽇WORD wHour;//时WORD wMinute;//分WORD wSecond;//秒WORD wMilliseconds;//毫秒}SYSTEMTIME,*PSYSTEMTIME;例:SYSTEMTIME st;CString strDate,strTime;GetLocalTime(&st);strDate.Format("%4d-%2d-%2d",st.wYear,st.wMonth,st.wDay);strTime.Format("%2d:%2d:%2d",st.wHour,st.wMinute,st.wSecond) ;AfxMessageBox(strDate);AfxMessageBox(strTime);3.使⽤GetTickCount:从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值是DWORD。
python记录程序运行时间的三种方法
方法1
import datetime starttime = datetime.datetime.now() #long running endtime = datetime.datetime.now() print (endtime - starttime).seconds
方法 2
start = time.time() run_fun() end = time.time() print end-start
方法3
start = time.clock() run_fun() end = time.clock() print end-start
方法1和方法2都包含了其他程序使用CPU的时间,是程序开始到程序结束的运行时间。
方法3算只计算了程序运行的CPU时间
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
这篇料文中通过示例代码介绍的非常详细对大家的学习或者工作具有一定的参考学习价值需要的朋友们下面随着小编来一起学习学习吧
python记 录 程 序 运 行 时 间 的 三 种 方 法
python记录程序运行时间的三种方法
这里提供了python记录程序运行时间的三种方法,并附有实现代码,最后进行比较,大家参考下:
cpu计算时间公式
cpu计算时间公式CPU计算时间公式在计算机科学领域,CPU计算时间是衡量计算机性能的一个重要指标。
它表示CPU执行一段程序所需的时间。
计算机的速度越快,CPU计算时间越短,反之亦然。
那么,CPU计算时间的具体计算公式是什么呢?我们需要明确计算机执行程序所需的时间可以分解为三个部分:时钟周期、指令数和时钟周期数。
时钟周期是CPU完成一个基本操作所需的时间,通常以纳秒为单位。
指令数表示程序中的总指令数量,而时钟周期数则表示CPU需要执行的总时钟周期数量。
那么,CPU计算时间的公式可以表示为:CPU计算时间 = 时钟周期 × 指令数 × 时钟周期数在这个公式中,时钟周期是固定的,因为它取决于CPU的硬件设计和制造工艺。
指令数是程序的固定属性,因为它取决于程序的逻辑结构和算法。
而时钟周期数则是可以通过优化和改进来减少的。
为了更好地理解这个公式,我们可以举一个简单的例子。
假设有一个程序,它包含1000条指令,而每条指令的执行时间为1纳秒,CPU的时钟周期为0.5纳秒。
那么,根据上述公式,CPU计算时间可以计算为:CPU计算时间 = 0.5纳秒 × 1000 × 1纳秒 = 500纳秒从这个例子可以看出,CPU计算时间取决于时钟周期、指令数和时钟周期数的乘积。
因此,要减少CPU计算时间,我们可以通过以下几种方式来优化:1. 提高时钟频率:通过增加CPU的时钟频率,可以减少每个时钟周期所需的时间,从而缩短CPU计算时间。
2. 优化算法:通过改进程序的算法和逻辑结构,可以减少指令数,从而缩短CPU计算时间。
3. 并行计算:通过将任务分解为多个子任务,并在多个处理器上并行执行,可以减少时钟周期数,从而缩短CPU计算时间。
除了上述方法外,还有一些其他的优化技术可以用于减少CPU计算时间,例如缓存优化、指令级并行性和内存访问优化等。
这些技术可以在硬件和软件层面上进行优化,以提高计算机的性能。
Java获取并计算程序执行时间
Java获取并计算程序执⾏时间⼀般输出⽇期时间经常会⽤到Date这个类:1 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置⽇期格式2 System.out.println(df.format(new Date()));// new Date()为获取当前系统时间Java 获取并计算程序执⾏时间,有以下两种⽅法:(1)以毫秒为单位计算static long currentTimeMillis() ,该⽅法返回值是从1970年1⽉1⽇凌晨到此时刻的毫秒数1long startTime=System.currentTimeMillis(); //获取开始时间2 doSomeThing(); //测试的代码段3long endTime=System.currentTimeMillis(); //获取结束时间4 System.out.println("程序运⾏时间: "+(end-start)+"ms");(2)以纳秒为单位计算1long startTime=System.nanoTime(); //获取开始时间2 doSomeThing(); //测试的代码段3long endTime=System.nanoTime(); //获取结束时间4 System.out.println("程序运⾏时间: "+(end-start)+"ns");⼀个例⼦:1public static void main(String[] args) {2long startTime = System.currentTimeMillis(); // 获取开始时间34 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置⽇期格式5 System.out.println(df.format(new Date()));// new Date()为获取当前系统时间67 System.out.println("程序开始执⾏时间:"+startTime);89try {10new BPRRanking001().execute(args);1112 } catch (Exception e) {13 e.printStackTrace();14 }15long endTime = System.currentTimeMillis(); // 获取结束时间16 System.out.println("程序结束执⾏时间:"+endTime);17 System.out.println(df.format(new Date()));// new Date()为获取当前系统时间18 System.out.println("程序总运⾏时间: " + (endTime - startTime) + "ms");19 }。
运行时间的计算方法
运⾏时间的计算⽅法1、了解输⼊数据的量和运⾏时间的关系使⽤相同的算法,输⼊数据的量不同,运⾏时间也会不同。
⽐如对10个数字排序和对1000000个数字排序,很容易想到就是后者运⾏时间更长。
实际上会长多少呢?后者是前者的100倍,还是1000000倍?不仅需要理解不同算法在运⾏时间上的区别,也要了解根据输⼊数据量的⼤⼩,算法的运⾏时间具体会产⽣多⼤变化。
2、如何求运⾏时间使⽤“步数”来描述运⾏时间。
“1步”就是计算的基本单位。
通过测试“计算机从开始到结束总共执⾏了多少步”来求得算法的运⾏时间。
根据理论层⾯求出选择排序的运⾏时间,选择排序的步骤如下:①从数列中寻找最⼩值②将最⼩的值和数列左边的数字交换,排序结束。
回到①如果数列中有n个数字,那么①中“寻找最⼩值”步骤只需要确认n个数字即可。
这⾥将“确认1个数字的⼤⼩”作为操作的基本单位,需要的时间设置为T c,那么步骤①运⾏的时间就是n*T c。
将“两个数字进⾏交换”也作为基本操作单位,需要时间设置为T s,那么①和②总共重复n次,每经过“1轮”需要查找的数字就减少1个,因此总的运⾏时间如下:虽然只剩1个数字不需要确认了,但是⽅便起见还是进⾏对它进⾏确认和交换时间计算⽐较好。
3、运⾏时间的表⽰⽅法T c和T s都是基本的单位,与输⼊⽆关。
会根据输⼊变化⽽变化就是n,即数列的长度。
所以需要考虑n变⼤的情况,n越⼤,n2就越⼤,其他部分就相对变⼩了。
也就是说对结果影响最⼤的是n2。
所以删除其他部分,将其结果表⽰为下⾯的形式。
通过这个可以⼤概了解到排序算法的运⾏时间与输⼊量n的平⽅成正⽐。
例如某个算法的运⾏时间如下:那么结果可以⽤O(n3)表⽰。
如果运⾏时间为:则可以⽤O(nlogn)表⽰。
备注:O表⽰“忽略重要项以外的内容”,O(n2)的意思是“算法的运⾏时间最长就是n2的常数倍”。
如何计算程序的运行时间
如何计算程序的运行时间1.这个是windows里面常用来计算程序运行时间的函数;DWORD dwStart = GetTickCount();//这里运行你的程序代码DWORD dwEnd = GetTickCount();则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位这个函数只精确到55ms,1个tick就是55ms。
#include <iostream>#include <windows.h>using namespace std;int main(int argc, char* argv[]){DWORD start, end;start = GetTickCount();for(int i=0;i<1000;i++)cout<<"you are a good child!"<<endl; //yourcodeend = GetTickCount()-start;cout<<end<<endl;return 0;}2.timeGetTime()基本等于GetTickCount(),但是精度更高DWORD dwStart = timeGetTime();//这里运行你的程序代码DWORD dwEnd = timeGetTime();则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位虽然返回的值单位应该是ms,但传说精度只有10ms。
#include <iostream>#include <windows.h>#pragma comment(lib,"winmm.lib")using namespace std;int main(int argc, char* argv[]){DWORD start, end;start = timeGetTime();for(int i=0;i<100;i++)cout<<"you are a good child!"<<endl;end = timeGetTime()-start;cout<<end<<endl;return 0;}3.用clock()函数,得到系统启动以后的毫秒级时间,然后除以CLOCKS_PER_SEC,就可以换成“秒”,标准c函数。
MAPLAB程序时间执行时间的计算
在 MPLAB IDE 中当选择 Debugger 为 MPLAB SIM 时 在 view 菜单下有个 simulator logic analyzer,
在程序中待计算的程序段之前和之后各加同一个 IO 口的置 0 置 1 输 出信号;例如:计算 delaynus(160)的延时,中程序中可以 RC0=1;RC0=0; delaynus(160); RC0=1;在 logic analyzer 中的 Channels 选项中把 RC0 作人分析信号, 这样在程序编译运行后, 这时通过图形是不好计算时间的; 那么在图形中点击右键选择 Export Table 后可以导出文本方式的数据如: RC0(X) RC0(Y) 93367 157109 0 157110 1 158902 0 很明显 delaynus(160);运行所需的指令周期是: 158902-157110=1792 cycles;要得到时间, 那根据所选择的 CPU 时钟即可获得; 例如: 8MHz 时,每个指令要求 4 个时钟周期,0.5us*1792=896uS。 1
c语言计算程序运行时间的方法
c语⾔计算程序运⾏时间的⽅法1. 有时候我们要计算程序执⾏的时间.⽐如我们要对算法进⾏时间分析,这个时候可以使⽤下⾯这个函数.精确到us。
#include <sys/time.h>int gettimeofday(struct timeval *tv,struct timezone *tz);strut timeval {long tv_sec; /* 秒数 */long tv_usec; /* 微秒数 */};gettimeofday将时间保存在结构tv之中.tz⼀般我们使⽤NULL来代替.#include <sys/time.h<#include <stdio.h<#include <math.h<void function(){unsigned int i,j;double y;for(i=0;i<1000;i++)for(j=0;j<1000;j++)y=sin((double)i);}main(){struct timeval tpstart,tpend;float timeuse;gettimeofday(&tpstart,NULL);function();gettimeofday(&tpend,NULL);timeuse=1000000*(__sec)+__usec;timeuse/=1000000;printf("Used Time:%f\n",timeuse);exit(0);}这个程序输出函数的执⾏时间,我们可以使⽤这个来进⾏系统性能的测试,或者是函数算法的效率分析.在我机器上的⼀个输出结果是: Used Time:0.5560702.第⼆种是我⾃⼰经常⽤的,就是:在执⾏程序前,加time,如:输⼊time./abc ,精确到ms。
3. clock函数(精确到1/CLOCKS_PER_SEC秒,毫秒级)#include <iostream>#include <ctime>using namespace std;int max(int x,int y){return (x>y)?x:y;}int main(){const double begin=clock();for(int i=10000;i>0;i--)for(int j=10000;j>0;j--)max(i,j);const double end=clock();cout <<begin<<" "<<end;return 0;}。
计算和估算程序运行时间
start = time.time() run_function() end = time.time() print str(end)
func = np.polyfit(line_number,every_time, deg=1) plt.figure(figsize=(10, 5.5)) plt.plot(line_number, np.polyval(func, line_number)) plt.scatter(line_number,every_time) plt.show()
print('拟合函数的系数是:', func) prediction_time = (func[0] * file1.shape[0] + func[1])/3600 print('预计用时:', str(int(prediction_time)) +' hour')
2只需导入time包,在程序开头和结尾加上记录时刻的函数,最后相减
1当要运行的数据很大时可以利用下面的程序估算函数的执行时间该程序只适用于程序执行时间与执行行数呈一次函数的情况
计算和估算程序运行时间
1 当要运行的数据很大时,可以利用下面的程序估算函数的执行时间,该程序只适用于程序执行时间与执行行s pd import datetime as dt import matplotlib.pyplot as plt
every_time = [] line_number = np.arange(1, 9, 1) * 1000 for j in line_number:
# 读取的是h5文件时 # user_repay = pd.read_hdf('user_repay_first.h5') # user_repay = user_repay.head(j) #读取的是csv文件时 file1 = pd.read_hdf('user_repay_first.csv', nrows = j) time1 = dt.datetime.now() file2 = function() every_time.append((dt.datetime.now() - time1).total_seconds()) del file1,file2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
real e, etime, t(2)
e = etime(t)
! Startup etime - do not use result
do i = 1, 10000
k=k+1
end do
e = etime( t )
该函数的调用方式如下所示:
e = etime( tarray )
tarray
real(2)
输出
e= -1.0:错误:tarray 值未定义
e≠ -1.0:单处理器:tarray(1) 中存储的是用户时间,tarray(2) 中存储的是系统时间
多处理器:tarray(1) 中存储的是挂钟时间,tarray(2) 中存储的是 0.0
{
double starttime, endtime;
starttime = double MPI_Wtime()
…要计时的东西…
endtime = double MPI_Wtime()
printf("That took %f secodes\n", endtime-starttime);
elapsed: 0.03 , user: 0.01 , sys: 0.02
demo%
2. etime:自开始执行后已用时间
对于 etime,已用时间为:
?
单处理器执行-调用进程的 CPU 时间
?
多处理器执行-处理程序时的挂钟时间
如果环境变量 PARALLEL 或 OMP_NUM_THREADS 定义为大于 1 的某个整数值,运行时库就确定程序是在多处理器模式下执行。
一、dtime 和 etime:已用的执行时间
这两个函数的返回值都是已用时间(如果为 -1.0,表示出现错误)。返回的时间以秒数表示。
缺省情况下,Fortran 95 使用的 dtime 和 etime 版本使用系统的低精度时钟。该精度是百分之一秒。但是,如果在 Sun OSTM 操作系统实用程序 ptime(1) (/usr/proc/bin/ptime) 下运行程序,则使用高精度时钟。
print *, ’elapsed:’, e, ’, user:’, t(1), ’, sys:’, t(2)
end
demo% f95 tetime.f
demo% a.out
elapsed: 0.02 , user: 0.01 , sys: 0.01
demo%
二、MPI计时器
1. dtime:自上次调用 dtime 后已用时间
对于 dtime,已用时间为:
?
第一次调用:自开始执行后已用时间
?
后来调用:自上次调用 dtime 后已用时间
?
单处理器:CPU 占用的时间
?
多处理器:所有 CPU 占用时间总和,该数据没有什么用,这时可改用 etime。
}
所返回的时间居域于调用它们的节点。不要求不同的节点返回“同样的时间”。
MPI_WTICK()
double MPI_Wtick()
DOUBLE PRECISION MPI_WTICK()
MPI_WTICK返回秒中MPI_WTIME的精度。即,它返回连续时钟滴答的秒数,是一双精度值。
do i = 1, 10000
k=k+1
end do
e = dtime( t )
print *, ’elapsed:’, e, ’, user:’, t(1), ’, sys:’, t(2)
end
demo% f95 tdtime.f
demo% a.out
elapsed: 0.0E+0 , user: 0.0E+0 , sys: 0.0E+0
MPI定义了一个计时器。尽管不是“消息传递”,也说明一个计时器,因为对并行程序计时在“性能调试”中是很重要的,并且已存在的计时器(在POSIX 1003.1-1988和1003.4D 14.1和在Fortran 90中)要么是不方便的,要么是没能提供对高分辨率计时器的足够的访问。
MPI_WTIME()
double MPI_Wtime(void)
DOUBLE PRECISION MPI_WTIME()
MPI-WTIME返回一个浮点的秒数, 它表示在过去某一时刻所经历的屏蔽时钟时间。
要保证过去某一时刻在进程生命期间不被改变。用户如果喜欢,则负责将大的秒数转换成其它单位。
函数是可移植的(它返回秒而不是滴答数),它允许高分辨率,且不携带没有必要的垃圾。人们将象这样的使用它:
该函数的调用方式如下所示:
e = dtime( tarray )
tarray
real(2)
输出
e= -1.0:错误:tarray 值未定义
e≠ -1.0:没有错误,tarray(1) 中存储的是用户时间,tarray(2) 中存储的是系统时间
返回值
--------------------------------------------------------------------------------
注:
在并行循环中调用 dtime 会得到不确定的结果,这是因为参与循环的所有线程都共用已用时间计数器。
--------------------------------------------------------------------------------
返回值
real
输出
e= -1.0:错误
e≠ -1.0:tarray(1) 与 tarray(2) 之和
请注意,初次调用 etime 时所得结果不准确。它只是使系统时钟开始运转。请勿使用初次调用 etime 返回的值。
示例:etime(),单处理器:
real
输出
e= -1.0:错误
e≠ -1.0:tarray(1) 与 tarray(2) 之和
示例:dtime(),单处理器:
demo% cat tdtime.f
real e, dtime, t(2)
print *, ’elapsed:’, e, ’, user:’, t(1), ’, sys:’, t(2)