Foundationপ্রথম নীতি থেকে
LEVEL 11 · Advanced Architecture & Performance

Amdahl's Law

আমদাল সূত্র

একটা প্রোগ্রামের p ভাগ সমান্তরাল হলে, N প্রসেসরে speedup = 1/((1−p)+p/N) — আর N→∞-এও এটা কখনো 1/(1−p)-এর বেশি হয় না। সিরিয়াল অংশই চূড়ান্ত সীমা নির্ধারণ করে।

also: Gustafson's Law

Speedup(N)=1(1−p)+p/N\text{Speedup}(N) = \frac{1}{(1-p) + p/N}

p = সমান্তরালযোগ্য ভগ্নাংশ, (1-p) = অপরিবর্তনীয় সিরিয়াল অংশ। N \to \infty করলে p/N \to 0, কিন্তু (1-p) থেকেই যায় — তাই:

lim⁡N→∞Speedup(N)=11−p\lim_{N\to\infty} \text{Speedup}(N) = \frac{1}{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 =(1−p)+p⋅N= (1-p) + p \cdot N — রৈখিক, কোনো সিলিং নেই। একই p=0.9, N=64-এ Amdahl দেয় ৮.৭৭×, Gustafson দেয় ৫৭.৭× — দুটোই সঠিক, শুধু ভিন্ন প্রশ্নের উত্তর (“একই কাজ কত দ্রুত” বনাম “একই সময়ে কত বেশি কাজ”)। প্রশ্নটা তাই “কোন সূত্র সঠিক” নয় — “আমার কাজের আকার fixed, নাকি হার্ডওয়্যারের সাথে বাড়ে?”