2011-03-09 10 views
8

मैंने देखा कि एक जीपीयू में सैकड़ों कोर हो सकते हैं ताकि समांतर गणना को बड़े पैमाने पर उनके साथ बढ़ाया जा सके। ऐसा लगता है कि एक ओएस कर्नेल में, त्वरण के लिए कोई समांतर एल्गोरिदम का उपयोग नहीं किया जाता है।क्या GPU पर ओएस कर्नेल-स्तरीय कंप्यूटेशंस चलाने के लिए यह समझ में आता है?

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

तो ओएसई अपने प्रदर्शन और थ्रूपुट को बेहतर बनाने के लिए जीपीयू का उपयोग क्यों नहीं करते? क्या GPU पर ओएस कंप्यूटेशंस चलाने के लिए यह समझ में आता है?

उत्तर

17

जीपीयू समांतर प्रसंस्करण अनुप्रयोगों के लिए आपको सटीक उसी ऑपरेशन सैकड़ों बार चलाने की आवश्यकता होती है। इसके अलावा, आप सीमित कर रहे हैं कि आप कौन से परिचालन कर सकते हैं - शाखाएं आमतौर पर एक विकल्प नहीं होती हैं, न ही पॉइंटर चेन की ओर बढ़ रही हैं।

अधिकांश कर्नेल ऑपरेशन इस मॉडल में फिट नहीं होते हैं; कर्नेल क्या कर रहा है, लॉकिंग सहित पॉइंटर्स के माध्यम से संसाधनों का प्रबंधन करना है। यह जीपीयू मॉडल में बिल्कुल फिट नहीं है। अन्य कार्यों के लिए के रूप में आप का हवाला देते हैं:

  • क्रिप्टोग्राफी: GPUs दरार को क्रिप्टोग्राफिक सिफर की कोशिश कर के लिए महान हैं, लेकिन वह नहीं गिरी का काम है। यह आमतौर पर एक क्रिप्टो ऑपरेशन चलाता है। इस मामले में, सीपीयू बहुत तेज है, क्योंकि इसे केवल एक बार करने की जरूरत है।
  • प्रसंस्करण नेटवर्क यातायात: पैकेट अलग-अलग समय पर पहुंचते हैं, और कम विलंबता के साथ संसाधित होने की आवश्यकता होती है। GPU स्टेटलेस फ़ायरवॉल प्रोसेसिंग करने में सक्षम हो सकता है, लेकिन आपको पैकेट को बैच करना होगा और एक लाभ होने के लिए इसे एक समय में काम करना होगा - इससे विलंबता और जिटर दर्द होता है, और इसलिए नौकरी सीपीयू के लिए छोड़ दिया गया है। इसके अलावा, राज्यव्यापी ट्रैकिंग को साझा ट्रैकिंग तालिकाओं तक साझा, लॉक की आवश्यकता होती है, कुछ ऐसा GPU सक्षम नहीं है।
  • मेमोरी प्रबंधन: यह लॉकिंग के साथ एक सूचक-भारी ऑपरेशन है, और इस प्रकार कोई ऐसा नहीं है जो GPU भी दूरस्थ रूप से उपयुक्त है। इसके अलावा, विलंबता महत्वपूर्ण है, और एक जीपीयू को नौकरी भेजना बहुत विलंबता का तात्पर्य है।
  • खोज: आधुनिक ओएस कर्नेल खोज नहीं करते हैं। यह उपयोगकर्ताओं के लिए एक नौकरी है - और फिर, यह एक बहुत ही सूचक भारी काम है।

जीपीयू गणितीय कर्नेल के लिए उपयुक्त हैं जहां थ्रूपुट सर्वोपरि है और विलंबता मामूली समस्या है - संख्यात्मक सिमुलेशन, उस तरह की चीज। वे सामान्य रूप से डेटा प्रबंधन के लिए उपयुक्त नहीं हैं, या जहां विलंबता महत्वपूर्ण है - जो वास्तव में ओएस कर्नेल की तरह की चीजें हैं। यही कारण है कि ओएस आमतौर पर जीपीयू त्वरण का उपयोग नहीं करते हैं।

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

