मैं कैसे कहते हैं clock()
मेंC++
?
उदाहरण के लिए, मैं यह परखना चाहता हूं कि किसी सरणी में दिए गए तत्व को खोजने के लिए रैखिक खोज में कितना समय लगता है।
मैं कैसे कहते हैं clock()
मेंC++
?
उदाहरण के लिए, मैं यह परखना चाहता हूं कि किसी सरणी में दिए गए तत्व को खोजने के लिए रैखिक खोज में कितना समय लगता है।
जवाबों:
#include <iostream>
#include <cstdio>
#include <ctime>
int main() {
std::clock_t start;
double duration;
start = std::clock();
/* Your algorithm here */
duration = ( std::clock() - start ) / (double) CLOCKS_PER_SEC;
std::cout<<"printf: "<< duration <<'\n';
}
clock()
और clock_t
के सी स्टैंडर्ड लाइब्रेरी के हेडर से हैं time.h
, और इसलिए के उपयोग की जरूरत नहीं है std
उनके पुस्तकालयों के शामिल किए जाने के बाद नामस्थान उपसर्ग। नेमस्पेस के <ctime>
साथ उस मूल्य और फ़ंक्शन को लपेटता है std
, लेकिन इसका उपयोग करने की आवश्यकता नहीं है। कार्यान्वयन विवरणों के लिए यहां देखें: en.cppreference.com/w/cpp/header/ctime
एक वैकल्पिक समाधान, जो पोर्टेबल है और उच्च परिशुद्धता के साथ, C ++ 11 के बाद से उपलब्ध है, का उपयोग करना है std::chrono
।
यहाँ एक उदाहरण है:
#include <iostream>
#include <chrono>
typedef std::chrono::high_resolution_clock Clock;
int main()
{
auto t1 = Clock::now();
auto t2 = Clock::now();
std::cout << "Delta t2-t1: "
<< std::chrono::duration_cast<std::chrono::nanoseconds>(t2 - t1).count()
<< " nanoseconds" << std::endl;
}
Ideone.com पर इसने मुझे दिया:
Delta t2-t1: 282 nanoseconds
using Clock=std::chrono::high_resolution_clock;
। प्रकार उपनाम देखें ।
std::chrono::high_resolution_clock
सभी एसटीडी काम के कार्यान्वयन के लिए मोनोटोनिक नहीं है। Cppreference से - आम तौर पर किसी को सिर्फ std :: chrono :: स्थिर_clock या std :: chrono :: system_clock का उपयोग सीधे std के बजाय करना चाहिए :: chrono :: high_resolution_clock: stabil_lock का उपयोग अवधि माप के लिए, और system_clock दीवार-घड़ी के समय के लिए करें।
clock()
आपका प्रोग्राम शुरू होने के बाद से घड़ी की टिक की संख्या लौटाता है। एक संबंधित स्थिरांक है, CLOCKS_PER_SEC
जो आपको बताता है कि एक सेकंड में कितने घड़ी टिक होते हैं। इस प्रकार, आप इस तरह के किसी भी ऑपरेशन का परीक्षण कर सकते हैं:
clock_t startTime = clock();
doSomeOperation();
clock_t endTime = clock();
clock_t clockTicksTaken = endTime - startTime;
double timeInSeconds = clockTicksTaken / (double) CLOCKS_PER_SEC;
timeInSeconds
हमेशा 0.000000
मेरे लिए आ रहा है। मैं इसे कैसे ठीक करूंगा?
long double
अधिक सटीक होने के लिए ए का उपयोग करने की कोशिश कर सकते हैं ।
कम से कम विंडोज पर, केवल व्यावहारिक रूप से सटीक माप तंत्र QueryPerformanceCounter (QPC) है। std :: chrono का उपयोग कर इसे लागू किया जाता है (VS2015 के बाद से, यदि आप इसका उपयोग करते हैं), लेकिन यह सीधे QueryPerformanceCounter का उपयोग करने के समान डिग्री के लिए सटीक नहीं है । विशेष रूप से यह 1 नैनोसेकंड ग्रैन्युलैरिटी पर रिपोर्ट करने का दावा करता है, बिल्कुल सही नहीं है। इसलिए, यदि आप कुछ ऐसा उपाय कर रहे हैं, जिसमें बहुत कम समय लगता है (और आपका मामला ऐसा ही मामला हो सकता है), तो आपको QPC का उपयोग करना चाहिए, या अपने OS के बराबर होना चाहिए। कैश लेटेंसी को मापने के दौरान मैं इसके खिलाफ आया था, और मैंने कुछ नोट नीचे दिए थे जो आपको उपयोगी लग सकते हैं, यहाँ; https://github.com/jarlostensen/notesandcomments/blob/master/stdchronovsqcp.md
#include <iostream>
#include <ctime>
#include <cstdlib> //_sleep() --- just a function that waits a certain amount of milliseconds
using namespace std;
int main()
{
clock_t cl; //initializing a clock type
cl = clock(); //starting time of clock
_sleep(5167); //insert code here
cl = clock() - cl; //end point of clock
_sleep(1000); //testing to see if it actually stops at the end point
cout << cl/(double)CLOCKS_PER_SEC << endl; //prints the determined ticks per second (seconds passed)
return 0;
}
//outputs "5.17"
संभवत: आप इस तरह के टाइमर में दिलचस्पी ले सकते हैं: एच: एम: एस। Msec।
लिनक्स ओएस में कोड:
#include <iostream>
#include <unistd.h>
using namespace std;
void newline();
int main() {
int msec = 0;
int sec = 0;
int min = 0;
int hr = 0;
//cout << "Press any key to start:";
//char start = _gtech();
for (;;)
{
newline();
if(msec == 1000)
{
++sec;
msec = 0;
}
if(sec == 60)
{
++min;
sec = 0;
}
if(min == 60)
{
++hr;
min = 0;
}
cout << hr << " : " << min << " : " << sec << " . " << msec << endl;
++msec;
usleep(100000);
}
return 0;
}
void newline()
{
cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
}
usleep
आपके द्वारा मांगी गई राशि के बाद हमेशा वापस नहीं आएंगे। कभी-कभी यह लंबे समय तक रहेगा। आपको प्रारंभ में वर्तमान समय की जांच करनी चाहिए, फिर वर्तमान समय की जांच करें और लूप के माध्यम से हर बार शुरू करने के बाद से पूर्ण समय प्राप्त करने के लिए घटाएं।
आप माप सकते हैं कि आपका कार्यक्रम कितने समय तक काम करता है। निम्नलिखित कार्य कार्यक्रम की शुरुआत से सीपीयू समय को मापने में मदद करते हैं:
मेरा संदर्भ : कैलिफ़ोर्निया विश्वविद्यालय सैन डिएगो और नेशनल रिसर्च यूनिवर्सिटी हायर इकोनॉमिक्स द्वारा एल्गोरिदम टूलबॉक्स सप्ताह 1 पाठ्यक्रम डेटा संरचनाओं और एल्गोरिदम विशेषज्ञता का हिस्सा है
इसलिए आप अपने एल्गोरिथ्म के बाद कोड की इस पंक्ति को जोड़ सकते हैं
cout << (double)clock() / CLOCKS_PER_SEC ;
अपेक्षित आउटपुट: की संख्या का प्रतिनिधित्व करने वाला आउटपुट clock ticks per second
perf stat -d ./a.out