मुख्य मेमोरी बैंडविड्थ माप

मैं मुख्य मेमोरी बैंडविड्थ को मापना चाहता हूं और पद्धति की तलाश करते समय, मैंने पाया कि,

  1. कई स्रोतों से गंतव्य तक बाइट कॉपी करने के लिए ' bcopy ' फ़ंक्शन का उपयोग करते हैं और फिर उस समय को मापते हैं जिसे वे बैंडविड्थ के रूप में रिपोर्ट करते हैं।
  2. ऐसा करने के अन्य तरीके आवंटित करना और सरणी करना और सरणी के माध्यम से चलना है (कुछ तरफ से) - यह मूल रूप से पूरे सरणी को पढ़ने का समय देता है।

मैंने 1 जीबी के डेटा आकार के लिए (1) करने की कोशिश की और मुझे मिली बैंडविड्थ '700 एमबी/सेकंड' है (मैंने प्रतिलिपि के लिए समाप्त चक्रों की संख्या गिनने के लिए rdtsc का उपयोग किया था)। लेकिन मुझे संदेह है कि यह सही नहीं है क्योंकि मेरी रैम कॉन्फ़िगरेशन निम्नानुसार है:

  1. गति: 1333 मेगाहर्ट्ज
  2. बस चौड़ाई: 32 बिट

विकिपीडिया के अनुसार, सैद्धांतिक बैंडविड्थ की गणना निम्नानुसार की जाती है:

<�पी> घड़ी की गति * बस चौड़ाई * # बिट प्रति घड़ी चक्र प्रति लाइन (2 डीडीआर 3 के लिए   राम) 1333 मेगाहर्ट्ज * 32 * 2 ~ = 8 जीबी/सेकंड।

तो मेरा अनुमानित बैंडविड्थ से बिल्कुल अलग है। क्या मैं गलत कर रहा हूँ के बारे में कोई विचार?

=========

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

2
आप वर्तमान मशीनों पर कैशिंग के महत्व को भूल गए हैं। और आप अपनी मेमोरी बैंडविड्थ को कैसे परिभाषित करते हैं? एक प्रोग्रामर के दृष्टिकोण से, यह अनिवार्य रूप से memcpy क्या हो रहा है। इसके अलावा, आपके पास शायद आपकी मशीन पर चल रही अन्य प्रक्रियाएं हैं (इसलिए अतिरिक्त संदर्भ स्विच आदि)। मैं समझ नहीं पा रहा हूं कि आप वास्तव में मापने के लिए क्या चाहते हैं !!
जोड़ा लेखक Basile Starynkevitch, स्रोत
बेसिल की टिप्पणी इस मामले के दिल में जाती है ... आधुनिक उपभोक्ता पीसी बेहद जटिल जानवर हैं और जो प्रदर्शन आप देखते हैं उस पर निर्भर करता है कि आप क्या कर रहे हैं। कैश के कई स्तर हैं; शाखा-भविष्यवाणी, सीपीयू में अनुमान लगाया गया पाइपलाइनों को निष्पादित करना; व्यवधान; अन्य प्रक्रियाएं; डीएमए परिधीय (एकाधिक!) बसों का उपयोग करना चाहते हैं; आदि ... इस सवाल से मेरे ऐप्पल पर बहुत अधिक समझ हो गई होगी [+।
जोड़ा लेखक dmckee, स्रोत

1 उत्तर

मैं बीसीपी की प्रभावशीलता पर टिप्पणी नहीं कर सकता, लेकिन सबसे सरल दृष्टिकोण यह है कि आपने जो दूसरी विधि कहा है (1 के साथ)। इसके अतिरिक्त, आप अपनी मेमोरी बैंडविड्थ समीकरण में बाइट्स के साथ भ्रमित बिट्स हैं। 32 बिट्स = 4bytes। आधुनिक कंप्यूटर 64 बिट चौड़ी मेमोरी बसों का उपयोग करते हैं। तो आपकी प्रभावी स्थानांतरण दर (डीडीआर 3 तकनीक मानते हुए)

1333 मेगाहर्ट्ज * 64 बिट/(8 बिट/बाइट) = 10666 एमबी/एस (पीसी 3-10666 के रूप में भी वर्गीकृत)

1333 मेगाहट्र्ज में पहले से ही 2 स्थानांतरण/घड़ी है।

Check out the wiki page for more info: http://en.wikipedia.org/wiki/DDR3_SDRAM

अपने परिणामों के बारे में, सरणी पहुंच के साथ पुनः प्रयास करें। मॉलोक 1 जीबी और पूरी चीज को पार करें। आप सरणी के प्रत्येक तत्व को जोड़ सकते हैं और इसे प्रिंट कर सकते हैं ताकि आपका कंपाइलर ऐसा न हो कि यह मृत कोड है।

कुछ इस तरह:

double time;
int size = 1024*1024*1024;
int sum;
*char *array = (char*)malloc(size);
//start timer here
for(int i=0; i < size; i++)
  sum += array[i];
//end timer
printf("time taken: %f \tsum is %d\n", time, sum);
0
जोड़ा