मैं निम्नलिखित छोटे अजगर विधि है कि दूर प्रदर्शन हॉटस्पॉट से मिल गया है (मेरे प्रोफाइलर के अनुसार,> निष्पादन समय यहां बीता का 95%) एक बहुत बड़ा कार्यक्रम में:इस पायथन कोड को कैसे गति दें?
def topScore(self, seq):
ret = -1e9999
logProbs = self.logProbs # save indirection
l = len(logProbs)
for i in xrange(len(seq) - l + 1):
score = 0.0
for j in xrange(l):
score += logProbs[j][seq[j + i]]
ret = max(ret, score)
return ret
कोड पायथन के ज्योथन कार्यान्वयन में चलाया जा रहा है, सीपीथन नहीं, अगर यह मायने रखता है। 1,000 तत्वों के क्रम पर seq
एक डीएनए अनुक्रम स्ट्रिंग है। logProbs
शब्दकोशों की एक सूची है, प्रत्येक स्थिति के लिए एक। लक्ष्य seq
के बाद किसी भी लंबाई l
(10-20 तत्वों के क्रम पर) का अधिकतम स्कोर प्राप्त करना है।
मुझे एहसास है कि यह लूपिंग व्याख्या ओवरहेड के कारण अक्षम है और स्थिर रूप से संकलित/JIT'd भाषा में बहुत तेजी से एक बिल्ली होगी। हालांकि, मैं भाषा स्विच करने के लिए तैयार नहीं हूँ। सबसे पहले, मुझे उपयोग की जाने वाली पुस्तकालयों के लिए एक जेवीएम भाषा की आवश्यकता है, और इस तरह के मेरे विकल्पों को बाधित करता है। दूसरा, मैं इस कोड थोक को निम्न स्तर की जेवीएम भाषा में अनुवाद नहीं करना चाहता हूं। हालांकि, अगर आवश्यक हो तो मैं इस हॉटस्पॉट को किसी और चीज में फिर से लिखना चाहता हूं, हालांकि मुझे कोई संकेत नहीं है कि इसे कैसे इंटरफ़ेस करना है या ओवरहेड क्या होगा।
इस विधि के एकल-थ्रेडेड धीमेपन के अलावा, मैं प्रोग्राम को समांतरता के संदर्भ में पिछले 4 CPUs को स्केल करने के लिए भी नहीं मिल सकता। यह देखते हुए कि मैंने अपने पूरे समय 10-लाइन हॉटस्पॉट में पोस्ट किया है, मैं यह नहीं समझ सकता कि बाधा क्या हो सकती है।
मैं आपके द्वारा उपयोग की जा रही डेटा संरचना के चारों ओर अपना सिर नहीं प्राप्त कर सकता। क्या आप 'seq' और' logProbs' का संक्षिप्त नमूना पोस्ट कर सकते हैं? – katrielalex
मेरा पहला विचार खराब था, इसलिए शायद इस पृष्ठ पर कुछ उपयोग हो सकता है: http://stackoverflow.com/questions/316410/is-there-a-good-numpy-clone-for-jython –
मेरा दूसरा विचार है पुनरावृत्ति को बरकरार रखना जैसे कि आप केवल एक बार सीक पर जाते हैं, लेकिन शायद इसका मतलब है कि लॉगप्रॉब्स और स्कोर अधिक जटिल हो जाते हैं, और वास्तव में काम को कम नहीं कर सकते हैं। –