2015-07-19 8 views
8

क्या ओपनसीएल का उपयोग करना संभव है लेकिन आर कोड के साथ? मुझे अभी भी ओपनसीएल और जीपीयू प्रोग्रामिंग की अच्छी समझ नहीं है।आर कोड के साथ आर में सरल ओपनसीएल उदाहरण?

aaa <- function(x) mean(rnorm(1000000)) 

sapply(1:10, aaa) 

मुझे पसंद है कि मैं एक तरह से lapply के लिए एक स्थानापन्न के रूप में dropin mclapply उपयोग कर सकते हैं: उदाहरण के लिए, मैं निम्नलिखित आर कोड है लगता है। ओपनसीएल के लिए ऐसा करने का कोई तरीका है? या ओपनसीएल को mclapply के लिए बैकएंड के रूप में उपयोग करने के लिए? मेरा अनुमान है कि यह संभव है क्योंकि मैं नहीं किया है एक उदाहरण ढूँढने में सक्षम नहीं किया गया है, इसलिए मैं दो प्रश्न हैं:

  1. यह संभव है और यदि ऐसा है तो आप ऊपर मेरी समारोह aaa का उपयोग कर एक पूर्ण उदाहरण दे सकते हैं?
  2. यदि यह संभव नहीं है, तो क्या आप कृपया बता सकते हैं क्यों? मैं जीपीयू प्रोग्रामिंग के बारे में ज्यादा नहीं जानता। मैं जीपीयू को सीपीयू की तरह देखता हूं, तो मैं समानांतर में आर कोड क्यों नहीं चला सकता?

उत्तर

2

यह संभव नहीं है क्योंकि GPU CPUs से भिन्न रूप से काम करते हैं जिसका अर्थ है कि आप उन्हें वही निर्देश नहीं दे सकते हैं जिन्हें आप एक सीपीयू देंगे।

एनवीडिया सीपीयू और जीपीयू प्रसंस्करण के बीच अंतर का वर्णन करने के लिए this video के साथ एक अच्छा शो डालता है। अनिवार्य रूप से अंतर यह है कि जीपीयू आमतौर पर परिमाण के क्रम से, सीपीयू की तुलना में अधिक कोर होते हैं।

आपका उदाहरण वह है जिसे GPU कोड तक बढ़ाया जा सकता है क्योंकि यह अत्यधिक समानांतर है।

यहाँ यादृच्छिक संख्या बनाने के लिए (हालांकि वे सामान्य रूप से वितरित नहीं कर रहे हैं) http://cas.ee.ic.ac.uk/people/dt10/research/rngs-gpu-mwc64x.html

एक बार जब आप यादृच्छिक संख्या आप उन्हें टुकड़ों में टूट सकता बनाने और उसके बाद समानांतर में हिस्सा में से प्रत्येक के योग और फिर जोड़ने के कुछ कोड है कुल योग प्राप्त करने के लिए भागों की रकम Is it possible to run the sum computation in parallel in OpenCL?

मुझे एहसास है कि आपका कोड यादृच्छिक संख्या वेक्टर और इसके योग को धारावाहिक और समांतर में बनाएगा जो ऑपरेशन 10 गुना है लेकिन GPU प्रसंस्करण के साथ, केवल 10 कार्य नहीं हैं कुशल है क्योंकि आप इतने सारे कोर निष्क्रिय छोड़ देंगे।

3

मैं High Performance Computing CRAN task view पर देखकर शुरू करूंगा, विशेष रूप से समांतर कंप्यूटिंग: GPUs अनुभाग।

वहां सूचीबद्ध कई पैकेज हैं जो विशिष्ट कार्यों के लिए जीपीजीपीयू का लाभ उठाते हैं जो खुद को बड़े पैमाने पर समानांतर (जैसे gputools, HiPLARM) में उधार देते हैं। इनमें से अधिकतर ओपनसीएल के बजाय एनवीआईडीआईए का स्वयं कायूडा का उपयोग करते हैं।

वहाँ भी एक अधिक सामान्य OpenCL पैकेज है, लेकिन यह कैसे OpenCL कोड अपने आप को लिखने के लिए सीखने के लिए आप की आवश्यकता है, और केवल आर

से कि कोड के लिए एक इंटरफेस प्रदान करता है