PDA

View Full Version : شمارش تعداد سیکل های CPU



reza10203045
یک شنبه 18 مهر 1389, 17:55 عصر
با سلام
من می خواستم در این مورد راهنمایی کنید که چطوری می توانم برنامه ای که نوشتم در چند سیکل CPU اجرا می شود.

tdkhakpur
یک شنبه 18 مهر 1389, 18:20 عصر
چطوری می توانم برنامه ای که نوشتم در چند سیکل CPU اجرا می شود.
اگر منظور تعداد پالسهای موجود برای اجرای برنامه برای تیک زدن پایه کلاک cpu هست که این عملی نیست مثل این میمونه که یک کیسه گندم را بگیری و تعدا دونه ها رو بشماری .
ولی اگر منظور زمان الگوریتم مد نظر شماست به نظرم باید کدتان را ارسال کنید.

Nima_NF
دوشنبه 19 مهر 1389, 06:02 صبح
API ها زیر را در ویندوز مطالعه کنید (در همین فروم نیز مثال بیان شده است):
QueryPerformanceCounter
QueryPerformanceFrequency

reza10203045
دوشنبه 19 مهر 1389, 21:58 عصر
سلام ممنون از راهنمایی های شما دوستان عزیز
برای شمارش تعداد سیکل های CPU یا مدت زمانی که CPU طول می کشد تا برنامه نوشته شده شما را اجرا کند به طریق زیر می توان عمل کرد

// Reza Mehdi.Hadi 1389

#include "stdafx.h"
#include <conio.h>
#include <tchar.h>
#include <windows.h>
using namespace System;

int main(array<System::String ^> ^args)
{
__int64 ctr1 = 0, ctr2 = 0, freq = 0;
int acc = 0, i = 0;

// Start timing the code.
if (QueryPerformanceCounter((LARGE_INTEGER *)&ctr1)!= 0)
{
// Code segment is being timed.
for (i=0; i<100; i++) acC++‎;

// Finish timing the code.
QueryPerformanceCounter((LARGE_INTEGER *)&ctr2);
Console::WriteLine("Reza Mehdi.Hadi 1389 Algorithm");
Console::WriteLine("Start Value: {0}",ctr1.ToString());
Console::WriteLine("End Value: {0}",ctr2.ToString());

QueryPerformanceFrequency((LARGE_INTEGER *)&freq);
Console::WriteLine("100 Increment time: {0} seconds.",((ctr2 - ctr1) * 1.0 / freq).ToString());
}
else
{
DWORD dwError = GetLastError();

}

// Make the console window wait.
Console::WriteLine();
Console::Write("Press ENTER to finish.");
Console::Read();

return 0;
}