2012-02-27 15 views
8

मेरे पास इन्फिनिबैंड नेटवर्क से जुड़े कुछ मल्टी-कोर कंप्यूटर हैं। मैं रिमोट परमाणु संचालन के साथ साझा स्मृति के पूल पर कुछ कम विलंबता गणना करना चाहता हूं। मुझे पता है कि आरडीएमए जाने का रास्ता है। प्रत्येक नोड पर मैं डेटा साझा करने के लिए एक मेमोरी क्षेत्र (और सुरक्षा डोमेन) पंजीकृत करूंगा।आरडीएमए मेमोरी शेयरिंग

ऑनलाइन आरडीएमए उदाहरण अक्सर एकल-थ्रेडेड सर्वर और एकल-थ्रेडेड क्लाइंट के बीच एक कनेक्शन पर ध्यान केंद्रित करते हैं। अब मैं प्रत्येक इंफिनिबैंड नोड पर एक बहु थ्रेडेड प्रक्रिया करना चाहता हूं। मैं निम्नलिखित के बारे में बहुत हैरान हूँ ...

  1. कितने कतार जोड़े मैं n नोड्स और कुल में मीटर धागे के एक समूह के लिए प्रत्येक नोड पर तैयार करना चाहिए? अधिक विशिष्ट होने के लिए, एक ही नोड पर एकाधिक धागे एक ही कतार जोड़ी साझा कर सकते हैं?

  2. प्रत्येक नोड पर कितनी पूर्णता कतार तैयार की जानी चाहिए? मेरे पास प्रत्येक नोड पर रिमोट रीड/राइट/कैस ऑपरेशंस जारी करने वाले कई थ्रेड होंगे। अगर वे एक सामान्य समापन कतार साझा करना चाहते थे, तो पूरा होने की घटनाओं को मिश्रित किया जाएगा। अगर धागे की अपनी अलग-अलग समाप्ति कतार होती है, तो वास्तव में उनमें से बहुत सारे होंगे।

  3. क्या आप मुझे इस सॉफ़्टवेयर को लिखने के बजाय कोई मौजूदा पुस्तकालय रखने का सुझाव देते हैं? (हम्म, या मुझे इसे एक और ओपन-सोर्स लिखना चाहिए? :-)

आपके तरह के सुझावों के लिए धन्यवाद।

उत्तर

8

कम से कम लिनक्स पर, इन्फिनीबैंड क्रिया पुस्तकालय पूरी तरह से थ्रेड-सुरक्षित है। तो आप अपने मल्टी-थ्रेडेड ऐप में जितना चाहें उतने या कम कतार जोड़े (क्यूपी) का उपयोग कर सकते हैं - एकाधिक थ्रेड एक क्यूपी को सुरक्षित रूप से कार्य अनुरोध पोस्ट कर सकते हैं, बेशक आपको यह सुनिश्चित करना होगा कि बकाया की ट्रैकिंग अनुरोध, इत्यादि जो आप अपने आवेदन में करते हैं वह थ्रेड-सुरक्षित है।

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

सामान्य क्यूपी और सीक्यू में वास्तव में सीमित संसाधन नहीं हैं - आप परेशानी के बिना एक एकल नोड पर सैकड़ों या हजारों आसानी से प्राप्त कर सकते हैं। इसलिए आप अपने ऐप को कतारों की पूर्ण संख्या के बारे में ज्यादा चिंता किए बिना डिज़ाइन कर सकते हैं। यह कहना नहीं है कि आपको स्केलेबिलिटी के बारे में चिंता करने की ज़रूरत नहीं है - उदाहरण के लिए यदि आपके पास कतारों और कतारों के बहुत सारे बफर प्राप्त हैं, तो आप बफरिंग प्राप्त करने में बहुत अधिक मेमोरी जोड़ सकते हैं, ताकि आप समाप्त हो जाएं साझा प्राप्त कतार (SRQs) का उपयोग करने की आवश्यकता है।

आईबी का उपयोग करने वाले कई मिडलवेयर पुस्तकालय हैं; शायद एमपीआई (उदाहरण के लिए http://open-mpi.org/) सबसे प्रसिद्ध व्यक्ति है, और संभवतः यह मूल्यांकन करने लायक है कि इससे पहले कि आप चीजों को पुनर्निर्मित करने में बहुत दूर हो जाएं। एमपीआई डेवलपर्स ने आईबी/आरडीएमए का कुशलतापूर्वक उपयोग करने के बारे में बहुत सारे शोध भी प्रकाशित किए हैं, जो शायद आप अपने सिस्टम को बनाने का फैसला करते हैं, तो संभवत: बाहर निकलने के लायक हैं।

+0

और कतार जोड़े (क्यूपी) का स्रोत कोड, समापन कतार (सीक्यू) और साझा प्राप्त कतार (एसआरक्यू) को अपना खुद का लिखना है, या क्या मैं उनके कार्यान्वयन को तैयार कर सकता हूं (सर्वोत्तम अभ्यास के रूप में) और जहां वे कर सकते हैं लेना? – Alex

संबंधित मुद्दे