2012-12-23 12 views
6

में बराबर समतुल्य मैं पाइथन में फिट वैल्यू इटरेशन (एफवीआई) निष्पादित करने की कोशिश कर रहा हूं (जिसमें टुकड़े की रैखिक इंटरपोलेशन का उपयोग करके 5 आयामी फ़ंक्शन का अनुमान लगाया जा रहा है)।scipy.interpolate.griddata CUDA

scipy.interpolate.griddata इसके लिए पूरी तरह से काम करता है। हालांकि, मुझे इंटरपोलेशन रूटीन को कई हज़ार बार कॉल करने की आवश्यकता है (क्योंकि एफवीआई एक एमसी आधारित एल्गोरिदम है)।

तो मूल रूप से, उन बिंदुओं का सेट जहां कार्य ज्ञात है, स्थिर है (और बड़े - 32k कहें), लेकिन जिन बिंदुओं को मुझे अनुमानित करने की आवश्यकता है (जो मूल सेट के छोटे परेशान हैं) बहुत बड़ा है (32k x 5000 कहते हैं)।

क्या scipy.interpolate.griddata को कार्यान्वित किया गया है जो कि CUDA को पोर्ट किया गया है? वैकल्पिक रूप से, किसी भी तरह की गणना को गति देने का कोई तरीका है?

धन्यवाद।

उत्तर

1

टुकड़ा वार रैखिक प्रक्षेप के लिए, डॉक्स का कहना है कि scipy.interpolate.griddatascipy.interpolate.LinearNDInterpolator के तरीकों, जो बारी में qhull का उपयोग करता है इनपुट अंकों की डेलॉनाय tesellation करने के लिए उपयोग करता है, तो मानक barycentric प्रक्षेप, प्रत्येक बिंदु के लिए आप के लिए है, जहां प्रदर्शन प्रत्येक बिंदु के भीतर हाइपरेट्राहेड्रॉन के अंदर निर्धारित करें, उसके बाद barycentric coordinates का उपयोग हाइपरटेथेरेडॉन नोड मानों के लिए इंटरपोलेशन भार के रूप में करें।

टेस्सेलेशन शायद समानांतर करना मुश्किल है, लेकिन आप scipy.spatial.Delaunay के साथ सीपीयू संस्करण तक पहुंच सकते हैं। अन्य दो चरणों को आसानी से समांतर किया जाता है, हालांकि मुझे किसी भी स्वतंत्र रूप से उपलब्ध कार्यान्वयन के बारे में पता नहीं है।

यदि आपके ज्ञात-फ़ंक्शन पॉइंट नियमित ग्रिड पर हैं, तो here वर्णित विधि CUDA में लागू करने के लिए विशेष रूप से आसान है, और मैंने सार्वजनिक रूप से उपलब्ध होने के बावजूद इसके वास्तविक कार्यान्वयन के साथ काम किया है। मैं अंत में अपने आप को काम के सबसे कर रही अंत था -

तो मुझे डर है कि तुम ... काम अपने आप में से ज्यादातर के क्या करना है

+0

हाय, हाँ करने जा रहे हैं रहा हूँ। मैंने scipy.spatial.Delauny में find_simplex के कार्यान्वयन को देखा और पाया कि बुनियादी विचार को पर्याप्त रूप से कई बिंदुओं के लिए आसानी से समांतर किया जा सकता है। तो मूल रूप से मैं 2 लूप चलाता हूं - प्रत्येक एमसी नमूना के लिए सरल को ढूंढने (और स्टोर) करने के लिए और एक संग्रहीत सिम्प्लेक्स को देखने और इंटरपोलेशन के लिए अपने बैरेंट्रिक निर्देशांक की गणना करने के लिए। यह वीडियो मेमोरी द्वारा सीमित है लेकिन यह बहुत तेज़ है। – user1726633