+0

धन्यवाद, मैं सहमत हूं कि विलंबता GPU कंप्यूटिंग की कमजोरी है। पैकेटशैडर सॉफ़्टवेयर सैकड़ों माइक्रोसॉन्ड विलंबता का दावा करता है, यह सुनिश्चित नहीं है कि यह अभी भी बहुत धीमा है? क्रिप्टोग्राफी, मुझे नहीं पता कि फ़ाइल सेवर्स एन्क्रिप्टेड एफएस/डिस्क का उपयोग करते हैं या नहीं, जीपीयू इस तरह के मामलों में मदद कर सकता है। पॉइंटर के बारे में, ऐसा लगता है कि CUDA 4.0 में एक एकीकृत स्मृति पता स्थान है जिसमें न केवल एकाधिक GPU स्मृति है, बल्कि मुख्य स्मृति भी, क्या इससे मदद नहीं मिलेगी? मुझे उत्सुकता है कि लोग कर्नेल, विशेष रूप से सुरक्षा चीजों में उपयोगी कार्यक्षमता क्यों नहीं डालते हैं, मुझे लगता है कि कर्नेल केवल एक चीज है जिसे हम भरोसा कर सकते हैं ... –

+0

हम कर्नेल पर भरोसा कर सकते हैं क्योंकि लोग इसे जितना संभव हो उतना कम करते हैं:) भले ही सर्वर एन्क्रिप्टेड डिस्क का उपयोग करता है, डिक्रिप्शन के लिए जीपीयू में एक एकल क्षेत्र भेजना सीपीयू पर करने से धीमा है। GPU के समांतरता के लिए उपयोगी होने के लिए पर्याप्त संचालन करना मुश्किल है। और यहां तक ​​कि यदि आपके पास एकीकृत पता स्थान है, तो GPUs को कई पॉइंटर एड्रेसिंग चरणों के लिए बस नहीं बनाया गया है। एक बार फिर, कर्नेल में सामान्य संचालन GPU की ताकत का लाभ लेने के लिए उपयुक्त नहीं हैं, इसलिए उन्हें GPU की कमजोरियों का पूर्ण प्रभाव मिलता है। – bdonlan

4

आपकी धारणा कि कर्नल समानांतर नहीं हैं गलत है। आधुनिक कर्नल बहु-कोर/मल्टी-थ्रेड सीपीयू को काफी अच्छी तरह से अनुकूलित कर चुके हैं और उस सम्मान में "समांतर" तरीके से काफी कुछ के साथ सौदा करते हैं।

जीपीयू के लिए, वे सीपीयू से संसाधित निर्देशों के संदर्भ में बहुत अलग हैं। विशेष रूप से वेक्टर फ्लोटिंग पॉइंट कंप्यूटेशंस के लिए अधिक अनुकूलित। लिनक्स कर्नेल अनिवार्य रूप से उस तरह के ऑपरेशन का उपयोग नहीं करता है। अपवाद पूरी तरह से क्रिप्टो और कुछ RAID कोड हैं जिन्हें वेक्टर-प्रकार ऑप्स (और शायद अन्य, लेकिन अभी भी बहुत सीमित) के लिए अनुकूलित किया जा सकता है।

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

+0

उद्धृत मुझे लगता है कि आधुनिक CPUs ओएस समानांतर प्रसंस्करण के लिए पर्याप्त कोर जरूरत नहीं है। एक ओएस कर्नेल अलग-अलग कोर के साथ कई नेटवर्क कतारों को संभाल सकता है, लेकिन कतारों की संख्या #cores द्वारा सीमित है। यह स्केलेबिलिटी और थ्रूपुट को सीमित करेगा। मैंने देखा कि GPU नेटवर्किंग पर एक प्रोजेक्ट है: पैकेटशेडर। यह जीपीयू पर आईपी फॉरवर्डिंग देखता है और बहुत तेज़ है। एक और मुद्दा यह है कि एकाधिक अनुरोधों को संसाधित करना समानांतर प्रसंस्करण नहीं है। ओपनएमपी जैसे समांतर कंप्यूटेशंस में, यह अक्सर एक अनुरोध को विभाजित करने और प्रत्येक कोर पर छोटे कार्यों को संभालने के लिए होता है। –

