Amdahl's Law
আমদাল সূত্র
একটা প্রোগ্রামের p ভাগ সমান্তরাল হলে, N প্রসেসরে speedup = 1/((1−p)+p/N) — আর N→∞-এও এটা কখনো 1/(1−p)-এর বেশি হয় না। সিরিয়াল অংশই চূড়ান্ত সীমা নির্ধারণ করে।
also: Gustafson's Law
p = সমান্তরালযোগ্য ভগ্নাংশ, (1-p) = অপরিবর্তনীয় সিরিয়াল
অংশ। N \to \infty করলে p/N \to 0, কিন্তু (1-p) থেকেই যায়
— তাই:
p=0.9-তে সিলিং মাত্র 10×, অসীম প্রসেসরেও তার বেশি নয়।
p=0.5-এ সিলিং 2×। p=0.99-এ 100×। ছোট (1-p) পরিবর্তনই
সিলিং-কে নাটকীয়ভাবে বদলে দেয়, কারণ 1/(1-p) p \to 1-এর
কাছে বিস্ফোরিত হয়।
সোর্স কোডে একটা loop “সমান্তরাল দেখতে” হলেই p সেই অনুপাত নয়
— একটা lock, [[cache-line]] ping-pong (false sharing), বা
NUMA-remote access কার্যকরভাবে (1-p) বাড়িয়ে দেয়, কোডে কোনো
explicit সিরিয়াল অংশ না দেখা গেলেও। p=0.98-এও (মাত্র ২%
সিরিয়াল) ২৫৬ কোরে সিলিং-এর মাত্র ~৮৪% পাওয়া যায় —
diminishing returns দ্রুত শুরু হয়।
Gustafson’s Law প্রশ্নটা পাল্টে দেয়: সমস্যার আকার fixed নয়,
প্রসেসরের সাথে বাড়ে ধরে নিলে (weak scaling), scaled speedup
— রৈখিক, কোনো সিলিং নেই। একই p=0.9, N=64-এ Amdahl দেয় ৮.৭৭×, Gustafson দেয় ৫৭.৭× — দুটোই
সঠিক, শুধু ভিন্ন প্রশ্নের উত্তর (“একই কাজ কত দ্রুত” বনাম “একই
সময়ে কত বেশি কাজ”)। প্রশ্নটা তাই “কোন সূত্র সঠিক” নয় — “আমার
কাজের আকার fixed, নাকি হার্ডওয়্যারের সাথে বাড়ে?”