क्या VHDL में यह मैट्रिक्स-वेक्टर गुणन कार्य समानांतर है?


9

मेरे पास निम्न VHDL फ़ंक्शन है जो किसी दिए गए mxn मैट्रिक्स aको nx1 वेक्टर द्वारा गुणा करता है b:

function matrix_multiply_by_vector(a: integer_matrix; b: integer_vector; m: integer; n: integer)
return integer_vector is variable c : integer_vector(m-1 downto 0) := (others => 0);
begin
    for i in 0 to m-1 loop
        for j in 0 to n-1 loop
            c(i) := c(i) + (a(i,j) * b(j));
        end loop;
    end loop;
    return c;
end matrix_multiply_by_vector;

यह अच्छी तरह से काम करता है लेकिन यह वास्तव में हार्डवेयर में क्या लागू करता है? विशेष रूप से, मैं जो जानना चाहता हूं वह यह है कि यह महसूस करने के लिए पर्याप्त स्मार्ट है कि यह लूप के लिए आंतरिक को समानांतर कर सकता है, अनिवार्य रूप से मैट्रिक्स की प्रत्येक पंक्ति के लिए एक डॉट उत्पाद की गणना कर सकता है। यदि नहीं, तो मैट्रिक्स-वेक्टर गुणन को समानांतर करने का सबसे सरल (यानी अच्छा वाक्यविन्यास) तरीका क्या है?


1
यदि यह नहीं था, तो आपको सभी प्रकार की मेमोरी और क्रमबद्ध रूप से सभी मानों को लोड करना होगा और उन्हें पाइपलाइन स्टाइल में "निष्पादित" करना होगा
वोल्टेज स्पिक

जवाबों:


9

'हार्डवेयर' (VHDL या वेरिलॉग) में सभी लूपों को अनियंत्रित किया जाता है और समानांतर में क्रियान्वित किया जाता है।

इस प्रकार न केवल आपका आंतरिक लूप, बल्कि आपका बाहरी लूप भी अनियंत्रित होता है।

यही कारण है कि संकलन समय पर लूप का आकार ज्ञात होना चाहिए। जब लूप की लंबाई अज्ञात होती है तो संश्लेषण उपकरण शिकायत करेगा।


यह एक SW भाषा से आने वाले शुरुआती लोगों के लिए एक प्रसिद्ध जाल है। वे बदलने की कोशिश करते हैं:

int a,b,c;
   c = 0;
   while (a--)
     c +=  b;

वीएचडीएल / वेरिलॉग हार्डवेयर को। समस्या यह है कि यह सब सिमुलेशन में ठीक काम करता है। लेकिन संश्लेषण उपकरण को योजक उत्पन्न करने की आवश्यकता है: c = b+b+b+b...b;

इसके लिए टूल को यह जानना होगा कि कितने ऐड बनाने हैं। अगर aलगातार ठीक है! (भले ही यह 4.000.000 है। यह फाटकों से बाहर चलेगा, लेकिन यह कोशिश करेगा!)

लेकिन अगर aएक चर यह खो गया है।


इस मामले में यह सिर्फ गुणा है, इसलिए सिर्फ गुणक हो सकता है और इसलिए परिवर्तनशील हो सकता है ...
हैरी स्वेन्सन

1

यह कोड दोनों छोरों को समानांतर करेगा, क्योंकि आपने प्रसंस्करण के किसी भी सबसेट को नियंत्रित करने के लिए एक घटना को परिभाषित नहीं किया है। लूप्स केवल उतने ही हार्डवेयर उत्पन्न करते हैं जितने की उन्हें फंक्शन उत्पन्न करने की आवश्यकता होती है; आपको एक प्रक्रिया की आवश्यकता है ।

एक प्रक्रिया में संवेदनशीलता सूची होती है जो वीएचडीएल (या सिंथेसाइज़र) को बताती है कि जब तक सूची में एक नोड नहीं बदलता है तब तक यह प्रक्रिया लागू नहीं होती है। इसका उपयोग कुंडी को संश्लेषित करने के लिए किया जा सकता है, और शुद्ध दहनशील कार्यान्वयन के दायरे से परे इसका विस्तार किया जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.