पुस्तक में कंप्यूटर सिस्टम्स: एक प्रोग्रामर परिप्रेक्ष्य, व्यायाम 5.5 कोड का एक टुकड़ा एक बहुपदमहत्वपूर्ण मार्ग का निर्धारण डेटा प्रवाह में
double poly(double a[], double x, int degree)
{
long int i;
double result = a[0];
double xpwr = x;
for (i = 1; i <= degree; i++) {
result += a[i] * xpwr;
xpwr = x * xpwr;
}
return result;
}
व्यायाम के मूल्य की गणना करने से पता चलता मानता है कि डबल-प्रेसिजन फ्लोटिंग-पॉइंट एडिशन और गुणा द्वारा आवश्यक घड़ी चक्र क्रमशः 3 और 5 होते हैं। पाठक समझाने के लिए क्यों मापा जाता सीपीई (साइकिल प्रति तत्व) मूल्य व्यायाम जवाब के अनुसार 5.
है कहा जाता है, प्रत्येक चरण में, हम चर xpwr
और result
, और संचालन हम की जरूरत है अद्यतन करने की आवश्यकता एक फ्लोटिंग प्वाइंट अलावा (result
के लिए) और एक फ्लोटिंग प्वाइंट गुणा (xpwr
के लिए) है, इसलिए बाद विलंबता पर हावी है, के कारण परम सीपीई 5.
होने के लिए लेकिन मुझे लगता है डाटा प्रवाह की तरह कुछ किया जाना चाहिए यह:
xpwr result
| |
+-----+ +--[load] |
| | | |
[mul] [mul] |
| | |
| +---+ +-----+
| | |
| [add]
| |
| +------+
| |
xpwr result
तो सबसे लंबा रास्ता xpwr
के पिछले मान से result
के नए मान से है, निष्पादन इकाइयों [mul]
और [add]
के माध्यम से जा रहा है। इसलिए सबसे लंबा समय 8 चक्र होना चाहिए।
मैं
- पूछने के लिए क्या वास्तव में एक महत्वपूर्ण मार्ग का अर्थ है करना चाहते हैं? और इसे कैसे निर्धारित करें?
- कौन सा उत्तर (मेरा और पुस्तक) अधिक उचित है?
सीपीयू, आर्किटेक्चर, निष्पादन इकाइयों, पाइपलाइन, फ्लोटिंग-पॉइंट इकाई के बारे में कोई स्पष्टीकरण की सराहना की जाएगी।
'xpwr = x * xpwr;' एकमात्र बयान है जो पुनरावृत्तियों में पूरी तरह से स्वतंत्र नहीं है, इसलिए यह 5-चक्र विलंबता है जो कंप्यूटर को तेजी से प्रसंस्करण से रोकता है। (बेशक, यह समांतरता का फायदा उठाने के लिए हार्डवेयर में पर्याप्त समर्थन मानता है।) एक सभ्य कंपाइलर यह पहचानकर बेहतर (कम से कम उच्च डिग्री के लिए) करने में सक्षम होगा कि xpwr गणना समानांतर हो सकती है - उदाहरण के लिए, x^2 की गणना करें दूसरा पुनरावृत्ति, x * x^2 और x^2 * x^2 (समानांतर में) दूसरे में, x^3 * x^2 और x^4 * x^2 तीसरे में, आदि xpwr आंशिक रूप से एक है * नाम * निर्भरता। किताब गलत लगता है। –