تبدیل سریعتر timestamp به ساعت، دقیقه و ثانیه
خلاصهٔ کاملتر
همهٔ ما یه جایی نیاز داریم timestampـی مثل ثانیههای سپریشده از نیمهشب رو به ساعت، دقیقه و ثانیه تبدیل کنیم. نویسنده نشون میده که تقریباً همهٔ کتابخونههای معروف - از هستهٔ لینوکس و glibc گرفته تا Go، پایتون و جاوا - این کارو با تقسیم و باقیمونده پشتسرهم انجام میدن: اول ساعت، بعد باقیمونده، بعد دقیقه از دل اون، و در آخر ثانیه. مشکل اینه که هر مرحله به نتیجهٔ مرحلهٔ قبلی نیاز داره؛ یعنی یه زنجیرهٔ وابستگی (dependency chain، یعنی هر محاسبه باید منتظر تموم شدن محاسبهٔ قبلی بمونه) طولانی داریم که پردازنده نمیتونه همزمانش کنه.
راهحل نویسنده یه بازآرایی سادهٔ محاسباته که این زنجیره رو میشکنه: بهجای اینکه دقیقه از باقیماندهٔ ساعت به دست بیاد، هم «مجموع دقیقهها» و هم «ساعت» مستقیماً از خود timestamp حساب میشن، و بعد ثانیه و دقیقهٔ نهایی از تفریق این دو به دست میان. اینطوری دو محاسبه کاملاً همزمان روی پردازنده اجرا میشن، چون به هم وابسته نیستن:
tmin = time / 60
hour = time / 3600
second = time - tmin * 60
minute = tmin - hour * 60
برای رسیدن به سرعت بیشتر، نویسنده از ترفندهای ریاضی مثل تقسیم با ضرب و شیفت بیتی هم استفاده میکنه؛ روشی که پیشتر Cassio Neri در سال ۲۰۲۰ هم به کار برده بود. جالبترین بخش مقاله «ترفند ساعت پایه ۶۴»ـه: با یه فرمول ریاضی خاص، باقیماندهٔ ماژول ۶۰ (سیستم ساعت معمولی) رو به ماژول ۶۴ تبدیل میکنه که برای پردازنده خیلی راحتتر و سریعتر حساب میشه. نتیجهٔ نهایی روشیه که کل تبدیل رو تو فقط ۵ سیکل CPU انجام میده، در مقایسه با حدود ۱۶ سیکل روشهای معمول.
نویسنده این روشها رو روی پردازندههای AMD Ryzen 9 و اپل M4 Pro تست کرده. مقاله همچنین توضیح میده چطور میشه همین ایده رو برای واحدهای کوچیکتر مثل میلیثانیه هم پیاده کرد، و یه بخش کوتاه هم دربارهٔ مدیریت ثانیهٔ کبیسه (leap second) داره که قراره تا سال ۲۰۳۵ بهطور کامل حذف بشه.
نکات کلیدی:
- روشهای معمول تبدیل timestamp حدود ۱۶ سیکل CPU طول میکشن چون زنجیرهٔ وابستگی طولانی دارن
- بازآرایی محاسبات (محاسبهٔ همزمان ساعت و مجموع دقیقهها) این زنجیره رو میشکنه
- ترکیب با ترفندهای ریاضی fixed-point و «ساعت پایه ۶۴» زمان اجرا رو تا ۵ سیکل پایین میاره
- تستها روی پردازندههای AMD Ryzen 9 و اپل M4 Pro انجام شده
- ثانیهٔ کبیسه (leap second) تا سال ۲۰۳۵ بهطور کامل حذف میشه




