2012-02-22 11 views
24

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

उत्तर

26

निश्चित रूप से व्यवहार्य!

Bordeaux Threads project कई कार्यान्वयन के लिए थ्रेड प्राइमेटिव प्रदान करता है; मैं एसबीसीएल के कार्यान्वयन-विशिष्ट प्राइमेटिव्स के बजाय इसका उपयोग करने का सुझाव दूंगा (विशेष रूप से यदि आप एसबीसीएल पर नहीं हैं!)।

थ्रेड प्राइमेटिव्स बीटी द्वारा प्रदान किए जाते हैं, हालांकि, काफी प्राचीन हैं। मैंने Eager Future2 का उपयोग किया है और इसका आनंद लिया है जो वायदा का उपयोग करके समवर्ती सुविधाओं को प्रदान करने के लिए बीटी पर बनाता है। आप वायदा बना सकते हैं जो आलसी, तत्काल), या अनुमानित रूप से गणना की जाती है। सट्टा वायदा एक थ्रेड पूल द्वारा गणना की जाती है जिसका आकार अनुकूलित किया जा सकता है।

मैंने ईएफ 2 का उपयोग करके सीएल कार्यों के समानांतर संस्करण प्रदान करने के लिए a little project शुरू किया, लेकिन यह अभी तक केवल तीन कार्यों का है, इसलिए यह किसी के लिए बहुत अधिक उपयोग नहीं करेगा। मैं निश्चित रूप से अन्य कोडर का स्वागत करता हूं ताकि हम इसे हैक कर सकें और पुल अनुरोध सबमिट कर सकें, और मैं भविष्य में इसके बारे में और अधिक काम करने की उम्मीद करता हूं।

कई अन्य पुस्तकालय listed on Cliki हैं जिन्हें मैंने स्वयं नहीं किया है।

जहां तक ​​ट्यूटोरियल हैं, मुझे किसी के बारे में पता नहीं है, लेकिन प्रदान की गई समवर्ती सुविधाएं अन्य भाषाओं में भी मिलती हैं और अच्छे एल्गोरिदम और प्रथा आम तौर पर भाषा-विशिष्ट नहीं होती हैं।

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

+2

मैं भी PCALL की सलाह देते हैं (http://marijnhaverbeke.nl/pcall/) - एक बहुत ही सरल है, लेकिन समांतर (अधिकतर) स्वतंत्र गणनाओं के आयोजन के लिए उपयोगी पुस्तकालय। –

+0

ईएफ 2 पीसील का एक कांटा है। मैंने खुद पीसील का उपयोग नहीं किया है। –

+5

lparallel (http://lparallel.org/) एक महान समांतर प्रोग्रामिंग लाइब्रेरी है, चैनलों का समर्थन करता है, वायदा और बहुत कुछ। इसमें भाई पुस्तकालय भी है (एक ही एपीआई का उपयोग करके) - एलएफर्म, जो वितरित कंप्यूटिंग की अनुमति देता है। –

8

एसबीसीएल में कुछ बहुप्रचार समर्थन है। यह बहुत कम स्तर है और, मेरे ज्ञान के लिए, किसी समांतर एल्गोरिदम शामिल नहीं है। यह धागे बनाने की केवल सकारात्मकता है जो कुछ लैम्ब्डा फ़ंक्शन निष्पादित करता है और बाद में परीक्षण करता है अगर धागा समाप्त हो गया हो (इसमें शामिल हो)। मैंने अपने ब्लॉग पृष्ठों को महान गति के साथ उत्पन्न करने के लिए उस समर्थन का उपयोग किया (प्रत्येक पृष्ठ या पृष्ठों के सेट को एक अलग धागे में)। आप यहाँ कोड देख सकते हैं:

https://github.com/dsevilla/functional-mind-blog/blob/master/blog/process.lisp

eample के लिए, प्रत्येक पृष्ठ के लिए एक धागा पैदा हो गया था की तरह कुछ:

#+sbcl 
(defun generate-post-pages() 
    (map nil 
     #'(lambda (post) 
      (make-thread (lambda() (page-generation-function post)))) 
     *posts*)) 

तुम भी join-thread कर सकते हैं, और mutexes है, आदि आप पढ़ सकते हैं यहां प्रलेखन: SBCL Threading। हालांकि, यह बहुत कम स्तर है। आप समेकन के लिए क्लोजर की शानदार विशेषताओं को खो देंगे ...

4

यदि आप अलग-अलग लिस्पस के लिए बहु-थ्रेडिंग प्राइमेटिव्स में एकल पॉज़िक्स-थ्रेड-शैली इंटरफ़ेस की तलाश में हैं तो बोर्डो थ्रेड देखें।

यदि मैं एक विश्वसनीय मुक्त लिस्प कार्यान्वयन की तलाश में था, तो मैं सीसीएल से शुरू करूंगा और फिर एसबीसीएल का प्रयास करूंगा। मैं शेष के लिए लगभग सभी परीक्षण और एसबीसीएल और लिस्पॉर्क्स के लिए सीसीएल का उपयोग करता हूं।

सेडच की वायदा लाइब्रेरी को उच्च स्तरीय इंटरफ़ेस प्रदान करना चाहिए। एसबीसीएल की contrib निर्देशिका में विभिन्न उपयोगकर्ताओं से कुछ अन्य योगदान भी हैं।

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

3

लिस्पॉर्क्स 6 समवर्ती प्रोग्रामिंग के लिए प्राइमेटिव्स के एक अच्छे सेट के साथ आता है।

ध्यान दें कि मेरे ज्ञान सामान्य सामान्य लिस्प कार्यान्वयन के में एक समवर्ती कचरा कलेक्टर है।

LispWorks 6 के लिए प्रलेखन और बहु ​​

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