-1

हाँ, मैं मैट से सहमत हूं। आज की गणना दुनिया की बाधा वर्चुअल थ्रेड पर चल रही ऑपरेटिंग सिस्टम है। यह GPU का उपयोग करने वाले अनुप्रयोग बनाने के लिए, उपयोगकर्ता स्थान में मांग बना रहा है। फिर भी कर्नेल अनुक्रमिक रूप से ओएस चलाता है। उदाहरण के लिए, खोज ऑपरेटिंग ओएस फीचर के रूप में एकीकृत है, जो अनुक्रमिक रूप से फ़ाइल सिस्टम तालिका की जांच करता है, या अनुक्रमण द्वारा और फिर बाइनरी खोज एल्गोरिदम का उपयोग करके खोज करता है। दोनों ऑपरेशन समय लेने वाले हैं। GPUs को आंशिक फ़ाइल सिस्टम तालिका क्यों न भेजें और खोज ऑपरेशन को फोर्क करें। प्रसंस्करण स्तर पर, अधिकांश ओएस ऑपरेशंस अंकगणित और तर्क गणनाओं के अलावा कुछ भी नहीं हैं और फिर भी ये ऑपरेशन सीपीयू के लिए इंतजार कर रहे हैं। यहां से संबंधित समस्या सीपीयू से जीपीयू और वापस सीपीयू से ऑपरेशन/मेमोरी भेजने और प्राप्त करने के लिए विलंबता शामिल है। इस विलंबता को कम करने के लिए बहुत अधिक शोध आवश्यक है। लेकिन वास्तव में समस्या हार्डवेयर विलंबता (सीपीयू और जीपीयू के बीच) नहीं है, लेकिन ओएस द्वारा इस विलंबता का अनुमान लगाने के लिए। ओएस को विलंबता का अनुमान लगाया जाना चाहिए और यह तय करना चाहिए कि सीपीयू में प्रसंस्करण बेहतर है या जीपीयू बेहतर है। यह फिर से हार्डवेयर मंच निर्भर है। इन समस्याओं को संबोधित और शोध किया जा सकता है। ओएस कंपनियों द्वारा अनुसंधान के लिए इसे सिर्फ बड़े निवेश की जरूरत है।

0

आधुनिक जीपीयू का उपयोग केवल ग्राफिक्स प्रोसेसिंग से अधिक के लिए किया जा सकता है; वे सामान्य उद्देश्य कार्यक्रम भी चला सकते हैं। हालांकि सभी प्रकार के कार्यक्रमों के लिए उपयुक्त नहीं है, वे कोड पर उत्कृष्टता प्राप्त करते हैं जो समानांतरता की उच्च डिग्री का उपयोग कर सकते हैं। तथाकथित `सामान्य प्रयोजन जीपीयू '(जीपीजीपीयू) गणना के अधिकांश उपयोग सिस्टम सॉफ्टवेयर के दायरे से बाहर हैं। हालांकि, सॉफ्टवेयर राउटर और एन्क्रिप्टेड नेटवर्क कनेक्शन पर हालिया काम ने उदाहरण दिया है कि जीपीजीपीयू को ऑपरेटिंग सिस्टम के दायरे में पारंपरिक रूप से कार्यों पर कैसे लागू किया जा सकता है। ये उपयोग केवल सतह खरोंच कर रहे हैं। सिस्टम-स्तरीय कार्यों के अन्य उदाहरण जो जीपीयू का लाभ उठा सकते हैं उनमें सामान्य क्रिप्टोग्राफी, पैटर्न मिलान, प्रोग्राम विश्लेषण, और सामान्य रूप से उपयोग किए जाने वाले एल्गोरिदम का त्वरण शामिल है।

से https://code.google.com/p/kgpu/

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

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