2010-08-31 22 views
5

संकेत और आरोपों का कहना है कि हार्डवेयर एफपीयू में नाइन के साथ अंकगणित 'धीमा' हो सकता है। विशेष रूप से आधुनिक x64 एफपीयू में, उदाहरण के लिए नेहलेम i7 पर, क्या यह अभी भी सच है? क्या एफपीयू गुणा करता है ऑपरेटरों के मूल्यों के बावजूद एक ही गति पर मंथन करता है?इंटेल x64 एफपीयू में NaN अंकगणित कितनी धीमी है?

मेरे पास कुछ इंटरपोलेशन कोड है जो हमारे परिभाषित डेटा के किनारे से घूम सकता है, और मैं यह निर्धारित करने की कोशिश कर रहा हूं कि यहां और हर जगह NaNs (या कुछ अन्य सेंटीनेल मान) की जांच करना तेज है या बस सुविधाजनक पर अंक।

हां, मैं अपने विशेष मामले को बेंचमार्क कर दूंगा (यह पूरी तरह से स्मृति बैंडविड्थ की तरह किसी और चीज का प्रभुत्व हो सकता है), लेकिन मुझे आश्चर्य हुआ कि मेरे अंतर्ज्ञान में मदद करने के लिए कहीं संक्षिप्त सारांश नहीं दिख रहा था।

मैं सीएलआर से ऐसा करूँगा, अगर यह उत्पन्न एनएनएस के स्वाद के रूप में अंतर करता है।

+0

जहां तक ​​मुझे पता है, केवल एक 'NaN' मान है। – zneak

+3

@zneak: कम से कम, आईईईई -754 विभिन्न बिट पैटर्न के साथ "शांत" और "सिग्नलिंग" NaNs को परिभाषित करता है। –

+0

@ जिम लेविस मुझे लगता है कि जो मुझे पता था उससे आगे था। – zneak

उत्तर

6

क्या इसके लायक है, NaN साथ SSE अनुदेश mulsd उपयोग करने के लिए निरंतर 4.0 (एक निष्पक्ष पासा रोल ने चुना है, यादृच्छिक होने की गारंटी) के साथ के रूप में काफी बिल्कुल के रूप में तेजी से होता है।

इस कोड:

for (unsigned i = 0; i < 2000000000; i++) 
{ 
    double j = doubleValue * i; 
} 

बजना के साथ (पाश अंदर) इस मशीन कोड उत्पन्न करता है (मैं नेट आभासी मशीन SSE निर्देश का उपयोग करता है मान लेते हैं जब यह भी कर सकते हैं):

movsd  -16(%rbp), %xmm0 ; gets the constant (NaN or 4.0) into xmm0 
movl  -20(%rbp), %eax  ; puts i into a register 
cvtsi2sdq %rax, %xmm1   ; converts i to a double and puts it in xmm1 
mulsd  %xmm0, %xmm1  ; multiplies xmm0 (the constant) with xmm1 (i) 
movsd  %xmm1, -32(%rbp) ; puts the result somewhere on the stack 

और दो अरब पुनरावृत्तियों के साथ, NaN (जैसा कि <math.h> से सी मैक्रो NAN द्वारा परिभाषित किया गया है) संस्करण में i7 पर निष्पादित करने के लिए संस्करण 0.017 कम सेकंड लिया गया। अंतर शायद कार्य शेड्यूलर के कारण हुआ था।

तो उचित होने के लिए, वे बिल्कुल तेज़ हैं।

+0

+1! –

+0

किसी को वास्तविक प्रोफ़ाइल परिणामों को देखना हमेशा अच्छा होता है, लेकिन ओपी ने संक्षिप्त सारांश के लिए कहा और विशेष रूप से बेंचमार्क किए गए समाधान के लिए नहीं। Số 1। माफ़ कीजिये। एफडब्ल्यूआईडब्ल्यू, मैंने वीएस.2015 cl.exe कंपाइलर पर एक बेंचमार्क किया और एक मोनो रनटाइम (वास्तव में एकता 5.5.2) के अंदर चल रहा था और आयाम धीमी गति के ऑर्डर करने के लिए आईएसएनएएन परीक्षण पाया। इसलिए केवल इसलिए कि आपको एक उदाहरण मिला जहां इसका उपवास सवाल का जवाब नहीं देता है कि क्या यह आम तौर पर तेज़ है। – Imi

+0

@Imi, क्या आपने कोड को जेनरेट किया है? इसके अलावा, इस उत्तर में कहीं भी कहीं भी नहीं है। – zneak