Article View: pl.comp.lang.c
Article #309670Re: Dlaczego ten test nie działa
From: bartekltg
Date: Thu, 12 Apr 2018 13:46
Date: Thu, 12 Apr 2018 13:46
86 lines
4888 bytes
4888 bytes
On Thursday, April 12, 2018 at 3:42:13 PM UTC+2, bartekltg wrote:
> On Thursday, April 12, 2018 at 9:56:05 AM UTC+2, Maciek wrote:
> > W dniu środa, 11 kwietnia 2018 21:53:29 UTC+2 użytkownik Wojciech Muła napisał:
> > > On Wednesday, April 11, 2018 at 6:50:09 PM UTC+2, Maciek wrote:
> > > > Cześć. Chciałem zapytać dlaczego poniższy test nie działa:
> > > >
> > > > std::cout<<((double)(c_after - c_before)/CLOCKS_PER_SEC>=1.0)<<" \r";
> > > >
> > > > Chodzi o to e chce coś zrobić kiedy ten test będzie true c_after - c_before mają wynik funkcji clock().
> > > >
> > > > To tyle w dużym skrócie. Dzięki cześć.
> > >
> > > Wyrażenie wygląda OK, wyświetl sobie c_after oraz c_before
> > > i zobacz co tam masz.
> > >
> > > BTW skoro używasz C++, to zainteresuj się nagłówkiem chrono,
> > > bardzo porządnie zrobiony -- http://en.cppreference.com/w/cpp/header/chrono.
> > >
> > > w.
> >
> > To jesteś mi w stanie wytumaczyć dlaczego poniższa funkcja nie działa:
> >
> > unsigned int a=0, b=0, c=0, d=0, result=0;
> > unsigned int op_per_sec;
> > std::clock_t c_before, c_after=0;
> > c_before=std::clock();
> > std::vector<unsigned int> vec(1000000);
> > for(unsigned int i=0; i<100000000; ++i) {
> > result = a+b+c+d;
> > ++op_per_sec;
> > c_after = std::clock();
> > if((double(c_after - c_before)/CLOCKS_PER_SEC)>=1.0)
> > std::cout<<"IN FUNCTION "<<__func__<<"OP PER SEC IS : "<<op_per_sec<<" \r";
> > std::cout.flush();
> > c_before = std::clock();
> > op_per_sec = 0;
> > }
> > }
> >
> > konkretnie linia std::cout<<"IN FUNCTION "<<__func__<<"OP PER SEC IS : "<<op_per_sec<<" \r";
> >
> > nic mi nie wypisuje.
>
> Popatrz na ten program dobrze. Nadmiar pythona;p
>
> > std::cout.flush();
> > c_before = std::clock();
> > op_per_sec = 0;
>
> robisz w _każdej_ pętli, więc c_before zawsze
> jest aktualne, ma wartość z poprzedniej pętli,
> mierzysz więc czas wykonania pojedyńczej pętli, nie
> od początku/od resetu.
>
> Wstaw klamerki
>
> unsigned int bar(){
> uint64_t a=0, b=0, c=0, d=0, result=0;
> uint64_t op_per_sec;
> std::clock_t c_before, c_after=0;
> c_before=std::clock();
> std::vector<unsigned int> vec(1000000);
> for(uint64_t i=0; i<1000000000000llu; ++i) {
> result = a+b+c+d;
> ++op_per_sec;
> c_after = std::clock();
> if((double(c_after - c_before)/CLOCKS_PER_SEC)>=1.0){
> std::cout<<"IN FUNCTION "<<__func__<<"OP PER SEC IS : "<<op_per_sec<<" \r";
> std::cout.flush();
> c_before = std::clock();
> op_per_sec = 0;
> }
> }
> return result;
> }
>
BTW, jeśli chesz w ten sposób mierzyć wydajność, to to jest
kiespki pomysł, bo patrzenie na zegar i porównywanie zajmuje
więcej czasu niż właściwe operacje.
Zadań blok operacji (możesz w trakcie dobierać jego wielkość)
i mierz czas w jakim wykona się k operacji.
pzdr
bartekltg
Technical Details
Message-ID:
<d1020644-6938-4bc2-8920-24f0ddc5201c@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer02.am4!peer.am4.highwinds-media.com!peer02.iad!feed-me.highwinds-media.com!news.highwinds-media.com!s52no1784516qtc.0!news-out.google.com!e12ni3150qtp.1!nntp.google.com!s52no1784507qtc.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<11e93e39-69fc-4ee2-8886-9d077c8026fb@googlegroups.com> <2750bf86-40ef-4907-90fd-89e8542c0183@googlegroups.com> <a6c0bdb8-b0e7-4628-a7d6-bf79907261a2@googlegroups.com> <28f03fe8-2266-4732-97e1-a59291320a22@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 10.237.60.85 with SMTP id u21mr645824qte.58.1523540762103; Thu, 12 Apr 2018 06:46:02 -0700 (PDT) X-Received: by 10.31.193.140 with SMTP id r134mr101418vkf.6.1523540761844; Thu, 12 Apr 2018 06:46:01 -0700 (PDT) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer02.am4!peer.am4.highwinds-media.com!peer02.iad!feed-me.highwinds-media.com!news.highwinds-media.com!s52no1784516qtc.0!news-out.google.com!e12ni3150qtp.1!nntp.google.com!s52no1784507qtc.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Thu, 12 Apr 2018 06:46:01 -0700 (PDT) In-Reply-To: <28f03fe8-2266-4732-97e1-a59291320a22@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=89.70.113.215; posting-account=CvUQzQoAAABvVQmR58QmR6N4Cev1qhAS NNTP-Posting-Host: 89.70.113.215 References: <11e93e39-69fc-4ee2-8886-9d077c8026fb@googlegroups.com> <2750bf86-40ef-4907-90fd-89e8542c0183@googlegroups.com> <a6c0bdb8-b0e7-4628-a7d6-bf79907261a2@googlegroups.com> <28f03fe8-2266-4732-97e1-a59291320a22@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <d1020644-6938-4bc2-8920-24f0ddc5201c@googlegroups.com> Subject: Re: Dlaczego ten test nie działa From: bartekltg <bartekltg@gmail.com> Injection-Date: Thu, 12 Apr 2018 13:46:02 +0000 X-Received-Bytes: 5159 X-Received-Body-CRC: 1311655739 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit