नहीं, यह गारंटी नहीं है। यदि आप बिना किसी अनुकूलन के NETLIB BLAS का उपयोग कर रहे हैं, तो यह ज्यादातर सही है कि परिणाम समान हैं। लेकिन BLAS और LAPACK के किसी भी व्यावहारिक उपयोग के लिए एक उच्च अनुकूलित समानांतर BLAS का उपयोग करता है। समानांतरकरण का कारण बनता है, भले ही यह केवल सीपीयू के वेक्टर रजिस्टरों के अंदर समानांतर में काम करता है, कि एकल शब्दों का मूल्यांकन कैसे किया जाता है और योग का क्रम भी बदलता है। अब यह IEEE मानक में अनुपस्थित साहचर्य गुण का निर्माण करता है, जिसके परिणाम समान नहीं होते हैं। तो वास्तव में आपके द्वारा बताई गई बात हो सकती है।
NETLIB BLAS में स्केलर उत्पाद केवल एक कारक 5 द्वारा अनियंत्रित लूप के लिए है:
DO I = MP1,N,5
DTEMP = DTEMP + DX(I)*DY(I) + DX(I+1)*DY(I+1) +
$ DX(I+2)*DY(I+2) + DX(I+3)*DY(I+3) + DX(I+4)*DY(I+4)
END DO
और यह कंपाइलर पर निर्भर करता है यदि प्रत्येक गुणक को तुरंत DTEMP में जोड़ा जाता है या यदि सभी 5 घटकों को पहले जोड़ दिया जाता है और DTEMP में जोड़ दिया जाता है। OpenBLAS में यह आर्किटेक्चर के आधार पर अधिक जटिल कर्नेल है:
__asm__ __volatile__
(
"vxorpd %%ymm4, %%ymm4, %%ymm4 \n\t"
"vxorpd %%ymm5, %%ymm5, %%ymm5 \n\t"
"vxorpd %%ymm6, %%ymm6, %%ymm6 \n\t"
"vxorpd %%ymm7, %%ymm7, %%ymm7 \n\t"
".align 16 \n\t"
"1: \n\t"
"vmovups (%2,%0,8), %%ymm12 \n\t" // 2 * x
"vmovups 32(%2,%0,8), %%ymm13 \n\t" // 2 * x
"vmovups 64(%2,%0,8), %%ymm14 \n\t" // 2 * x
"vmovups 96(%2,%0,8), %%ymm15 \n\t" // 2 * x
"vmulpd (%3,%0,8), %%ymm12, %%ymm12 \n\t" // 2 * y
"vmulpd 32(%3,%0,8), %%ymm13, %%ymm13 \n\t" // 2 * y
"vmulpd 64(%3,%0,8), %%ymm14, %%ymm14 \n\t" // 2 * y
"vmulpd 96(%3,%0,8), %%ymm15, %%ymm15 \n\t" // 2 * y
"vaddpd %%ymm4 , %%ymm12, %%ymm4 \n\t" // 2 * y
"vaddpd %%ymm5 , %%ymm13, %%ymm5 \n\t" // 2 * y
"vaddpd %%ymm6 , %%ymm14, %%ymm6 \n\t" // 2 * y
"vaddpd %%ymm7 , %%ymm15, %%ymm7 \n\t" // 2 * y
"addq $16 , %0 \n\t"
"subq $16 , %1 \n\t"
"jnz 1b \n\t"
...
जो लंबाई 4 के छोटे स्केलर उत्पादों में स्केलर उत्पाद को विभाजित करता है और उन्हें योग करता है।
ATLAS, MKL, ESSL, जैसे अन्य विशिष्ट BLAS कार्यान्वयन का उपयोग ... यह समस्या समान रहती है क्योंकि प्रत्येक BLAS कार्यान्वयन तेज़ कोड प्राप्त करने के लिए विभिन्न अनुकूलन का उपयोग करता है। लेकिन जहां तक मुझे पता है कि एक व्यक्ति को वास्तव में दोषपूर्ण परिणाम के लिए एक कृत्रिम उदाहरण की आवश्यकता है।
यदि यह आवश्यक है कि बीएलएएस पुस्तकालय उसी परिणाम के लिए वापस आए (बिट-वार वही) तो एक प्रतिलिपि प्रस्तुत करने योग्य बीएलएएस पुस्तकालय का उपयोग करना होगा जैसे: