एसएसई 4 में 32 बिट हस्ताक्षरित/हस्ताक्षरित पूर्णांक के लिए PMAXSD
या PMAXUD
है, जो उपयोगी हो सकता है।
SSE2 है MAXPD
और MAXSD
जो बीच और डबल्स की जोड़ी भर में तुलना है, तो आप n एक MAXSD साथ/2-1 MAXPDs भार और संचालन के सामान्य जुड़ाव के साथ, एन का एक वेक्टर की अधिकतम प्राप्त करने के लिए का पालन करें।
उपरोक्त के MIN समकक्ष हैं।
peregrino:$ g++ -O3 src/min_max.cpp -o bin/min_max
peregrino:$ g++ -O3 -msse4 -mfpmath=sse src/min_max.cpp -o bin/min_max_sse
peregrino:$ time bin/min_max
0,40
real 0m0.874s
user 0m0.796s
sys 0m0.004s
peregrino:$ time bin/min_max_sse
0,40
real 0m0.457s
user 0m0.404s
sys 0m0.000s
जहां min_max मिनट और 500 युगल की एक सरणी की अधिकतम गणना करता है:
डबल मामले के लिए, आप शायद SSE मोड में एक आधा सभ्य C++ कम्पाइलर से कोडांतरक में बेहतर करने के लिए नहीं जा रहे हैं एक अनुभवहीन पाश का उपयोग कर 100,000 बार:
bool min_max (double array[], size_t len, double& min, double& max)
{
double min_value = array [ 0 ];
double max_value = array [ 0 ];
for (size_t index = 1; index < len; ++index) {
if (array [ index ] < min_value) min_value = array [ index ];
if (array [ index ] > max_value) max_value = array [ index ];
}
min = min_value;
max = max_value;
}
जवाब में दो भाग के लिए, एक अधिकतम आपरेशन से शाखा दूर करने के लिए पारंपरिक अनुकूलन मानों की तुलना करने, एक गाना के रूप में ध्वज मिलता है ले बिट (0 या 1 देने), एक को घटाएं (0 या 0xffff_ffff दे रहा है) और 'और' इसे दो संभावित परिणामों के xor के साथ, ताकि आप (a > best ? (current_index^best_index) : 0)^best_index)
के बराबर प्राप्त कर सकें। मुझे संदेह है कि ऐसा करने का एक सरल एसएसई तरीका है, क्योंकि बस एसएसई टैग किए गए मूल्यों के बजाय पैक किए गए मूल्यों पर काम करता है; कुछ क्षैतिज इंडेक्स ऑपरेशंस हैं, इसलिए आप अधिकतम वेक्टर ढूंढने का प्रयास कर सकते हैं, फिर मूल वेक्टर के सभी तत्वों से घटाकर, फिर साइन बिट इकट्ठा कर सकते हैं, और शून्य हस्ताक्षरित एक अधिकतम के सूचकांक के अनुरूप होगा, लेकिन शायद यह होगा जब तक आप शॉर्ट्स या बाइट्स का उपयोग नहीं कर रहे हों तब तक सुधार न करें।
होस्ट भाषा क्या है? यदि यह सी/सी ++ है तो मैं इसके बारे में ज्यादा चिंता नहीं करता। –
लगभग 300 युगल का अधिकतम कार्यक्रम बड़े कार्यक्रम के सबसे आंतरिक लूप में है। 85% समय कोड के 8'000 लाइनों में से 10 में खर्च किया जाता है। मेजबान भाषा सिर्फ इस वजह से कोई फर्क नहीं पड़ता। लेकिन हाँ यह सी ++ –