2009-08-03 9 views
7

डबलिन के ट्रिनिटी कॉलेज से दिलचस्प कागज:
AES Encryption Implementation and Analysis on Commodity Graphics Processing Unitsक्या मैं .NET से एईएस एन्क्रिप्शन करने के लिए जीपीयू का फायदा उठा सकता हूं? यदि हां, तो कैसे?

उनकी तकनीक GPU भर्ती सांख्यिक एईएस के लिए आवश्यक रूपांतरण करने के लिए ओपन उपयोग करता है।

एक प्रबंधित .NET लाइब्रेरी के माध्यम से - इस क्षमता को निष्पादित करने के लिए यह कितना मुश्किल होगा - स्ट्रीमिंग एन्क्रिप्शन?

मैं कैसे शुरू करूं? संकेत? उदाहरण?

EDIT: किसी को भी CUDA या त्वरक का उपयोग करने से संबंधित अनुभव हैं?

+0

दिलचस्प ... :) –

उत्तर

4

आप माइक्रोसॉफ्ट की Accelerator लाइब्रेरी का उपयोग कर सकते हैं। यह आपको .NET के माध्यम से GPU तक पहुंच प्रदान करता है।

काम को देखने के बाद और अधिक आवश्यक है, यह एक बहुत ही गैर-तुच्छ बात है (जब तक आप एईएस एल्गोरिदम को फिर से लिखना पसंद नहीं करते)। हालांकि यह संभव है।

अन्य सी # एपीआई बाहर हो सकता है, लेकिन एक मैं आया था Bouncy Castle API था। आपको क्या करना होगा माइक्रोसॉफ्ट के एक्सेलेरेटर एपीआई लेना और एईएस एल्गोरिदम के स्रोत कोड के भीतर कहीं भी गणित ऑपरेशन का उपयोग करना है।

+0

एक अच्छी संभावना की तरह लगता है। कोई उदाहरण मिला? – Cheeso

3

मैं सुझाव देता हूं कि एक CUDA/(C++/cli) कार्यान्वयन के आसपास एक प्रबंधित रैपर बनाना या cuda.net का उपयोग करके सब कुछ करने के लिए लेकिन कर्नेल स्वयं सी # में है। उच्च स्तर की भाषा में वास्तविक कर्नेल कार्यान्वयन करने का कोई तरीका नहीं है, सीयूडीए के साथ आपको सी का उपयोग करने की आवश्यकता है, ओपनग्ल/डायरेक्टक्स के साथ आपको शेडर्स का उपयोग करने की आवश्यकता है। प्रारंभ करने के लिए या तो cuda.net पर एक नज़र डालें या CUDA SDK और उदाहरणों को gpgpu प्रोग्रामिंग के लिए परिचय प्राप्त करने के लिए डाउनलोड करें।

+0

यहां पहले से ही एक CUDA.NET wrapper है: http://www.hoopoe-cloud.com/Solutions/CUDA.NET/Default.aspx –

+0

मैंने एक रैपर का उपयोग करने के लिए नहीं कहा CUDA, लेकिन एक CUDA _implementation_ के चारों ओर एक रैपर। अंतर महत्वपूर्ण है क्योंकि यदि आप cuda.net का उपयोग करते हैं तो आप बहुत सी चीजें करने के लिए समाप्त होते हैं जो सी/सी ++ में बहुत आसान है। मुझे cuda.net के साथ भी बहुत परेशानी थी, कई नमूने भी काम नहीं करते हैं। इसके अलावा आपको सी # में बहुत मेमोरी/बफर प्रबंधन करना होगा, जो सी/सी ++ में आमतौर पर आसान होता है। आपको प्रबंधित मेमोरी (कोई पगेलॉक मेमोरी, इस प्रकार बहुत कम मेमोरी ट्रांसफर प्रदर्शन) या अप्रबंधित मेमोरी (यदि आप सी # में काम करना चाहते हैं तो अधिक ओवरहेड) के बीच भी चयन करना होगा। –

2

एक और विकल्प Brahma (वेबसाइट पर एटीएम लगता है)।

वेब साइट उद्धरण:

ब्रह्मा क्या है?

ब्रह्मा विभिन्न प्रोसेसर पर समांतर स्ट्रीमिंग कंप्यूटेशंस के लिए उच्च-स्तरीय पहुंच प्रदान करने के लिए .NET 3.5 ढांचे (सी # 3.0 में) के लिए लिखी एक ओपन-सोर्स लाइब्रेरी है। कृपया इस समय ध्यान दें कि ब्रह्मा के पास एक जीपीयू प्रदाता है (और इसका ध्यान जीपीजीपीयू है), इसे किसी भी प्रकार के प्रोसेसर पर चलाने के लिए अनुकूलित किया जा सकता है।

मैं ब्रह्मा के साथ क्या कर सकता हूं?

ब्रह्मा 2.0 डेटा के स्ट्रीमिंग परिवर्तन को निर्दिष्ट करने के लिए सी # 3.0 के नए LINQ वाक्यविन्यास का उपयोग करता है। ब्रह्मा का उपयोग करके, आप GPU पर चलने वाले बयान और एक ही विधि के अंदर CPU पर चलने वाले बयान मिश्रण कर सकते हैं! पूरी तरह से कोई गोंद कोड आवश्यक नहीं है, सीपीयू संचालन के साथ एक जटिल मल्टीपास जीपीयू गणना, कोड की कुछ पंक्तियों के साथ किया जा सकता है। आवश्यक सभी गोंद और शेडर कोड स्वचालित रूप से ब्रह्मा द्वारा उत्पन्न होता है। आपको बस इतना करना है कि उच्च स्तरीय .NET कोड लिखें।

मैंने इसका उपयोग नहीं किया है, लेकिन मैंने हाल ही में .NET चट्टानों पर इसके बारे में podcast की बात सुनी है। यदि आप GPU शेडर भाषा सीखना नहीं चाहते हैं तो यह उपयोग करने के लिए एक अच्छी लाइब्रेरी की तरह लगता है।

यहां sourceforge link है।

0

जो भी आप जीपीयू को सी # एकीकृत करने के लिए उपयोग करते हैं, आपको एईएस के सीयूडीए कार्यान्वयन का उपयोग करना चाहिए। वे वहां सबसे तेज़ हैं। सबसे तेज़ कार्यान्वयन ऐसा लगता है कि यह उन लोगों से आता है जो आपने लिंक किए हैं - Trinity group। मॉडर्न ग्राफिक्स हार्डवेयर पेपर पर प्रैक्टिकल सममित कुंजी क्रिप्टोग्राफी देखें।

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