سخت‌افزار چگونه تقسیم انجام می‌دهد: خارج‌قسمت، باقیمانده و موارد خاص

تقسیم سخت‌افزارطلب‌ترین عملیات محاسباتی پایه است، که شامل تفریق و مقایسه تکراری است نه یک مدار تک‌مرحله‌ای. این مقاله الگوریتم مفهومی تقسیم طولانی که سخت‌افزار دنبال می‌کند را توضیح می‌دهد، خارج‌قسمت و باقیمانده چگونه با هم تولید می‌شوند را شرح می‌دهد، و موارد خاصی مانند تقسیم بر صفر که سخت‌افزار باید صراحتاً مدیریت کند را پوشش می‌دهد.

تقسیم باینریخارج‌قسمت و باقیماندهموارد خاص تقسیم

~3 min read · Updated Sep 6, 2026

چرا تقسیم سخت‌ترین عملیات محاسباتی پایه است

برخلاف جمع که در یک عبور واحد کامل می‌شود، و ضرب که از الگوی نسبتاً منظم شیفت-و-جمع پیروی می‌کند، تقسیم نیازمند گام‌های تکراری مقایسه و تفریق است که نتیجه هر مرحله به نتیجه مرحله قبل بستگی دارد. این وابستگی باعث می‌شود مدارهای تقسیم هم کندتر و هم پیچیده‌تر برای طراحی نسبت به جمع‌کننده‌ها یا ضرب‌کننده‌ها باشند.

الگوریتم مفهومی تقسیم طولانی

تقسیم سخت‌افزاری همان فرآیند تقسیم طولانی که برای اعداد اعشاری آموزش داده می‌شود را منعکس می‌کند، منطبق‌شده با ارقام باینری.

  • Divisor را با بخش فعلی Dividend مقایسه کن.
  • اگر divisor جا بشود (کوچک‌تر یا مساوی آن بخش باشد)، آن را تفریق کن، یک ۱ در آن موقعیت از Quotient ثبت کن، و نتیجه تفریق را به‌عنوان باقیمانده جدید برای کار نگه دار.
  • اگر divisor جا نشود، یک ۰ در آن موقعیت از quotient ثبت کن و بدون تفریق ادامه بده.
  • برای آوردن بیت بعدی از dividend شیفت بده و این فرآیند را تکرار کن تا هر بیت پردازش شود.

یک تصویرسازی ساده‌شده از تقسیم یک مقدار ۸ بیتی بر یک divisor کوچک:

Dividend: 00001011 (11)
Divisor:  0011 (3)

گام‌های تکراری مقایسه-تفریق-شیفت تولید می‌کنند:
Quotient:  0011 (3)
Remainder: 0010 (2)

بررسی: 3 × 3 + 2 = 11

دو خروجی از یک عملیات

برخلاف جمع یا ضرب، تقسیم به‌طور طبیعی دو نتیجه متمایز را هم‌زمان تولید می‌کند: Quotient، که نشان می‌دهد divisor چند بار در dividend جا می‌شود، و Remainder، که نشان می‌دهد چه چیزی باقی می‌ماند. RISC-V این را با فراهم کردن دستورات جداگانه برای بازیابی مستقل هر مقدار منعکس می‌کند، چون یک برنامه واحد اغلب فقط به یکی از این دو نیاز دارد.

موارد خاصی که سخت‌افزار باید مدیریت کند

تقسیم موارد خاصی دارد که جمع و ضرب معمولی ندارند.

  • Division by Zero از نظر ریاضی نامشخص است. به‌جای کرش کردن به‌طور غیرقابل‌پیش‌بینی، RISC-V یک نتیجه مشخص و قابل‌پیش‌بینی برای بازگرداندن در این حالت تعریف می‌کند، تا نرم‌افزار بتواند صراحتاً آن را بررسی کند.
  • Signed Division Overflow می‌تواند در یک مورد خاص و باریک رخ دهد: تقسیم منفی‌ترین مقدار قابل‌نمایش بر منفی یک، چون نتیجه صحیح از نظر ریاضی نمی‌تواند در همان عرض بیتی ثابت نمایش داده شود.

از آنجا که این رفتارها به‌طور دقیق تعریف شده‌اند نه اینکه نامشخص رها شده باشند، برنامه‌های در حال اجرا روی پیاده‌سازی‌های مختلف RISC-V حتی وقتی به این شرایط مرزی برخورد می‌کنند، رفتاری سازگار دارند.

چرا سرعت تقسیم در عمل اهمیت دارد

