देखने की लागत बनाम गणना


12

मुझे यह लिए गणना करने में दिलचस्पी है कि क्या कोई दूरी मानदंड संतुष्ट है: , एक वेक्टर और एथेर वेक्टर बीच की दूरी कुछ मान से कम होनी चाहिए। । मेरा डेटा निर्देशांक के एक ऑर्थोगोनल ग्रिड के अनुसार विभाजित है। चूंकि मेरा कटऑफ निकटतम-पड़ोसी निर्देशांक के समापन बिंदु के बीच की दूरी से छोटा है, इसलिए मैं यह जांचने के लिए "ऑक्टेंट" चर जोड़ना चाहूंगा कि क्या चीजें सही तरीके से सेट की गई हैं:xixjrmax

if octant[j] in allowed_list continue

"शॉर्ट-सर्किट" के रूप में

if dist(x[i], x[j]) < r_max

मेरा सवाल है: अस्थायी-संचालन कार्यों के सापेक्ष बूलियन लुकअप और तुलना कितने कुशल हैं? क्या यह आधुनिक आर्किटेक्चर पर काम करने लायक है?


3
क्या आप अपना कोड शाखा और परीक्षण करने के लिए तैयार हैं? मुझे लगता है कि इनमें से अधिकांश के लिए मानक उत्तर "इसे (एक ही रास्ता) या किसी और तरीके से कोड करना बेहतर है?" सवालों के प्रकार "इसे आज़माएं और इसे बेंचमार्क करें।"
बजे ज्योफ ऑक्सीबेरी

1
बस मेरे 2 सेंट। जैसा कि ज्योफ ने लिखा है, इस तरह की सलाह मुझे हमेशा मिलती है जब मैंने सी ++ कोड के बारे में स्टैकओवरफ्लो पर इसी तरह के सवाल पूछे थे: कोड सब कुछ पहले, कोड को व्यवस्थित करें ताकि मैं मॉड्यूलर और फिर से प्रयोग करने योग्य बना रहे, और उसके बाद ही रिफैक्टरिंग शुरू करें। एक 80-20 नियम है: सॉफ्टवेयर 20% कोड पर 80% समय खर्च करता है। संरचना के उठने तक प्रतीक्षा करें, और फिर परिवर्तन, परीक्षण, परिवर्तन, परीक्षण ..
टेमरिक

@GeoffOxberry: मेरा प्रश्न इतना विशिष्ट नहीं है: मैं सिर्फ यह जानना चाहता हूं कि क्या एक फ्लोटिंग-पॉइंट ऑपरेशन करने की तुलना में बूलियन चेक करने के लिए कोई हार्डवेयर या कंपाइलर लाभ दिया गया है।
एइस्माइल

3
लेकिन आपका सवाल बहुत सामान्य है। कुछ ठोस कोड देखे बिना कोई नहीं बता सकता। अंगूठे का एक नियम है जो कहता है कि यहां तक ​​कि सबसे अच्छा प्रोग्रामर यह नहीं बता सकता है कि उनके कोड की अड़चनें प्रोफाइलिंग के बिना कहां हैं। मैंने अपने पिछले 25 साल प्रोग्रामिंग में बिताए हैं और मुझे पता है कि यह मेरे लिए सच है।
वोल्फगैंग बंगर्थ

जवाबों:


15

अंगूठे का मेरा नियम यह है कि यदि आप 50 से कम फ्लॉप्स प्रति डबल परिशुद्धता मूल्य में कुशलतापूर्वक (FPU का अच्छा उपयोग) कुछ मात्रा की गणना कर सकते हैं, तो स्टोर करने की तुलना में इसे पुनः स्थापित करना बेहतर है। प्रवृत्ति, जो दशकों से स्थिर है, स्मृति प्रदर्शन की तुलना में तेजी से सुधार करने के लिए फ्लोटिंग पॉइंट क्षमता के लिए है, और तेज गति की भौतिक बाधाओं और ऊर्जा आवश्यकताओं के कारण सापेक्ष होने की संभावना नहीं है। 50 का मान सभी लोकप्रिय कंप्यूटिंग प्लेटफॉर्म (इंटेल / एएमडी, ब्लू जीन और जीपीयू) के लिए सही परिमाण है।

