Just a Computer Graphics Studio & My Life

大二演算法和碩一高等演算法都需要計算程式執行時間 (Compute Time of Execution),藉此來分析演算法的效能,雖然現在中央處理器快到讓我們人感覺不太出來,不過在處理上億次的迴圈依然有需要,讓我們知道,一個小小的運算累積起來影響多大,正所謂:差之毫釐,失之千里

此一方法可以求取小數點以下16位的時間,對於現今速度超快的電腦相當實用。

以下為程式碼:

/**
	Theme: Compute Time of Execution
	compiler: Dev C++ 4.9.9.2
	Date: 99/10/27
	Author: ShengWen
	Blog: https://cg2010studio.wordpress.com/
*/
#include<iostream>
#include<iomanip>
#include<windows.h>
using namespace std;
int main()
{
	LARGE_INTEGER startTime,endTime,fre;
	double times;
	QueryPerformanceFrequency(&fre); //取得CPU頻率
	QueryPerformanceCounter(&startTime); //取得開機到現在經過幾個CPU Cycle
	//doing something
	for(int i=0;i<1000000000;i++);
	//doing something
	QueryPerformanceCounter(&endTime); //取得開機到程式執行完成經過幾個CPU Cycle
	times=((double)endTime.QuadPart-(double)startTime.QuadPart)/fre.QuadPart;
	cout << fixed << setprecision(20) << times << 's' << endl;
	system("pause");
	return 0;
}

我在程式中執行一億次(10的9次方)空轉迴圈,用我實驗室DELL的筆電所得到的結果如下:

3.84908668559830950000s
請按任意鍵繼續 . . .

使用方法:只要在//doing something中間放入你要執行的程式碼(函式)即可。

至於LARGE_INTEGER是什麼請看以下(來自程式設計俱樂部)解說:

  • long long is a standard type in C99. Some C++ compliers also support this as an extension. It is guarantee to be at least 64-bit in C99.
  • LONGlong is Windows type. It is typedef to __int64 in VC++.
  • LARGE_INTEGER is a Windows structure that represent 64-bit signed integer. this is use before the compiler has built-in 64-bit support.

以後想知道程式的演算法寫得多好,就可以用這一招囉~

Advertisements

Comments on: "[C++] 計算程式執行時間 (Compute Time of Execution)" (2)

  1. […] 參考:計算程式執行時間 (Compute Time of Execution)。 […]

    喜歡

  2. […] 就知道我在哪時候執行這兩個指令了!接下來進入正題~比起C語言還要寫好幾行程式碼(請見我寫的[C++] 計算程式執行時間 (Compute Time of Execution)),MatLab提供兩個指令來計算執行時間: […]

    喜歡

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: