দেখে মনে হচ্ছে আপনি "ফ্লপ" এর একই অ্যানক্রোনস্টিক সংজ্ঞা অনুসারে ফ্লপের সংখ্যা গণনা না করে আপনার কোডটি কীভাবে এফপিইউ-দ্বারা বেঁধে দেওয়া হয়েছে, বা আপনি কতটা কার্যকরভাবে এফপিইউ ব্যবহার করছেন তা মূল্যায়নের একটি উপায় চান। অন্য কথায়, আপনি এমন একটি মেট্রিক চান যা প্রতিটি চক্রের সম্পূর্ণ ক্ষমতার সাথে চলমান পয়েন্ট ইউনিট একই শিখরে পৌঁছে যায়। এটি কীভাবে কেঁপে উঠতে পারে তা দেখতে আসুন একটি ইন্টেল স্যান্ডি ব্রিজটি দেখুন।
হার্ডওয়্যার-সমর্থিত ভাসমান পয়েন্ট ক্রিয়াকলাপ
এই চিপটি অ্যাভিএক্স নির্দেশকে সমর্থন করে , তাই নিবন্ধগুলি 32 বাইট দীর্ঘ (4 টি ডাবল ধারণ করে) are সুপারসকলার আর্কিটেকচারটি নির্দেশনাগুলিকে ওভারল্যাপ করার অনুমতি দেয়, বেশিরভাগ পাটিগণিত নির্দেশাবলী কয়েকটি চক্র সম্পন্ন করতে গ্রহণ করে, যদিও নতুন নির্দেশিকা পরবর্তী চক্রটি শুরু করতে সক্ষম হতে পারে। এই শব্দার্থবিজ্ঞানগুলি সাধারণত বিলম্ব / বিপরীত থ্রুপুট লিখে সংক্ষেপিত হয়, 5/2 এর মান বলতে বোঝায় যে নির্দেশটি সম্পূর্ণ করতে 5 টি চক্র লাগে তবে আপনি অন্য প্রতিটি চক্র একটি নতুন নির্দেশ শুরু করতে পারেন (অনুমান করে যে অপারেশনগুলি উপলভ্য, সুতরাং কোনও তথ্য নেই) নির্ভরতা এবং স্মৃতির জন্য অপেক্ষা না))
কোর প্রতি তিনটি ভাসমান পয়েন্ট গণিত ইউনিট আছে, কিন্তু তৃতীয়টি আমাদের আলোচনার সাথে প্রাসঙ্গিক নয়, আমরা প্রাসঙ্গিক দুটি এ এবং এম ইউনিট বলব কারণ তাদের প্রাথমিক ফাংশনগুলি সংযোজন এবং গুণক। উদাহরণ নির্দেশাবলী ( অ্যাগনার ফগের টেবিলগুলি দেখুন )
vaddpd
: প্যাকড সংযোজন, 1 চক্রের জন্য একক দখল, বিলম্ব / বিপরীত থ্রুটপুট 3/1
vmulpd
: প্যাকযুক্ত গুণ, একক এম, 5/1
vmaxpd
: প্যাকড সিলেকড পেয়ারওয়াই সর্বাধিক, ইউনিট এ, 3/1
vdivpd
: ইনপুট উপর নির্ভর করে প্যাকড ডিভাইড, ইউনিট এম (এবং কিছু এ), 21/20 থেকে 45/44
vsqrtpd
: ইনপুটটির উপর নির্ভর করে স্কোয়ার রুট, কিছু A এবং M, 21/21 থেকে 43/43 প্যাক করে
vrsqrtps
: একক নির্ভুলতা ইনপুট জন্য স্বল্প-যথার্থ পারস্পরিক স্কোয়ার রুট প্যাক করা (8 floats
)
কী দিয়ে ওভারল্যাপ হতে পারে vdivpd
এবং vsqrtpd
স্পষ্টতই সূক্ষ্ম এবং এএফআইকে, কোথাও নথিভুক্ত নয় সেগুলির সুনির্দিষ্ট শব্দার্থবিজ্ঞান । বেশিরভাগ ব্যবহারে, আমি মনে করি যে ওভারল্যাপের জন্য খুব কম সম্ভাবনা রয়েছে, যদিও ম্যানুয়ালটিতে বর্ণিত পরামর্শ দেয় যে একাধিক থ্রেড এই নির্দেশিকায় ওভারল্যাপের জন্য আরও সম্ভাবনা সরবরাহ করতে পারে। আমরা প্রতি চক্রটিতে মোট চক্রের জন্য মোট 8 টি ফ্লপের জন্য vaddpd
এবং যদি vmulpd
প্রতিটি চক্রটি শুরু করি তবে আমরা পিক ফ্লপগুলিকে আঘাত করতে পারি । ঘন ম্যাট্রিক্স-ম্যাট্রিক্স গুণমান ( dgemm
) এই শীর্ষে যথাযথভাবে পেতে পারে can
বিশেষ নির্দেশাবলীর জন্য ফ্লপগুলি গণনা করার সময়, আমি এফপিইউর কতটা দখল করে আছে তা দেখব। ধরুন যে আপনার ইনপুটটির পরিসরে vdivpd
, সম্পূর্ণ ইউনিট এম দখল করে গড়ে গড়ে 24 টি চক্র নিয়েছে, তবে সংযোজনে অর্ধ চক্রের জন্য সংযোজন করা যেতে পারে (যদি এটি উপলব্ধ ছিল)। এফপিইউ সেই চক্রগুলির সময় 24 টি প্যাকড গুণক এবং 24 টি প্যাক সংযোজন সম্পাদন করতে সক্ষম (তবে নিখুঁতভাবে ইন্টারলিভড vaddpd
এবং vmulpd
), তবে vdivpd
সর্বোত্তমভাবে আমরা যা করতে পারি তা হল 12 টি অতিরিক্ত প্যাক যুক্ত। যদি আমরা ধরে নিই যে বিভাগটি করার সর্বোত্তম সম্ভাব্য উপায়টি হ'ল হার্ডওয়্যার (যুক্তিসঙ্গত) ব্যবহার করা হয় তবে আমরা vdivpd
36 টি প্যাকড "ফ্লপ" হিসাবে গণনা করতে পারি, এটি নির্দেশ করে যে প্রতিটি স্কেলার বিভাজনকে 36 "ফ্লপ" হিসাবে গণনা করা উচিত।
পারস্পরিক বর্গমূলের সাথে, কখনও কখনও হার্ডওয়্যারকে বীট দেওয়া সম্ভব হয়, বিশেষত যদি সম্পূর্ণ নির্ভুলতার প্রয়োজন হয় না, বা যদি ইনপুটটির পরিসর সংকীর্ণ হয়। উপরে উল্লিখিত হিসাবে, vrsqrtps
নির্দেশিকাটি খুব কম ব্যয়বহুল, সুতরাং (একক নির্ভুলতায়) আপনি vrsqrtps
পরিষ্কার করতে একটি বা দুটি নিউটন পুনরাবৃত্তি অনুসরণ করতে পারেন । এই নিউটনের পুনরাবৃত্তিগুলি কেবলমাত্র
y *= (3 - x*y*y)*0.5;
যদি এই অপারেশনগুলির অনেকগুলি সম্পাদন করা দরকার হয় তবে এটি নির্বোধের মূল্যায়নের চেয়ে উল্লেখযোগ্যভাবে দ্রুত হতে পারে y = 1/sqrt(x)
। হার্ডওয়্যার আনুমানিক পারস্পরিক জাতীয় স্কোয়ার রুটের প্রাপ্যতার আগে, কিছু পারফরম্যান্স-সংবেদনশীল কোড নিউটন পুনরাবৃত্তির জন্য প্রাথমিক অনুমানের জন্য কুখ্যাত পূর্ণসংখ্যা ক্রিয়াকলাপ ব্যবহার করেছিল।
গ্রন্থাগার-সরবরাহিত গণিত ফাংশন
আমরা লাইব্রেরি-সরবরাহিত গণিত ফাংশনগুলিতে অনুরূপ হিউরিস্টিক প্রয়োগ করতে পারি। আপনি এসএসই নির্দেশাবলীর সংখ্যা নির্ধারণের জন্য প্রোফাইল তৈরি করতে পারেন, তবে যেমনটি আমরা আলোচনা করেছি, এটি পুরো গল্প নয় এবং এমন একটি প্রোগ্রাম যা বিশেষ কার্যাদি মূল্যায়নের জন্য সমস্ত সময় ব্যয় করে তা শীর্ষে পৌঁছতে পারে না, যা সত্য হতে পারে, তবে সত্য নয় এফপিইউ-র উপর আপনার নিয়ন্ত্রণের বাইরে সমস্ত সময় ব্যয় করার জন্য আপনাকে দরকারী নয়।
আমি ভাল ভেক্টর ম্যাথ লাইব্রেরিটি বেসলাইন হিসাবে ব্যবহার করার পরামর্শ দিই (যেমন ইন্টেলের ভিএমএল, এমকেএল এর অংশ)। প্রতিটি কলের জন্য চক্রের সংখ্যা পরিমাপ করুন এবং সেই সংখ্যাটি থেকে চূড়া অর্জনযোগ্য ফ্লপগুলি দিয়ে গুণ করুন। সুতরাং যদি কোনও প্যাকযুক্ত ঘনিষ্ঠভাবে মূল্যায়ন করতে 50 টি চক্র লাগে, তবে এটি নিবন্ধের প্রস্থের 100 ফ্লপ গুণ হিসাবে গণনা করুন। দুর্ভাগ্যক্রমে, ভেক্টর ম্যাথ লাইব্রেরিগুলি কখনও কখনও কল করা শক্ত হয় এবং সমস্ত বিশেষ ফাংশন নেই, সুতরাং আপনি স্কেলার গণিতটি শেষ করতে পারেন, আপনি যদি আমাদের অনুমানীয় স্কেলার সূচককে 100 ফ্লপ হিসাবে গণনা করেন (যদিও এটি এখনও এখনও 50 লাগে) চক্র, সুতরাং আপনি কেবলমাত্র 25% "শিখর" পাচ্ছেন যদি সমস্ত সময় এই ক্ষতিকারকগুলির মূল্যায়ন করতে ব্যয় হয়)।
অন্যরা যেমন উল্লেখ করেছে, আপনি পিএপিআই বা বিভিন্ন ইন্টারফেস ব্যবহার করে চক্র এবং হার্ডওয়্যার ইভেন্টের কাউন্টার গণনা করতে পারেন। সাধারণ চক্র গণনার জন্য, আপনি rdtsc
ইনলাইন সমাবেশের স্নিপেটের সাথে নির্দেশিকাটি ব্যবহার করে সরাসরি চক্র কাউন্টারটি পড়তে পারেন ।