अनुमानित लागत अनुमान प्रति कोर

[2011/2012 इंटेल और एएमडी-आधारित मशीनों के लिए दिशानिर्देश]

  • 0.05 एनएस: डेटा निर्भरता और interleavedly के बिना एक वेक्टर कोड के हिस्से के रूप में एक डबल सटीक फ़्लोटिंग पॉइंट ऑपरेशन करने का समय
  • 0.2 ns: वेक्टर या डेटा निर्भरता के बिना एक गैर-वेक्टरकृत फ्लोटिंग पॉइंट ऑपरेशन करने का समय
  • 0.4 ns: वेक्टर या डेटा निर्भरता के बिना एक नॉन-वेक्टराइज़्ड फ़्लोटिंग पॉइंट ऑपरेशन करने का समय, लेकिन बिना इंटरलीव्ड के गुणा / जोड़ (1 घड़ी चक्र)
  • 0.80.4 से ns: L1 कैश के संदर्भ में विलंबता0.8
  • 2 ns: फ्लोटिंग पॉइंट ऑपरेशन की विलंबता (वेक्टरकृत या नहीं)
  • 3 से ns: पूरी तरह से पूर्वनिर्मित और पूरी तरह से उपयोग की गई धारा के हिस्से के रूप में मेमोरी से एक डबल सटीक मूल्य लोड करने का समय5
  • 3 से ns: अप्रत्यक्ष फ़ंक्शन कॉल (वर्चुअल विधि या फ़ंक्शन पॉइंटर, बिना रजिस्टर दबाव)5
  • 5 एनएस: सशर्त शाखा गलत भविष्यवाणी
  • 84 से एनएस: एक डिवीजन के लिए समय (वेक्टर किए गए या नहीं, अन्य अन्य निर्देशों के साथ समवर्ती नहीं चल सकता है)8
  • 12 ns: L1 कैश स्थानीय L2 से संतुष्ट है
  • 12 ns: सबसे अच्छा मामला तुलना-और-स्वैप या भ्रूण-और-परमाणु निर्देश जोड़ें
  • ५०30 - एनएस: एल 1 कैश मिस या परमाणु निर्देश लिखें जिसमें कैश लाइन स्थानीय रूप से उपलब्ध है, लेकिन वर्तमान कोर को विशेष एक्सेस प्राप्त करना है50
  • 100 ns: कैश-मिस या परमाणु निर्देश ऑफ-सॉकेट या मेमोरी से संतुष्ट
  • 1 μ103 ns ( s): एक फैंसी नेटवर्क के लिए हार्डवेयर नेटवर्क विलंबता1 μ
  • 10 μ104 ns ( s): नेटवर्क के लिए अच्छी तरह से मैप किए जाने पर कम-डेटा पड़ोसी विनिमय10 μ
  • 106 एनएस (1 एमएस): समय (प्रति प्रक्रिया) एक समानांतर फाइल सिस्टम पर एक फ़ाइल बनाने के लिए
  • 2106 ns (2 एमएस): MPI_Allreduceएक बड़ी मशीन पर छोटा डेटा (जैसे एक आदर्श या डॉट उत्पाद)
  • 107 एनएस (10 एमएस): स्थानीय डिस्क की तलाश
  • 5108 एनएस (500 एमएस): सभी उपलब्ध स्मृति को फिर से लिखने का समय
  • 1.81012 ns (0.5 घंटा): डिस्क पर संपूर्ण मशीन स्थिति की जांच करने का समय

आगे की पढाई


मुझे यह जानकारी वास्तव में उपयोगी लगी। वैसे, आपको यह डेटा कहां से मिला? मैं हवाला देते हुए संदर्भ ढूंढ रहा हूं।
एल्डिला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.