मान लें कि मेरे पास दो पूर्णांक arrays " बेवकूफ "- मुझे लगता है कि यह एक बढ़िया सवाल है! आप कहते हैं कि" जोड़ना "नहीं" कॉपी करना "और मैं मानता हूँ x86: <पूर्व> लूप में अनुवाद करना चाहिए यह प्रत्येक पाश प्रति निर्देश है: यह उस से अधिक तेजी से नहीं मिलेगा! कुछ भी एक जीपीयू का उपयोग करने की बात करते हैं लेकिन इसकी आवश्यकता है 1. अनुप्रयोगों के साथ GPU अंतरफलक और 2. आपके सरणी संपादित करें P> मैंने आपकी टिप्पणी "बस पढ़ा है क्योंकि यह किसी मोबाइल डिवाइस पर गेम के लिए है" और मुझे लगता है कि यह एक x86 प्लेटफ़ॉर्म नहीं है और इसलिए संभवत: एक reg + reg * पैमाने पर एड्रेसिंग मोड नहीं है यदि ऐसा है तो कोड लिखित होना चाहिए नहीं जानते कि किस वास्तुकला को आप निशाना बना रहे हैं, लेकिन आरआईएससी मानते हुए मुझे लगता है कि कोड के बजाय आठ निर्देश लंबे होंगे ("अपरिवर्तित" psuedocode में): a और
b 10 < Code> int s प्रति सरणी क्या कोई तरीका है कि मैं
b [i] से
a [i] की कुछ "मैमेट" या "मेमोकपी" चाल का उपयोग कर सकते हैं? मैं सिर्फ लूप w /
a [i] + = b [i] आदि के लिए स्पष्ट रूप से कुछ की तलाश कर रहा हूं।
शून्य addintvector (int * dstp, const int * srcp, int nints) {int * endp; ENDP = डीएसटी + nints; nints = srcp-dstp; // पुन: उपयोग निंट्स जबकि (dstp! = Endp) {* dstp + = * (dstp + nints); // [आधार + अनुक्रमणिका * 4] का उपयोग करता है x86 एड्रेसिंग डीएसटीपी + = 1; // कुछ पसंद करते हैं ++ डीएसटीपी लेकिन मैं नहीं करता जब यह संकेतक के लिए आता है}}
add_label: mov eax, [Ebx + esi * 4] जोड़ [ebx], eax add ebx, 4 cmp ebx, edx jne add_label
शून्य addintvector (int * dstp, const int * srcp, int nints) {int * endp; ENDP = डीएसटी + nints; जबकि (dstp! = Endp) {* dstp + = * srcp; srcp + = 1; dstp + = 1; }}
< Code> add_label: mov tempreg1, [srcreg] mov tempreg2, [dstreg] जोड़ tempreg2, tempreg1 mov [dstreg], tempreg2 srcreg जोड़ें, 4 जोड़ें dstreg, 4 cmp dstreg, endreg jne add_label
Comments
Post a Comment