मुझे एक प्रोग्राम को अनुकूलित करने में कठिनाई हो रही है जो कि इसके अधिकांश कार्यों के लिए ad
एस conjugateGradientDescent
फ़ंक्शन पर निर्भर है।स्वचालित भेदभाव से अधिक प्रदर्शन कैसे प्राप्त करें?
असल में मेरा कोड old papers code का अनुवाद है जो मैटलैब और सी में लिखा गया है। मैंने इसे माप नहीं लिया है, लेकिन यह कोड प्रति सेकंड कई पुनरावृत्तियों पर चल रहा है। मेरा यात्रा प्रति कुछ मिनटों के अंतराल में है ...
कोड इस खजाने में उपलब्ध है:
प्रश्न में कोड का पालन करके चलाया जा सकता है ये आदेश:
$ cd aer-utils
$ cabal sandbox init
$ cabal sandbox add-source ../aer
$ cabal run learngabors
जीएचसी का उपयोग करना सुविधाओं की रूपरेखा रहा है मैं पुष्टि की है कि वंश हिस्सा है कि समय के सबसे अधिक लेने वास्तव में है:
(इंटरैक्टिव संस्करण यहाँ: https://dl.dropboxusercontent.com/u/2359191/learngabors.svg)
-s
मुझे बता रहा है कि उत्पादकता काफी है कम:
Productivity 33.6% of total user, 33.6% of total elapsed
मैं दो चीजें हैं जो उच्च प्रदर्शन को जन्म दे सकता देखते हैं क्या इकट्ठे हुए हैं से:
अनबॉक्सिंग: वर्तमान में मैं कस्टम मैट्रिक्स कार्यान्वयन (
src/Data/SimpleMat.hs
में) का उपयोग करता हूं। मैट्रिस के साथ काम करने के लिए यह एकमात्र तरीका था जिसे मैंad
प्राप्त कर सकता था (देखें: How to do automatic differentiation on hmatrix?)। मेरा अनुमान है किnewtype Mat w h a = Mat (Unboxed.Vector a)
जैसे मैट्रिक्स प्रकार का उपयोग करके अनबॉक्सिंग और संलयन के कारण बेहतर प्रदर्शन प्राप्त होगा। मुझे some code मिला है जिसमेंad
अनबॉक्स किए गए वैक्टर के लिए उदाहरण हैं, लेकिन अब तक मैं इन्हेंconjugateGradientFunction
के साथ उपयोग करने में सक्षम नहीं हूं।मैट्रिक्स डेरिवेटिव: एक ईमेल मैं बस पल एडवर्ड कहा गया है कि यह
Forward
उदाहरणों से भरा मैट्रिक्स के बजाय मैट्रिक्स प्रकार के लिएForward
उदाहरणों का उपयोग करने के बेहतर होगा पर नहीं मिल सकते हैं। मुझे यह पता चल गया है कि इसे कैसे प्राप्त किया जाए, लेकिन अभी तक यह पता लगाना है कि मैं इसेad
एस प्रकार वर्गों के संदर्भ में कैसे कार्यान्वित करता हूं।
यह शायद एक सवाल है कि बहुत विस्तृत इतने पर जवाब देना, इसलिए यदि आप मुझे यहाँ मदद करने के लिए तैयार हैं, Github पर मुझसे संपर्क करने के लिए स्वतंत्र महसूस होती है।
दर्शकों के लिए प्रश्न: क्या कैबल रन हुड के नीचे रनहास्केल की तरह कुछ उपयोग करता है, यानी समस्या का हिस्सा है कि इस कोड को संकलित करने के बजाय व्याख्या किया जा रहा है? –
@ जॉनएफ.मिलर 'कैबल रन' संकलित कोड चलाता है। जीएचसीआई (यानी उपयोग ': मुख्य') से एक ही चीज़ चलाना भी धीमा है। – fho