از آنجا که تقسیم به‌طور قابل‌توجهی کندتر از جمع یا ضرب روی بیشتر سخت‌افزارهاست، کامپایلرها و برنامه‌نویسان توجه‌کننده به کارایی اغلب به‌دنبال راه‌هایی برای اجتناب از تقسیم غیرضروری می‌گردند، برای مثال جایگزینی تقسیم تکراری بر یک ثابت با یک ضرب از‌پیش‌محاسبه‌شده واحد در جایی که از نظر ریاضی معتبر باشد، یا بازساختاردهی الگوریتم‌ها برای به‌حداقل رساندن دفعاتی که تقسیم باید درون یک حلقه حساس به کارایی اجرا شود.

Written & researched by Dr. Shahin Siami

Related Articles

تصورات غلط رایج درباره محاسبات موازی و درس‌های نهایی کتاب

پس از پوشش هر چیزی از موازی‌سازی سطح رشته تا محاسبات در مقیاس انبار، ارزش دارد تصورات غلط پایداری درباره سیستم‌های موازی که حتی مهندسان باتجربه هم گاهی به آن‌ها دارند را اصلاح کنیم. این مقاله به مغالطات رایج درباره مقیاس‌پذیری و سخت‌افزار موازی می‌پردازد، سپس فصل پردازش موازی را با پیوند دادن مسیر کامل از یک دستور منفرد تا یک ساختمان پر از ماشین‌های همکار به پایان می‌رساند.

Continue

واقعیت‌های عملی: بنچمارک CPU در مقابل GPU و ضرب ماتریس چندپردازنده‌ای

مقایسه منصفانه یک CPU و یک GPU نیازمند مدلی است که هم توان عملیاتی محاسباتی و هم محدودیت‌های پهنای باند حافظه را با هم در نظر بگیرد. این مقاله مدل roofline مورد استفاده برای مقایسه سخت‌افزار واقعی مانند Intel Core i7 و NVIDIA Tesla GPU را معرفی می‌کند، سپس نشان می‌دهد ضرب ماتریس چگونه در سراسر چند پردازنده تسریع می‌شود، به‌عنوان کاربرد عملی نهایی مفاهیم موازی این فصل.

Continue

بنچمارک کردن چندپردازنده‌ها و مدل‌سازی کارایی موازی

سنجش کارایی یک سیستم موازی نیازمند ابزارها و سنجه‌های متفاوتی نسبت به سنجش یک پردازنده تک‌هسته‌ای است. این مقاله بنچمارک‌های تخصصی مورد استفاده برای ارزیابی سیستم‌های چندپردازنده را پوشش می‌دهد، توضیح می‌دهد چگونه رفتار مقیاس‌پذیری را با افزودن پردازنده‌های بیشتر مدل‌سازی کنیم، و قانون آمدال را در زمینه سنجش کارایی دنیای واقعی بازبینی می‌کند.

Continue

شبکه‌سازی کلاستر: ارتباط با دنیای بیرون

یک کلاستر از ماشین‌ها فقط زمانی مفید است که بتواند به‌طور کارآمد هم داخلی و هم با دنیای بیرون ارتباط برقرار کند. این مقاله لایه‌های شبکه‌سازی درگیر در ارتباط کلاستر، مبادلات بین تأخیر و پهنای باند در مقیاس، و اینکه کلاسترها چگونه به شبکه‌های خارجی و کاربران متصل می‌شوند را پوشش می‌دهد.

Continue

کلاسترها، کامپیوترهای در مقیاس انبار، و توپولوژی‌های شبکه

فراتر از یک تراشه واحد، موازی‌سازی به کل ساختمان‌های پر از کامپیوترهای مستقلی که با هم کار می‌کنند گسترش می‌یابد. این مقاله گذار از چندپردازنده‌سازی حافظه مشترک به کلاسترهایی از ماشین‌های جداگانه را توضیح می‌دهد، مفهوم محاسبات در مقیاس انبار را معرفی می‌کند، و توپولوژی‌های شبکه که این ماشین‌های مستقل را به‌طور کارآمد متصل می‌کنند را پوشش می‌دهد.

Continue

مقدمه‌ای بر GPU: موازی‌سازی عظیم برای بارهای کاری سنگین از نظر داده

یک GPU ایده SIMD که پیش‌تر در این مجموعه پوشش داده شد را به یک مقیاس افراطی می‌برد، و هزاران رشته سبک را به‌طور هم‌زمان اجرا می‌کند تا حجم عظیمی از داده مستقل را پردازش کند. این مقاله توضیح می‌دهد چرا GPU ها از نظر معماری این‌قدر با CPU متفاوت‌اند، مدل اجرای رشته آن‌ها چگونه کار می‌کند، و چه نوع بارهای کاری بیشترین بهره را از این طراحی می‌برند.

Continue