मुझे जावाकार्ड में 16-बाइट सरणी के जितनी जल्दी संभव बाएं बिट शिफ्ट को लागू करने की आवश्यकता है।बाइट सरणी की फास्ट बिट शिफ्ट - सीएमएसी उपकुंजी
private static final void rotateLeft(final byte[] output, final byte[] input) {
short carry = 0;
short i = (short) 16;
do {
--i;
carry = (short)((input[i] << 1) | carry);
output[i] = (byte)carry;
carry = (short)((carry >> 8) & 1);
} while (i > 0);
}
कोई भी विचार कैसे performace सुधार करने के लिए:
मैं इस कोड की कोशिश की? मैं कुछ Util.getShort(...)
और Util.setShort(...)
जादू के बारे में सोच रहा था, लेकिन मैंने ऊपर कार्यान्वयन के बाद इसे तेजी से काम करने में कामयाब नहीं किया।
यह सीएमएसी उपकुंजियों की गणना का एक हिस्सा है और दुर्भाग्य से यह अक्सर किया जाता है। यदि आप सीएमएसी उपकुंजी (दोनों लूप में उपकुंजी या उस तरह कुछ) की गणना करने के लिए कुछ तेज़ तरीका जानते हैं, तो कृपया मुझे बताएं।
मैं जावाकार्ड को इकट्ठा करता हूं? यदि ऐसा है तो मैं अनुशंसा करता हूं कि आप जेनरेट किए गए बाइट-कोड पर नज़र डालें और उपलब्ध निर्देश सेट के साथ अनुकूलित करें। उदाहरण के लिए मुझे संदेह है कि शर्ट शॉर्ट्स के लिए बेहतर हो सकता है, और लूप अनोलिंग आपको कुछ चक्र प्राप्त कर सकता है। इसके अलावा मुझे संदेह है कि आप एक विस्तारित-सटीक अंकगणितीय ऑपरेशन से अधिक करने जा रहे हैं, इसलिए संभवतया तेज़ प्रसंस्करण के लिए व्यापक पूर्णांक पर स्विच करना और अंत में 8-बिट सरणी को वापस परिवर्तित करना बुद्धिमानी है। – doynax
@doynax जावाकार्ड में 'int' या' long' नहीं है ... 'बाइट' और 'छोटा' आपके पास है। – vojta
इसके बारे में क्षमा करें, काम करने के लिए विशेष रूप से अपंग वातावरण की तरह लगता है। मेरा बिंदु अभी भी खड़ा है, जेनरेट किए गए बाइट कोड पर नजर रखें ताकि यह सुनिश्चित किया जा सके कि कंपाइलर इंटरमीडिएट शॉर्ट-ऑफ-इंट-एंड-न-वास्तव में परिणामों पर अनावश्यक 'i2s' निर्देश उत्पन्न करने का निर्णय नहीं लेता है। – doynax