फिर से वालराय के लिए मेरे प्रश्न के लिए क्षमा करें। मैं इसका उपयोग करने की कोशिश कर रहा हूं क्योंकि वेक्टर & मैट्रिक्स ऑपरेट करते समय मैटलैब की तरह है। मैंने पहले कुछ प्रदर्शन जांच की और पाया कि Valarray stroustrup द्वारा पुस्तक C++ प्रोग्रामिंग भाषा में घोषित प्रदर्शन को प्राप्त नहीं कर सकता है।वालराय इतना धीमा क्यों है?
परीक्षण कार्यक्रम वास्तव में युगल के 5 एम गुणा किया था। मैंने सोचा कि सी = ए * बी कम से कम लूप डबल टाइप तत्व गुणा के लिए तुलनीय होगा, लेकिन मैं पूरी तरह गलत हूं। कई कंप्यूटर और vc6.0 और बनाम 2008 पर कोशिश की।
वैसे, मैं निम्नलिखित कोड का उपयोग कर matlab पर परीक्षण किया:
len=5*1024*1024;
a=rand(len,1);b=rand(len,1);c=zeros(len,1);
tic;c=a.*b;toc;
और परिणाम 46ms है। इस बार उच्च परिशुद्धता नहीं है, केवल संदर्भ के रूप में काम करता है।
कोड है:
#include <iostream>
#include <valarray>
#include <iostream>
#include "windows.h"
using namespace std ;
SYSTEMTIME stime;
LARGE_INTEGER sys_freq;
double gettime_hp();
int main()
{
enum { N = 5*1024*1024 };
valarray<double> a(N), b(N), c(N) ;
QueryPerformanceFrequency(&sys_freq);
int i,j;
for( j=0 ; j<8 ; ++j)
{
for( i=0 ; i<N ; ++i)
{
a[i]=rand();
b[i]=rand();
}
double* a1 = &a[0], *b1 = &b[0], *c1 = &c[0] ;
double dtime=gettime_hp();
for( i=0 ; i<N ; ++i) c1[i] = a1[i] * b1[i] ;
dtime=gettime_hp()-dtime;
cout << "double operator* " << dtime << " ms\n" ;
dtime=gettime_hp();
c = a*b ;
dtime=gettime_hp()-dtime;
cout << "valarray operator* " << dtime << " ms\n" ;
dtime=gettime_hp();
for( i=0 ; i<N ; ++i) c[i] = a[i] * b[i] ;
dtime=gettime_hp()-dtime;
cout << "valarray[i] operator* " << dtime<< " ms\n" ;
cout << "------------------------------------------------------\n" ;
}
}
double gettime_hp()
{
LARGE_INTEGER tick;
extern LARGE_INTEGER sys_freq;
QueryPerformanceCounter(&tick);
return (double)tick.QuadPart*1000.0/sys_freq.QuadPart;
}
चल परिणाम: (अधिकतम गति अनुकूलन के साथ रिलीज़ मोड) एक ही अनुकूलन के साथ
double operator* 52.3019 ms
valarray operator* 128.338 ms
valarray[i] operator* 43.1801 ms
------------------------------------------------------
double operator* 43.4036 ms
valarray operator* 145.533 ms
valarray[i] operator* 44.9121 ms
------------------------------------------------------
double operator* 43.2619 ms
valarray operator* 158.681 ms
valarray[i] operator* 43.4871 ms
------------------------------------------------------
double operator* 42.7317 ms
valarray operator* 173.164 ms
valarray[i] operator* 80.1004 ms
------------------------------------------------------
double operator* 43.2236 ms
valarray operator* 158.004 ms
valarray[i] operator* 44.3813 ms
------------------------------------------------------
डिबगिंग मोड:
double operator* 41.8123 ms
valarray operator* 201.484 ms
valarray[i] operator* 41.5452 ms
------------------------------------------------------
double operator* 40.2238 ms
valarray operator* 215.351 ms
valarray[i] operator* 40.2076 ms
------------------------------------------------------
double operator* 40.5859 ms
valarray operator* 232.007 ms
valarray[i] operator* 40.8803 ms
------------------------------------------------------
double operator* 40.9734 ms
valarray operator* 234.325 ms
valarray[i] operator* 40.9711 ms
------------------------------------------------------
double operator* 41.1977 ms
valarray operator* 234.409 ms
valarray[i] operator* 41.1429 ms
------------------------------------------------------
double operator* 39.7754 ms
valarray operator* 234.26 ms
valarray[i] operator* 39.6338 ms
------------------------------------------------------
के रूप में लगभग समान है क्या आपने निष्पादन योग्य चलाया था? या आपने इसे डीबगर (विजुअल स्टूडियो के माध्यम से) में आजमाया है? –
आप किस अनुकूलन सेटिंग्स का उपयोग कर रहे हैं? –
डीबगर या exe – shangping