آیا به هایپر threading نیاز دارید؟ Hyper-Threading چیست؟ چگونه Hyper-Threading را فعال کنم؟ بهترین استفاده از این فناوری چه زمانی است؟

آیا به هایپر threading نیاز دارید؟ Hyper-Threading چیست؟ چگونه Hyper-Threading را فعال کنم؟ بهترین استفاده از این فناوری چه زمانی است؟

یکی از مهمترین عناصر در موقعیت یابی پردازنده است اینتلدر درون حاکمان، تکنولوژی است Hyper-Threading... یا بهتر بگوییم نبود آن در پردازنده یا وجود آن. مسئولیت این فناوری چیست؟ اینتل Hyper-Threading، این فناوری برای استفاده کارآمد از منابع هسته های پردازنده (CPU) است که به شما امکان می دهد همزمان چندین رشته را در هر هسته پردازش کنید.

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

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

برای جلوگیری از این امر، فناوری در سال 2002 ظاهر شد Hyper-Threading، که ظاهر هسته دوم را در سیستم تقلید می کرد و به همین دلیل پر شدن ظرفیت های هسته سریعتر انجام می شد.

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

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

در عصر پردازنده‌های تک هسته‌ای (Intel Pentium 4)، فناوری HT به نجات کسانی تبدیل شده است که نمی‌توانستند پردازنده گران‌تری (Pentium D) بخرند. اما امروزه موارد شناخته شده ای از کاهش عملکرد زمانی که HT فعال می شود وجود دارد. چرا این اتفاق می افتد؟ خیلی ساده است. برای موازی سازی داده ها و پردازش صحیح فرآیند، مقداری از توان پردازنده نیز مصرف می شود. و به محض وجود هسته های فیزیکی کافی برای پردازش اطلاعات بدون بلوک های بیکار، به دلیل منابع انتخاب شده توسط فناوری HT، عملکرد کمی کاهش می یابد. بنابراین، بدترین حالت برای Hyper-Threading عدم افزایش عملکرد نیست، بلکه کاهش آن است. اما در عمل، این اتفاق بسیار نادر است.

با انتشار خط هشت هزارم پردازنده های اینتل از خانواده Core، این سوال به ویژه مهم شده است - آیا لازم است Hyper-Threadingبطور کلی؟ از این گذشته، حتی پردازنده‌های Core i5 دارای شش هسته کامل هستند. جدا از برنامه های حرفه ای برای پردازش گرافیکی، رندر و غیره، پس این احتمال وجود دارد که شش هسته فیزیکی برای همه برنامه ها و بازی های اداری کافی باشد. بنابراین، اگر در ابتدا اعتقاد بر این بود که فناوری HT تا 30٪ عملکرد پردازنده را اضافه می کند، اکنون این یک اصل موضوع نیست و همه چیز به سبک کار شما در رایانه و مجموعه ابزارهای مورد استفاده بستگی دارد.

البته متن بدون تست ناقص خواهد بود. بنابراین، ما پردازنده هایی را که در اختیار داریم، می گیریم. اینتل Core i7 8700Kو 7700 هزار، و در چندین بازی و برنامه عملکرد پردازنده های فعال را بررسی کنید Hyper-Threading، و غیرفعال شد. در نتیجه آزمایش، مشخص می‌شود که هسته‌های مجازی در کدام برنامه‌ها عملکرد را اضافه می‌کنند و در کدام برنامه‌ها مورد توجه قرار نمی‌گیرند.

3DMark محبوب تمایلی به پاسخگویی به افزایش هسته‌ها و رشته‌ها ندارد. افزایش وجود دارد، اما ناچیز است.

در انواع محاسبات و پردازش ها، هسته ها و نخ ها همیشه حاکم بوده اند. Hyper-Threading در اینجا ضروری است، عملکرد را تا حد زیادی افزایش می دهد.

در بازی ها شرایط ساده تر است. در بیشتر موارد، افزایش تعداد نخ ها بی اثر است، یعنی. 4 هسته فیزیکی برای بازی ها کافی است و در بیشتر موارد حتی کمتر. تنها استثنا GTA5 بود که به خوبی به غیرفعال کردن NT واکنش نشان داد و عملکرد 7 درصدی را اضافه کرد و فقط روی یک پردازنده 6 هسته ای 8700K. غیرفعال کردن multithreading در 7700K هیچ نتیجه ای نداشت. ما چندین بار از معیارها عبور کردیم و نتایج بدون تغییر باقی ماند. اما این یک استثنا از قاعده است. همه بازی های تست شده به راحتی با چهار هسته راضی هستند.

یکی از مهمترین عناصر در موقعیت یابی پردازنده های اینتل در داخل خطوط، فناوری Hyper-Threading است. یا بهتر بگوییم نبود آن در پردازنده یا وجود آن. مسئولیت این فناوری چیست؟ Intel Hyper-Threading یک فناوری برای استفاده کارآمد از منابع هسته پردازنده (CPU) است که امکان پردازش همزمان چندین رشته در هر هسته را فراهم می کند. بیایید سعی کنیم یک مثال از یک سیستم مشابه را از زندگی ارائه دهیم. تصور کنید یک پاسگاه مرزی با کنترل هر خودرو، تعداد زیادی از ماموران گمرک و یک خط برای خودروها. ترافیک ایجاد می شود، روند به خودی خود کند می شود، حتی بدون توجه به سرعت کار کارکنان. و با توجه به اینکه تنها یک خط وجود دارد، نیمی از کارمندان فقط خسته می شوند. و سپس ناگهان مسیر دیگری برای وسایل نقلیه باز می شود و اتومبیل ها در دو جریان شروع به حرکت می کنند. سرعت کار افزایش می یابد، کارمندان آزاد شروع به کار می کنند و ترافیک کسانی که می خواهند از مرز عبور کنند بسیار کمتر می شود. در نتیجه بدون افزایش اندازه گمرک و تعداد کارکنان، توان عملیاتی و کارایی یک ایست بازرسی افزایش یافت. حتی قدرتمندترین هسته پردازنده نیز باید اطلاعات را بدون تاخیر دریافت کند تا بتواند به سرعت آن را پردازش کند. به محض اینکه یک "پلاگ" از داده ها در ورودی تشکیل می شود، پردازنده شروع به بیکار شدن می کند و منتظر پردازش این یا آن اطلاعات است. برای جلوگیری از این امر ، در سال 2002 ، فناوری Hyper-Threading ظاهر شد که ظاهر هسته دوم را در سیستم تقلید می کرد ، به همین دلیل پر شدن ظرفیت هسته سریعتر بود. همانطور که تمرین نشان داده است، تعداد کمی از مردم می دانند که فناوری Intel Hyper-Threading واقعا چگونه کار می کند. اکثر آنها مطمئن هستند که فقط چند هسته مجازی اضافی در پردازنده خود دارند. اما در واقع، تعداد هسته‌ها تغییر نمی‌کند، این تعداد رشته‌هاست که تغییر می‌کند، و این بسیار مهم است. فقط هر هسته یک کانال اضافی اطلاعات ورودی-خروجی دارد. در زیر ویدیویی از نحوه عملکرد واقعی آن وجود دارد. فناوری HT چگونه کار می کند، و جریان های اضافی از کجا می آیند؟ در واقع، همه چیز بسیار ساده است. برای پیاده سازی این فناوری، یک کنترلر و مجموعه ای از ثبات ها به هر هسته اضافه می شود. بنابراین، به محض اینکه جریان داده از پهنای باند یک کانال بیشتر شود، کانال دوم متصل می شود. بنابراین، بلوک های پردازنده بیکار حذف می شوند. در عصر پردازنده‌های تک هسته‌ای (Intel Pentium 4)، فناوری HT به نجات کسانی تبدیل شده است که نمی‌توانستند پردازنده گران‌تری (Pentium D) بخرند. اما امروزه موارد شناخته شده ای از کاهش عملکرد زمانی که HT فعال می شود وجود دارد. چرا این اتفاق می افتد؟ خیلی ساده است. برای موازی سازی داده ها و پردازش صحیح فرآیند، مقداری از توان پردازنده نیز مصرف می شود. و به محض وجود هسته های فیزیکی کافی برای پردازش اطلاعات بدون بلوک های بیکار، به دلیل منابع انتخاب شده توسط فناوری HT، عملکرد کمی کاهش می یابد. بنابراین، بدترین حالت برای Hyper-Threading عدم افزایش عملکرد نیست، بلکه کاهش آن است. اما در عمل، این اتفاق بسیار نادر است. با انتشار خط هشت هزارم پردازنده های Intel Core، این سوال به ویژه مهم شده است - آیا Hyper-Threading واقعا ضروری است؟ از این گذشته، حتی پردازنده‌های Core i5 دارای شش هسته کامل هستند. جدا از برنامه های حرفه ای برای پردازش گرافیکی، رندر و غیره، پس این احتمال وجود دارد که شش هسته فیزیکی برای همه برنامه ها و بازی های اداری کافی باشد. بنابراین، اگر در ابتدا اعتقاد بر این بود که فناوری HT تا 30٪ عملکرد پردازنده را اضافه می کند، اکنون این یک اصل موضوع نیست و همه چیز به سبک کار شما در رایانه و مجموعه ابزارهای مورد استفاده بستگی دارد. البته متن به صورت ...

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

بستر تحقیق

هدف آزمایش ها یک لپ تاپ ASUS N750JK با پردازنده Intel Core i7-4700HQ است. سرعت کلاک 2.4 گیگاهرتز، تا 3.4 گیگاهرتز با اینتل توربو بوست. 16 گیگابایت رم DDR3-1600 (PC3-12800) نصب شده که در حالت دو کاناله کار می کند. سیستم عامل - مایکروسافت ویندوز 8.1 64 بیت.

شکل 1 پیکربندی پلت فرم مورد بررسی.

پردازنده پلتفرم مورد مطالعه شامل 4 هسته است که با فعال شدن فناوری Hyper-Threading، پشتیبانی سخت افزاری از 8 رشته یا پردازنده های منطقی را فراهم می کند. سیستم عامل پلتفرم این اطلاعات را از طریق جدول ACPI Multiple APIC Description Table (MADT) به سیستم عامل منتقل می کند. از آنجایی که پلتفرم فقط یک کنترلر RAM دارد، هیچ SRAT (جدول پیوند منابع سیستم) وجود ندارد که نزدیکی هسته‌های پردازنده به کنترل‌کننده‌های حافظه را اعلام کند. بدیهی است که لپ تاپ مورد مطالعه یک پلتفرم NUMA نیست، اما سیستم عامل به منظور یکسان سازی، آن را به عنوان یک سیستم NUMA با یک دامنه در نظر می گیرد، همانطور که توسط خط NUMA Nodes = 1 نشان می دهد. این واقعیت برای ما اساسی است. آزمایش‌ها نشان می‌دهد که حافظه نهان سطح اول داده‌ها دارای اندازه 32 کیلوبایت برای هر یک از چهار هسته است. دو پردازنده منطقی که یک هسته تک هسته ای را به اشتراک می گذارند، کش های L1 و L2 را با هم به اشتراک می گذارند.

عملیات مورد بررسی قرار گرفت

ما وابستگی سرعت خواندن یک بلوک داده به اندازه آن را بررسی خواهیم کرد. برای انجام این کار، ما کارآمدترین روش را انتخاب می کنیم، یعنی خواندن عملوندهای 256 بیتی با استفاده از دستورالعمل VMOVAPD AVX. در نمودارها، محور X اندازه بلوک است، محور Y سرعت خواندن است. در مجاورت نقطه X، که با اندازه حافظه نهان سطح اول مطابقت دارد، انتظار داریم یک نقطه عطف ببینیم، زیرا عملکرد باید پس از خروج بلوک در حال پردازش از حافظه نهان کاهش یابد. در آزمایش ما، در مورد پردازش چند رشته ای، هر یک از 16 رشته شروع شده با محدوده جداگانه ای از آدرس ها عمل می کنند. برای کنترل فناوری Hyper-Threading در یک برنامه، هر رشته از تابع SetThreadAffinityMask API استفاده می کند که ماسکی را تنظیم می کند که در آن یک بیت با هر پردازنده منطقی مطابقت دارد. یک مقدار تک بیتی به پردازنده مشخص شده اجازه می دهد تا توسط جریان مشخص شده استفاده شود، یک مقدار صفر آن را غیرفعال می کند. برای 8 پردازنده منطقی پلتفرم مورد مطالعه، ماسک 11111111b امکان استفاده از همه پردازنده ها را می دهد (Hyper-Threading فعال است)، ماسک 01010101b امکان استفاده از یک پردازنده منطقی را در هر هسته (Hyper-Threading غیرفعال است).

از اختصارات زیر در نمودارها استفاده می شود:

MBPS (مگابایت در ثانیه)مسدود کردن سرعت خواندن بر حسب مگابایت در ثانیه;

CPI (ساعت در هر دستورالعمل)تعداد تیک در هر دستورالعمل;

TSC (شماره زمان)شمارنده چرخه پردازنده.

توجه: ممکن است سرعت کلاک رجیستر TSC با سرعت کلاک پردازنده هنگام کار در حالت Turbo Boost مطابقت نداشته باشد. این باید در هنگام تفسیر نتایج در نظر گرفته شود.

در سمت راست نمودارها، یک هگزادسیمال از دستورالعمل ها به تصویر کشیده می شود که بدنه حلقه عملیات هدف انجام شده در هر یک از جریان های برنامه یا 128 بایت اول این کد را تشکیل می دهد.

تجربه شماره 1 یک جریان



شکل 2 خواندن در یک جریان

حداکثر سرعت 213563 مگابایت بر ثانیه است. نقطه عطف در اندازه بلوک حدود 32 کیلوبایت رخ می دهد.

تجربه شماره 2 16 رشته برای 4 پردازنده، Hyper-Threading غیرفعال است



شکل 3 خواندن در شانزده موضوع. تعداد پردازنده های منطقی مورد استفاده چهار عدد می باشد

Hyper-Threading غیرفعال است. حداکثر سرعت 797598 مگابایت بر ثانیه است. نقطه عطف در اندازه بلوک حدود 32 کیلوبایت رخ می دهد. همانطور که انتظار می رفت، در مقایسه با خواندن یک رشته، سرعت از نظر تعداد هسته های کار تقریباً 4 برابر افزایش یافته است.

تجربه شماره 3. 16 رشته برای 8 پردازنده، Hyper-Threading فعال است



شکل 4 خواندن در شانزده موضوع. تعداد پردازنده های منطقی مورد استفاده هشت عدد است

Hyper-Threading فعال است. حداکثر سرعت 800722 مگابایت در ثانیه است؛ در نتیجه فعال کردن Hyper-Threading تقریباً افزایش نیافته است. نکته منفی بزرگ این است که نقطه عطف زمانی رخ می دهد که اندازه بلوک حدود 16 کیلوبایت باشد. فعال کردن Hyper-Threading کمی حداکثر سرعت را افزایش داد، اما کاهش سرعت اکنون زمانی اتفاق می‌افتد که اندازه بلوک نصف شود - حدود 16 کیلوبایت، بنابراین سرعت متوسط ​​به طور قابل توجهی کاهش یافته است. این تعجب آور نیست، هر هسته حافظه نهان L1 خود را دارد، در حالی که پردازنده های منطقی همان هسته آن را به اشتراک می گذارند.

نتیجه گیری

عملیات بررسی شده در یک پردازنده چند هسته ای به خوبی مقیاس می شود. دلایل - هر یک از هسته ها حاوی حافظه نهان خود در سطح اول و دوم است، اندازه بلوک هدف با اندازه حافظه پنهان قابل مقایسه است و هر یک از رشته ها با محدوده آدرس های خاص خود عمل می کنند. برای اهداف آکادمیک، ما چنین شرایطی را در یک آزمون مصنوعی ایجاد کردیم و متوجه شدیم که برنامه های کاربردی واقعی معمولاً از بهینه سازی ایده آل فاصله دارند. اما گنجاندن Hyper-Threading حتی در این شرایط نیز تأثیر منفی داشت، با افزایش اندک سرعت پیک، کاهش قابل توجهی در سرعت پردازش بلوک‌هایی که حجم آن‌ها بین 16 تا 32 کیلوبایت است، رخ می‌دهد. ژانویه 20, 2015 در 07:43 ب.ظ

یک بار دیگر در مورد Hyper-Threading

  • تست سیستم های فناوری اطلاعات،
  • برنامه نويسي

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

بستر تحقیق

هدف آزمایش ها یک لپ تاپ ASUS N750JK با پردازنده Intel Core i7-4700HQ است. سرعت کلاک 2.4 گیگاهرتز، تا 3.4 گیگاهرتز با اینتل توربو بوست. 16 گیگابایت رم DDR3-1600 (PC3-12800) نصب شده که در حالت دو کاناله کار می کند. سیستم عامل - مایکروسافت ویندوز 8.1 64 بیت.

شکل 1 پیکربندی پلت فرم مورد بررسی.

پردازنده پلتفرم مورد مطالعه شامل 4 هسته است که با فعال شدن فناوری Hyper-Threading، پشتیبانی سخت افزاری از 8 رشته یا پردازنده های منطقی را فراهم می کند. سیستم عامل پلتفرم این اطلاعات را از طریق جدول ACPI Multiple APIC Description Table (MADT) به سیستم عامل منتقل می کند. از آنجایی که پلتفرم فقط یک کنترلر RAM دارد، هیچ SRAT (جدول پیوند منابع سیستم) وجود ندارد که نزدیکی هسته‌های پردازنده به کنترل‌کننده‌های حافظه را اعلام کند. بدیهی است که لپ تاپ مورد مطالعه یک پلتفرم NUMA نیست، اما سیستم عامل به منظور یکسان سازی، آن را به عنوان یک سیستم NUMA با یک دامنه در نظر می گیرد، همانطور که توسط خط NUMA Nodes = 1 نشان می دهد. این واقعیت برای ما اساسی است. آزمایش‌ها نشان می‌دهد که حافظه نهان سطح اول داده‌ها دارای اندازه 32 کیلوبایت برای هر یک از چهار هسته است. دو پردازنده منطقی که یک هسته تک هسته ای را به اشتراک می گذارند، کش های L1 و L2 را با هم به اشتراک می گذارند.

عملیات مورد بررسی قرار گرفت

ما وابستگی سرعت خواندن یک بلوک داده به اندازه آن را بررسی خواهیم کرد. برای انجام این کار، ما کارآمدترین روش را انتخاب می کنیم، یعنی خواندن عملوندهای 256 بیتی با استفاده از دستورالعمل VMOVAPD AVX. در نمودارها، محور X اندازه بلوک است، محور Y سرعت خواندن است. در مجاورت نقطه X، که با اندازه حافظه نهان سطح اول مطابقت دارد، انتظار داریم یک نقطه عطف ببینیم، زیرا عملکرد باید پس از خروج بلوک در حال پردازش از حافظه نهان کاهش یابد. در آزمایش ما، در مورد پردازش چند رشته ای، هر یک از 16 رشته شروع شده با محدوده جداگانه ای از آدرس ها عمل می کنند. برای کنترل فناوری Hyper-Threading در یک برنامه، هر رشته از تابع SetThreadAffinityMask API استفاده می کند که ماسکی را تنظیم می کند که در آن یک بیت با هر پردازنده منطقی مطابقت دارد. یک مقدار تک بیتی به پردازنده مشخص شده اجازه می دهد تا توسط جریان مشخص شده استفاده شود، یک مقدار صفر آن را غیرفعال می کند. برای 8 پردازنده منطقی پلتفرم مورد مطالعه، ماسک 11111111b امکان استفاده از همه پردازنده ها را می دهد (Hyper-Threading فعال است)، ماسک 01010101b امکان استفاده از یک پردازنده منطقی را در هر هسته (Hyper-Threading غیرفعال است).

از اختصارات زیر در نمودارها استفاده می شود:

MBPS (مگابایت در ثانیه)مسدود کردن سرعت خواندن بر حسب مگابایت در ثانیه;

CPI (ساعت در هر دستورالعمل)تعداد تیک در هر دستورالعمل;

TSC (شماره زمان)شمارنده چرخه پردازنده.

توجه: ممکن است سرعت کلاک رجیستر TSC با سرعت کلاک پردازنده هنگام کار در حالت Turbo Boost مطابقت نداشته باشد. این باید در هنگام تفسیر نتایج در نظر گرفته شود.

در سمت راست نمودارها، یک هگزادسیمال از دستورالعمل ها به تصویر کشیده می شود که بدنه حلقه عملیات هدف انجام شده در هر یک از جریان های برنامه یا 128 بایت اول این کد را تشکیل می دهد.

تجربه شماره 1 یک جریان



شکل 2 خواندن در یک جریان

حداکثر سرعت 213563 مگابایت بر ثانیه است. نقطه عطف در اندازه بلوک حدود 32 کیلوبایت رخ می دهد.

تجربه شماره 2 16 رشته برای 4 پردازنده، Hyper-Threading غیرفعال است



شکل 3 خواندن در شانزده موضوع. تعداد پردازنده های منطقی مورد استفاده چهار عدد می باشد

Hyper-Threading غیرفعال است. حداکثر سرعت 797598 مگابایت بر ثانیه است. نقطه عطف در اندازه بلوک حدود 32 کیلوبایت رخ می دهد. همانطور که انتظار می رفت، در مقایسه با خواندن یک رشته، سرعت از نظر تعداد هسته های کار تقریباً 4 برابر افزایش یافته است.

تجربه شماره 3. 16 رشته برای 8 پردازنده، Hyper-Threading فعال است



شکل 4 خواندن در شانزده موضوع. تعداد پردازنده های منطقی مورد استفاده هشت عدد است

Hyper-Threading فعال است. حداکثر سرعت 800722 مگابایت در ثانیه است؛ در نتیجه فعال کردن Hyper-Threading تقریباً افزایش نیافته است. نکته منفی بزرگ این است که نقطه عطف زمانی رخ می دهد که اندازه بلوک حدود 16 کیلوبایت باشد. فعال کردن Hyper-Threading کمی حداکثر سرعت را افزایش داد، اما کاهش سرعت اکنون زمانی اتفاق می‌افتد که اندازه بلوک نصف شود - حدود 16 کیلوبایت، بنابراین سرعت متوسط ​​به طور قابل توجهی کاهش یافته است. این تعجب آور نیست، هر هسته حافظه نهان L1 خود را دارد، در حالی که پردازنده های منطقی همان هسته آن را به اشتراک می گذارند.

نتیجه گیری

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

اگر محتویات BIOS Setup را به دقت بررسی کرده باشید، احتمالاً متوجه گزینه CPU Hyper Threading Technology در آنجا شده اید. و ممکن است تعجب کرده باشید که Hyper Threading چیست (Hyper Threading Technology، نام رسمی Hyper Threading Technology، HTT)، و این گزینه برای چیست.

Hyper Threading یک فناوری نسبتاً جدید است که توسط اینتل برای پردازنده های معماری Pentium توسعه یافته است. همانطور که تمرین نشان داده است، استفاده از فناوری Hyper Threading در بسیاری از موارد اجازه می دهد تا عملکرد CPU را حدود 20-30٪ افزایش دهد.

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

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

البته برای رفع این مشکل می توانید چندین پردازنده را به طور همزمان در سیستم قرار دهید یا پردازنده هایی با استفاده از چندین هسته محاسباتی فیزیکی. اما معلوم می شود که چنین بهبودی گران، از نظر فنی دشوار است و از نقطه نظر عملی همیشه مؤثر نیست.

تاریخچه توسعه

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

پشتیبانی از فناوری Hyper Threading اولین بار در سال 2002 در پردازنده ها ظاهر شد. اینها پردازنده های خانواده Pentium 4 و پردازنده های سرور Xeon با سرعت کلاک بیش از 2 گیگاهرتز بودند. در ابتدا، نام رمز این فناوری جکسون بود، اما سپس نام آن به Hyper Threading تغییر یافت که برای عموم قابل درک تر است - که تقریباً می توان آن را به عنوان "سوپر نخ" ترجمه کرد.

در عین حال، طبق گفته اینتل، سطح دای پردازنده پشتیبانی از Hyper Threading در مقایسه با مدل قبلی که از آن پشتیبانی نمی‌کند تنها 5 درصد افزایش یافته است و میانگین عملکرد آن 20 درصد افزایش یافته است.

علیرغم این واقعیت که این فناوری عموماً عملکرد خوبی داشت، با این حال، به دلایل متعددی، شرکت اینتل تصمیم گرفت فناوری Hyper Threading را در پردازنده‌های Core 2 که جایگزین پردازنده‌های Pentium 4 شده بود، غیرفعال کند. آیوی بریج و هاسول که به طور قابل توجهی در آنها بازسازی شده اند.

جوهر تکنولوژی

درک فناوری Hyper Threading بسیار مهم است زیرا یکی از ویژگی های کلیدی در پردازنده های اینتل است.

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

اما هنوز تاخیر وجود دارد. تأخیر به دلیل نحوه تأمین داده های پردازنده برای هر یک از برنامه ها است. هر جریان داده باید در زمان مشخصی وارد شود و توسط پردازنده به صورت جداگانه پردازش شود. فناوری Hyper Threading این امکان را برای هر هسته پردازنده فراهم می کند تا پردازش داده ها را زمان بندی کند و منابع را به دو رشته به طور همزمان اختصاص دهد.

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

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

به محض اینکه رایانه ای را با پردازنده دو هسته ای که از Hyper Threading پشتیبانی می کند روشن می کنید و Task Manager ویندوز را از تب Performance باز می کنید، چهار نمودار را در آن خواهید دید. اما این بدان معنا نیست که شما در واقع 4 هسته پردازنده دارید.

این به این دلیل است که ویندوز فرض می کند که هر هسته دارای دو پردازنده منطقی است. اصطلاح "پردازنده منطقی" خنده دار به نظر می رسد، اما به معنای پردازنده ای است که از نظر فیزیکی وجود ندارد. ویندوز می تواند جریان هایی از داده ها را به هر پردازنده منطقی ارسال کند، اما در واقع فقط یک هسته کار را انجام می دهد. بنابراین، یک هسته با فناوری Hyper Threading تفاوت قابل توجهی با هسته های فیزیکی جداگانه دارد.

فناوری Hyper Threading به پشتیبانی از سخت افزار و نرم افزار زیر نیاز دارد:

  • CPU
  • چیپست مادربرد
  • سیستم عامل

مزایای فناوری

حالا بیایید سوال بعدی را در نظر بگیریم - فناوری Hyper Threading چقدر عملکرد رایانه را افزایش می دهد؟ در کارهای روزمره مانند گشت و گذار در اینترنت و تایپ کردن، مزایای فناوری چندان مشهود نیست. البته به خاطر داشته باشید که پردازنده های امروزی آنقدر قدرتمند هستند که کارهای روزمره به ندرت پردازنده را به طور کامل بارگذاری می کنند. علاوه بر این، مقدار زیادی به نحوه نگارش نرم افزار نیز بستگی دارد. شما می توانید چندین برنامه را همزمان اجرا کنید، اما با نگاه کردن به نمودار بار، خواهید دید که در هر هسته فقط از یک پردازنده منطقی استفاده می شود. این به این دلیل است که نرم افزار از توزیع فرآیندها بین هسته ها پشتیبانی نمی کند.

با این حال، در کارهای پیچیده تر، Hyper Threading می تواند مفیدتر باشد. برنامه‌هایی مانند نرم‌افزار مدل‌سازی سه‌بعدی، بازی‌های سه‌بعدی، نرم‌افزار رمزگذاری/رمزگشایی موسیقی یا ویدیو و بسیاری از برنامه‌های کاربردی علمی برای استفاده حداکثری از چند رشته‌ای نوشته شده‌اند. بنابراین، می‌توانید با انجام بازی‌های پیچیده، گوش دادن به موسیقی یا تماشای فیلم، از عملکرد رایانه‌ای با قابلیت Hyper Threading بهره ببرید. افزایش عملکرد می تواند تا 30٪ باشد، اگرچه ممکن است شرایطی وجود داشته باشد که Hyper Threading به هیچ وجه مزیتی ایجاد نکند. گاهی اوقات، در صورتی که هر دو رشته، تمام واحدهای اجرایی پردازنده را با وظایف یکسان بارگذاری کنند، حتی ممکن است عملکرد کمی کاهش یابد.

با بازگشت به وجود گزینه مربوطه در تنظیمات BIOS که به شما امکان می دهد پارامترهای Hyper Threading را تنظیم کنید، در بیشتر موارد توصیه می شود این عملکرد را فعال کنید. با این حال، اگر معلوم شد که رایانه با خطا کار می کند یا حتی عملکرد کمتری از آنچه انتظار داشتید، همیشه می توانید آن را خاموش کنید.

نتیجه

از آنجایی که حداکثر افزایش عملکرد هنگام استفاده از Hyper Threading 30 درصد است، نمی توان گفت که این فناوری معادل دو برابر کردن تعداد هسته های پردازنده است. با این وجود، Hyper Threading یک گزینه مفید است و به عنوان یک صاحب رایانه، به شما آسیبی نمی رساند. مزیت آن به ویژه قابل توجه است، به عنوان مثال، در مواردی که فایل های چند رسانه ای را ویرایش می کنید یا از رایانه به عنوان ایستگاه کاری برای برنامه های حرفه ای مانند Photoshop یا Maya استفاده می کنید.

ما نوشتیم که استفاده از سیستم های Xeon تک پردازنده بی معنی است، زیرا در قیمت بالاتر عملکرد آنها مانند پنتیوم 4 با فرکانس مشابه خواهد بود. اکنون، پس از مطالعه دقیق تر، احتمالاً باید اصلاح کوچکی در این بیانیه ایجاد شود. فناوری Hyper-Threading که در Intel Xeon با هسته Prestonia پیاده سازی شده است واقعاً کار می کند و جلوه قابل توجهی می دهد. اگرچه هنگام استفاده از آن سؤالات زیادی ایجاد می شود ...

عملکرد بدهد

"سریع تر، حتی سریع تر ...". رقابت برای عملکرد سال‌هاست که ادامه دارد، و گاهی اوقات حتی دشوار است که بگوییم کدام جزء رایانه شما سریع‌تر شتاب می‌گیرد. برای این کار، راه‌های جدید بیشتری ابداع می‌شود، و هر چه بیشتر، نیروی کار ماهر و مغزهای باکیفیت‌تر در این فرآیند شبیه بهمن سرمایه‌گذاری می‌شود.

مطمئناً افزایش مداوم عملکرد مورد نیاز است. حداقل، این یک تجارت سودآور است، و همیشه یک راه زیبا برای تشویق کاربران به ارتقای "CPU فوق العاده" دیروز به "حتی فوق العاده تر" فردا وجود خواهد داشت. به عنوان مثال، تشخیص همزمان گفتار و ترجمه همزمان به زبان دیگر آرزوی همه نیست؟ یا بازی‌های غیرمعمول واقع‌گرایانه با کیفیت تقریباً «سینمایی» (کاملاً توجه را جذب می‌کنند و گاهی منجر به تغییرات جدی در روان می‌شوند) - آیا این آرزوی بسیاری از گیمرها، از پیر و جوان نیست؟

اما اجازه دهید در این مورد، جنبه های بازاریابی را خارج از جعبه برداریم و بر جنبه های فنی تمرکز کنیم. علاوه بر این، همه چیز آنقدر غمگین نیست: کارهای فوری (برنامه های کاربردی سرور، محاسبات علمی، مدل سازی و غیره) وجود دارد، جایی که عملکرد بالاتر، به ویژه پردازنده های مرکزی، واقعاً ضروری است.

بنابراین، چه راه هایی برای افزایش عملکرد آنها وجود دارد؟

اورکلاک کردن... این امکان وجود دارد که فرآیند تکنولوژیکی را بیشتر "نازک" کرد و فرکانس را افزایش داد. اما، همانطور که می دانید، این کار آسانی نیست و مملو از انواع عوارض جانبی مانند مشکلات اتلاف گرما است.

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

علاوه بر این، دو روش قبلی، به عنوان یک قاعده، افزایش خطی در بهره وری را ارائه نمی دهند. این در مثال پنتیوم 4 به خوبی شناخته شده است: خطاها در پیش‌بینی انشعاب و وقفه‌ها باعث می‌شود یک خط لوله طولانی از بین برود که به شدت بر عملکرد کلی تأثیر می‌گذارد.

پردازش چندگانه... نصب چندین CPU و توزیع کار بین آنها اغلب بسیار کارآمد است. اما این رویکرد خیلی ارزان نیست - هر پردازنده اضافی هزینه سیستم را افزایش می دهد و یک مادربرد دوگانه بسیار گرانتر از یک مادربرد معمولی است (به مادربردهایی با پشتیبانی از چهار یا بیشتر CPU اشاره نکنیم). علاوه بر این، همه برنامه ها از عملکرد چند پردازنده به اندازه کافی برای توجیه هزینه بهره نمی برند.

علاوه بر چند پردازش "خالص"، چندین گزینه "متوسط" برای سرعت بخشیدن به اجرای برنامه ها وجود دارد:

چند پردازش تراشه (CMP)- دو هسته پردازنده به صورت فیزیکی روی یک قالب با استفاده از یک کش مشترک یا جداگانه قرار دارند. به طور طبیعی، اندازه کریستال بسیار بزرگ است و این نمی تواند روی هزینه تأثیر بگذارد. توجه داشته باشید که چندین مورد از این CPUهای "دوگانه" می توانند روی یک سیستم چند پردازنده نیز اجرا شوند.

Time-Slice Multithreading... پردازنده در فواصل زمانی مشخصی بین رشته های برنامه سوئیچ می کند. سربار ممکن است گاهی اوقات بسیار چشمگیر باشد، به خصوص اگر فرآیندی در حال تعلیق باشد.

Switch-on-Event Multithreading... جابه‌جایی وظایف زمانی که مکث‌های طولانی اتفاق می‌افتد، مانند «از دست رفتن حافظه پنهان»، که تعداد زیادی از آن‌ها برای برنامه‌های سرور معمولی هستند. در این حالت، فرآیندی که منتظر بارگذاری داده ها از حافظه نسبتاً کند در حافظه نهان است، به حالت تعلیق درآمده و منابع CPU را برای سایر فرآیندها آزاد می کند. با این حال، Switch-on-Event Multithreading، مانند Time-Slice Multithreading، همیشه امکان دستیابی به استفاده بهینه از منابع پردازنده را نمی دهد، به ویژه به دلیل خطا در پیش بینی شاخه، وابستگی دستورالعمل ها و غیره.

چند رشته ای همزمان... در این مورد، رشته های برنامه بر روی یک پردازنده "به طور همزمان" اجرا می شوند، یعنی بدون جابجایی بین آنها. منابع CPU طبق اصل "اگر از آن استفاده نمی کنید، آن را به شخص دیگری بدهید" به صورت پویا تخصیص داده می شود. این رویکرد است که زیربنای فناوری Intel Hyper-Threading است که اکنون به آن می پردازیم.

Hyper-Threading چگونه کار می کند

همانطور که می دانید، "پارادایم محاسباتی" فعلی، محاسبات چند رشته ای را فرض می کند. این نه تنها در مورد سرورها که در ابتدا چنین مفهومی وجود دارد، بلکه برای ایستگاه های کاری و سیستم های دسکتاپ نیز صدق می کند. Thread ها می توانند به یک یا برنامه های مختلف اشاره کنند، اما تقریباً همیشه بیش از یک رشته فعال وجود دارد (برای اطمینان از این موضوع، کافی است Task Manager را در Windows 2000 / XP باز کنید و نمایش تعداد رشته ها را روشن کنید) . در همان زمان، یک پردازنده معمولی می تواند تنها یکی از رشته ها را در یک زمان اجرا کند و مجبور است دائماً بین آنها سوئیچ کند.

برای اولین بار، فناوری Hyper-Threading در پردازنده Intel Xeon MP (Foster MP) پیاده سازی شد که روی آن آزمایش شد. به یاد بیاورید که Xeon MP که به طور رسمی در IDF Spring 2002 ارائه شد، از هسته Pentium 4 Willamette استفاده می کند، حاوی 256 کیلوبایت حافظه نهان L2 و 512 کیلوبایت / 1 مگابایت کش L3 است و از پیکربندی های 4 پردازنده پشتیبانی می کند. همچنین، پشتیبانی از Hyper-Threading در پردازنده ایستگاه های کاری - Intel Xeon (هسته Prestonia، حافظه نهان L2 512 کیلوبایت)، که کمی زودتر از Xeon MP به بازار آمد، وجود دارد. خوانندگان ما قبلاً با پیکربندی‌های پردازنده دوگانه در Intel Xeon آشنا هستند، بنابراین ما قابلیت‌های Hyper-Threading را با استفاده از این CPUها به عنوان مثال در نظر خواهیم گرفت - هم از نظر تئوری و هم از لحاظ عملی. به هر حال، یک Xeon "ساده" یک چیز پیش پا افتاده تر و قابل هضم تر از Xeon MP در سیستم های 4 پردازنده است ...

اصل Hyper-Threading بر این واقعیت استوار است که در هر زمان معین، تنها بخشی از منابع پردازنده در هنگام اجرای کد برنامه استفاده می شود. منابع استفاده نشده نیز می توانند با کار بارگیری شوند - برای مثال، می توان از آنها برای اجرای موازی برنامه دیگری (یا رشته دیگری از همان برنامه) استفاده کرد. در یک پردازنده فیزیکی Intel Xeon، دو پردازنده منطقی (LP - Logical Processor) تشکیل شده است که منابع محاسباتی CPU را به اشتراک می گذارند. سیستم عامل و برنامه‌ها دقیقاً دو CPU را می‌بینند و می‌توانند کار را بین آنها توزیع کنند، همانطور که در مورد یک سیستم دو پردازنده تمام عیار است.

یکی از اهداف پیاده سازی Hyper-Threading این است که در صورت وجود تنها یک رشته فعال، به آن اجازه دهیم با همان سرعتی که در یک CPU معمولی وجود دارد، اجرا شود. برای این، پردازنده دارای دو حالت عملکرد اصلی است: Single-Task (ST) و Multi-Task (MT). در حالت ST، تنها یک پردازنده منطقی فعال است که از منابع موجود (حالت ST0 و ST1) بهره کامل می برد. LP دیگر با دستور HALT متوقف شد. هنگامی که رشته برنامه دوم ظاهر می شود، پردازنده منطقی بیکار فعال می شود (از طریق یک وقفه) و CPU فیزیکی در حالت MT قرار می گیرد. توقف LP های استفاده نشده با دستور HALT بر عهده سیستم عامل است که در نهایت مسئولیت اجرای سریع یک رشته مانند حالت بدون Hyper-Threading را بر عهده دارد.

برای هر یک از دو LP، اصطلاحاً وضعیت معماری (AS) ذخیره می شود که شامل وضعیت انواع رجیسترها - منظور عمومی، کنترل، APIC و سرویس است. هر LP دارای APIC (کنترل کننده وقفه) و مجموعه ای از رجیسترها است که برای عملکرد صحیح، مفهوم Register Alias ​​Table (RAT) معرفی شده است، که مکاتبات بین هشت رجیستر IA-32 همه منظوره و 128 را نظارت می کند. رجیسترهای فیزیکی CPU (یک RAT برای هر LP).

هنگام کار با دو جریان، دو مجموعه متناظر از نشانگرهای دستورالعمل بعدی پشتیبانی می شوند. بیشتر دستورالعمل‌ها از Trace Cache (TC) گرفته می‌شوند، جایی که به شکل رمزگشایی ذخیره می‌شوند، و دو LP فعال به طور متناوب، از طریق یک چرخه ساعت، به TC دسترسی پیدا می‌کنند. در همان زمان، زمانی که تنها یک LP فعال است، بدون اینکه ساعت را در هم بریزد، به TC دسترسی انحصاری پیدا می کند. دسترسی به رام میکروکد نیز به همین صورت انجام می شود. بلوک‌های ITLB (Instruction Translation Look-Aside Buffer) که در غیاب دستورالعمل‌های لازم در کش دستورالعمل استفاده می‌شوند، کپی می‌شوند و هر کدام دستورالعمل‌ها را برای جریان خود ارائه می‌دهند. واحد رمزگشای دستورالعمل IA-32 Instruction Decode مشترک است و هنگامی که نیاز به رمزگشایی دستورالعمل‌ها برای هر دو جریان باشد، آنها را یکی یکی (دوباره، در هر چرخه ساعت) ارائه می‌کند. بلوک‌های Uop Queue و Allocator به دو قسمت تقسیم می‌شوند و نیمی از عناصر را برای هر LP اختصاص می‌دهند. زمانبندها، 5 عدد، صف های دستورات رمزگشایی شده (Uops) را با وجود تعلق به LP0 / LP1 پردازش می کنند و بسته به آمادگی برای اجرای اولی و در دسترس بودن دومی، دستوراتی را برای اجرای واحدهای اجرایی لازم ارسال می کنند. حافظه پنهان همه سطوح (L1 / L2 برای Xeon، و همچنین L3 برای Xeon MP) به طور کامل بین دو LP به اشتراک گذاشته شده است، با این حال، برای اطمینان از یکپارچگی داده ها، رکوردها در DTLB (Data Translation Look-Aside Buffer) با توصیفگرهایی در شکل شناسه های پردازشگر منطقی

بنابراین، دستورالعمل های هر دو CPU منطقی می توانند به طور همزمان بر روی منابع یک پردازنده فیزیکی اجرا شوند که به چهار کلاس تقسیم می شوند:

  • تکراری (کپی شده);
  • به طور کامل به اشتراک گذاشته شده (به طور کامل به اشتراک گذاشته شده)؛
  • با توصیف عناصر (Entry Tagged);
  • بسته به حالت عملکرد ST0 / ST1 یا MT به صورت پویا پارتیشن بندی می شود.

در عین حال، بیشتر برنامه‌های کاربردی شتاب‌دهی شده در سیستم‌های چند پردازنده‌ای را می‌توان بر روی یک CPU با فعال بودن Hyper-Threading بدون هیچ گونه تغییری تسریع کرد. اما مشکلاتی نیز وجود دارد: برای مثال، اگر یک فرآیند در یک حلقه انتظار باشد، می‌تواند تمام منابع CPU فیزیکی را اشغال کند و از کارکرد LP دوم جلوگیری کند. بنابراین، عملکرد در هنگام استفاده از Hyper-Threading گاهی اوقات می تواند کاهش یابد (تا 20٪). برای جلوگیری از این امر، اینتل توصیه می کند به جای حلقه های انتظار خالی، از دستورالعمل PAUSE (که در IA-32 از پنتیوم 4 معرفی شده است) استفاده کنید. کار بسیار جدی نیز در مورد بهینه سازی کد خودکار و نیمه خودکار در حین کامپایل در حال انجام است - به عنوان مثال، کامپایلرهای سری Intel OpenMP C ++ / Fortran Compilers () در این زمینه پیشرفت چشمگیری داشته اند.

یکی دیگر از اهداف اولین اجرای Hyper-Threading، طبق گفته اینتل، به حداقل رساندن افزایش تعداد ترانزیستورها، سطح دای و مصرف انرژی با افزایش قابل توجه عملکرد بود. بخش اول این تعهد قبلاً محقق شده است: اضافه شدن پشتیبانی از Hyper-Threading به Xeon / Xeon MP باعث افزایش سطح دای و مصرف انرژی کمتر از 5٪ شده است. اتفاقی که با قسمت دوم (اجرا) افتاد، هنوز باید بررسی کنیم.

بخش عملی

به دلایل واضح، ما سیستم‌های سرور 4 پردازنده را روی یک Xeon MP با فعال بودن Hyper-Threading آزمایش نکردیم. اول اینکه کاملا وقت گیر است. و ثانیاً ، اگر در مورد چنین شاهکاری تصمیم بگیریم - به هر حال ، اکنون ، کمتر از یک ماه پس از اعلام رسمی ، تهیه این تجهیزات گران قیمت کاملاً غیر واقعی است. بنابراین، تصمیم گرفته شد که خود را به همان سیستم با دو Intel Xeon 2.2 گیگاهرتز محدود کنیم، که اولین آزمایش این پردازنده ها بر روی آنها انجام شد (به لینک در ابتدای مقاله مراجعه کنید). این سیستم مبتنی بر یک مادربرد Supermicro P4DC6 + (چیپست Intel i860)، حاوی 512 مگابایت RDRAM، یک کارت گرافیک مبتنی بر تراشه GeForce3 (64 مگابایت DDR، درایورهای Detonator 21.85)، یک هارد دیسک Western Digital WD300BB و 6X DVD- بود. رام Windows 2000 Professional SP2 به عنوان یک سیستم عامل استفاده شد.

ابتدا چند برداشت کلی. هنگام نصب یک Xeon با هسته Prestonia، در شروع سیستم، BIOS پیامی در مورد وجود دو CPU نمایش می دهد. اگر دو پردازنده نصب شده باشد، کاربر پیامی در مورد چهار CPU می بیند. سیستم عامل به طور معمول "هر دو پردازنده" را تشخیص می دهد، اما تنها در صورتی که دو شرط وجود داشته باشد.

اولاً، در تنظیمات CMOS آخرین نسخه های BIOS بردهای Supermicro P4DCxx، مورد Enable Hyper-Threading ظاهر شده است که بدون آن سیستم عامل فقط پردازنده (های) فیزیکی را تشخیص می دهد. دوم، از قابلیت های ACPI برای اطلاع رسانی به سیستم عامل در مورد حضور پردازنده های منطقی اضافی استفاده می شود. بنابراین، برای فعال کردن Hyper-Threading، باید گزینه ACPI در CMOS Setup فعال شود و HAL (لایه انتزاعی سخت افزار) با پشتیبانی ACPI نیز باید برای خود سیستم عامل نصب شود. خوشبختانه، در ویندوز 2000، تغییر HAL از PC استاندارد (یا MPS Uni-/Multiprocessor PC) به ACPI Uni-/Multiprocessor PC آسان است - با جایگزینی "درایور کامپیوتر" در مدیر دستگاه. در عین حال، برای ویندوز XP، تنها راه قانونی برای مهاجرت به ACPI HAL، نصب مجدد سیستم بر روی نصب موجود است.

اما اکنون تمام مقدمات انجام شده است و ویندوز 2000 پرو ما قاطعانه معتقد است که روی یک سیستم دو پردازنده کار می کند (اگرچه در واقع فقط یک پردازنده نصب شده است). اکنون، به طور سنتی، زمان تصمیم گیری در مورد اهداف آزمایش است. بنابراین ما می خواهیم:

  • ارزیابی تاثیر Hyper-Threading بر عملکرد برنامه های کاربردی کلاس های مختلف.
  • این اثر را با تأثیر نصب پردازنده دوم مقایسه کنید.
  • بررسی کنید که چگونه منابع "عادلانه" به پردازنده منطقی فعال در زمانی که LP دوم بیکار است داده می شود.

برای ارزیابی عملکرد، مجموعه‌ای از برنامه‌های کاربردی را انتخاب کردیم که قبلاً برای خوانندگان ما آشنا بوده و در آزمایش سیستم‌های ایستگاه کاری استفاده می‌شوند. بیایید از آخر شروع کنیم و "عادلانه بودن" CPUهای منطقی را بررسی کنیم. همه چیز بسیار ساده است: ابتدا تست‌هایی را روی یک پردازنده با غیرفعال بودن Hyper-Threading اجرا می‌کنیم و سپس فرآیند را تکرار می‌کنیم، Hyper-Threading را فعال می‌کنیم و تنها از یکی از دو CPU منطقی استفاده می‌کنیم (با استفاده از Task Manager). از آنجایی که در این مورد ما فقط به مقادیر نسبی علاقه مندیم، نتایج همه آزمایش ها به "بزرگتر بهتر است" کاهش می یابد و عادی می شود (شاخص های یک سیستم تک پردازنده بدون Hyper-Threading به عنوان یک واحد در نظر گرفته می شود).

خب، همانطور که می بینید، وعده های اینتل در اینجا محقق شده است: تنها با یک رشته فعال، عملکرد هر یک از دو LP دقیقا برابر با سرعت یک CPU فیزیکی بدون Hyper-Threading است. یک LP غیرفعال (هر دو LP0 و LP1) در واقع به حالت تعلیق درآمده و منابع مشترک، تا آنجا که می توانیم از نتایج به دست آمده قضاوت کنیم، به طور کامل به استفاده از LP فعال منتقل می شوند.

بنابراین، ما اولین نتیجه را می گیریم: دو پردازنده منطقی در واقع برابر هستند و فعال کردن Hyper-Threading با کار یک رشته "تداخلی" نمی کند (که به خودی خود بد نیست). حال بیایید ببینیم که آیا این گنجاندن "کمک می کند"، و اگر چنین است، کجا و چگونه؟

تفسیر... نتایج چهار آزمایش در بسته های مدل سازی سه بعدی 3D Studio MAX 4.26، Lightwave 7b و A | W Maya 4.0.1 به دلیل شباهت آنها در یک نمودار ترکیب شده است.

در هر چهار مورد (برای Lightwave - دو صحنه مختلف)، بارگذاری CPU با یک پردازنده با Hyper-Threading غیرفعال شده تقریباً همیشه در 100٪ نگه داشته می شود. با این وجود، وقتی Hyper-Threading فعال است، محاسبه صحنه تسریع می‌شود (در نتیجه ما حتی یک شوخی در مورد بار CPU بیش از 100٪ داشتیم). در سه آزمایش، ما می‌توانیم شاهد افزایش 14-18 درصدی عملکرد Hyper-Threading باشیم - از یک طرف، در مقایسه با CPU دوم زیاد نیست، اما از طرف دیگر، با توجه به اثر "رایگان" بسیار خوب است. از این اثر در یکی از دو تست با Lightwave، افزایش عملکرد عملاً صفر است (ظاهراً این به دلیل خاص بودن این برنامه است که پر از عجیب و غریب است). اما نتیجه منفی در هیچ کجا وجود ندارد و افزایش محسوس در سه مورد دیگر دلگرم کننده است. و این در حالی است که فرآیندهای رندر موازی کار مشابهی را انجام می دهند و به احتمال زیاد ممکن است بهترین راه برای استفاده همزمان از منابع CPU فیزیکی نباشد.

کدگذاری فتوشاپ و MP3... کدک GOGO-no-coda 2.39c یکی از معدود کدک هایی است که از SMP پشتیبانی می کند و عملکردی 34 درصدی را از فناوری دو پردازنده نشان می دهد. در عین حال، تأثیر Hyper-Threading در این مورد صفر است (3٪ اختلاف را قابل توجه نمی دانیم). اما در آزمایش با فتوشاپ 6.0.1 (اسکریپتی متشکل از مجموعه بزرگی از دستورات و فیلترها) می توانید با فعال کردن Hyper-Threading شاهد کاهش سرعت باشید، اگرچه پردازنده فیزیکی دوم در این مورد 12 درصد عملکرد را اضافه می کند. این در واقع اولین موردی است که Hyper-Threading باعث کاهش عملکرد می شود ...

OpenGL حرفه ای... مدتهاست که مشخص شده است که SPEC ViewPerf و بسیاری از برنامه های OpenGL دیگر اغلب در سیستم های SMP کند می شوند.

OpenGL و پردازشگر دوگانه: چرا آنها دوست نیستند

بارها در مقالات خود توجه خوانندگان را به این واقعیت جلب کرده‌ایم که پلتفرم‌های دو پردازنده در هنگام انجام تست‌های حرفه‌ای OpenGL به ندرت مزیت قابل توجهی نسبت به تک‌پردازنده‌ها نشان می‌دهند. علاوه بر این، اغلب مواردی وجود دارد که نصب یک پردازنده دوم، برعکس، عملکرد سیستم را هنگام ارائه صحنه های سه بعدی پویا کاهش می دهد.

به طور طبیعی، نه تنها ما متوجه این عجیب و غریب شدیم. برخی از آزمایش‌کنندگان به سادگی این واقعیت را دور زدند - به عنوان مثال، با استناد به نتایج معیار SPEC ViewPerf فقط برای پیکربندی‌های پردازنده دوگانه، بنابراین از توضیح "چرا یک سیستم دو پردازنده کندتر است؟" دیگران تمام فرضیات خارق العاده ممکن را در مورد انسجام حافظه پنهان، نیاز به حفظ آن، سربار حاصل و غیره مطرح کردند. و به دلایلی هیچ کس تعجب نکرد که به عنوان مثال، پردازنده ها برای نظارت بر انسجام پردازنده ها دقیقاً در حین رندر OpenGL پنجره ای بی تاب بودند (از نظر ماهیت "محاسباتی" آن، تفاوت زیادی با هر مشکل محاسباتی دیگری ندارد) .

در واقع، توضیح، به نظر ما، بسیار ساده تر است. همانطور که می دانید، یک برنامه می تواند روی دو پردازنده سریعتر از یک پردازنده اجرا شود اگر:

  • بیش از دو یا چند رشته به طور همزمان در حال اجرا هستند.
  • این رشته ها در اجرای یکدیگر تداخلی ندارند - برای مثال، آنها برای یک منبع مشترک مانند یک دستگاه ذخیره سازی خارجی یا یک رابط شبکه رقابت نمی کنند.

حال بیایید نگاهی ساده به اینکه رندر OpenGL زمانی که توسط دو رشته انجام می شود چگونه به نظر می رسد بیاندازیم. اگر برنامه با "دیدن" دو پردازنده، دو رشته از رندر OpenGL ایجاد کند، سپس برای هر یک از آنها، طبق قوانین OpenGL، زمینه gl خود ایجاد می شود. بر این اساس، هر رشته به gl-context خود ارائه می شود. اما مشکل اینجاست که برای پنجره‌ای که تصویر در آن نمایش داده می‌شود، تنها یک متن gl می‌تواند در هر لحظه جاری باشد. بر این اساس، نخ ها در این مورد به سادگی "به نوبه خود" تصویر تولید شده را به پنجره خروجی می دهند و متناوب متن خود را جریان می دهند. ناگفته نماند که این «تغییر زمینه ها» از نظر سربار می تواند بسیار گران تمام شود؟

همچنین، برای مثال، نمودارهایی از استفاده از دو CPU در چندین برنامه نمایش دهنده صحنه های OpenGL ارائه خواهیم داد. تمام اندازه‌گیری‌ها بر روی یک پلت فرم با پیکربندی زیر انجام شد:

  • یک یا دو Intel Xeon 2.2 گیگاهرتز (Hyper-Threading غیرفعال است).
  • 512 مگابایت حافظه RDRAM;
  • مادربرد Supermicro P4DC6 +
  • کارت گرافیک ASUS V8200 Deluxe (NVidia GeForce3، 64 مگابایت DDR SDRAM، درایورهای Detonator 21.85)؛
  • Windows 2000 Professional SP2
  • حالت ویدیویی 1280x1024x32 bpp، 85 هرتز، Vsync غیرفعال است.

آبی و قرمز به ترتیب نمودارهای استفاده از CPU 0 و CPU 1 را نشان می دهند. خط وسط نمودار نهایی استفاده از CPU است. این سه نمودار مربوط به دو صحنه از 3D Studio MAX 4.26 و بخشی از معیار SPEC ViewPerf (AWadvs-04) است.


استفاده از CPU: Animation 3D Studio MAX 4.26 - Anibal (با دستکاری کننده ها) .max


استفاده از CPU: انیمیشن 3D Studio MAX 4.26 - Rabbit.max


استفاده از CPU: SPEC ViewPerf 6.1.2 - AWadvs-04

همین الگو در بسیاری از برنامه های کاربردی دیگر که از OpenGL استفاده می کنند تکرار می شود. دو پردازنده اصلاً کار را به زحمت نمی اندازند و کل استفاده از CPU در سطح 50-60٪ است. در عین حال، برای یک سیستم تک پردازنده، در تمام این موارد، استفاده از CPU با اطمینان در 100٪ نگه داشته می شود.

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

می‌توانیم بگوییم که با دو CPU منطقی، افت عملکرد حتی قابل‌توجه‌تر است، که کاملاً قابل درک است: دو پردازنده منطقی به همان شکلی که دو پردازنده فیزیکی با یکدیگر تداخل دارند. اما عملکرد کلی آنها، به طور طبیعی، پایین تر است، بنابراین وقتی Hyper-Threading فعال است، حتی بیشتر از زمانی که دو CPU فیزیکی در حال اجرا هستند، کاهش می یابد. نتیجه قابل پیش بینی است و نتیجه گیری ساده است: Hyper-Threading، مانند SMP "واقعی"، گاهی اوقات برای OpenGL ممنوع است.

برنامه های کاربردی CAD... نتیجه گیری قبلی با نتایج دو آزمایش CAD تأیید می شود - SPECapc برای SolidEdge V10 و SPECapc برای SolidWorks. عملکرد گرافیکی این تست ها برای Hyper-Threading مشابه است (اگرچه در مورد سیستم SMP برای SolidEdge V10، نتیجه کمی بالاتر است). اما نتایج آزمایش‌های CPU_Score که پردازنده را بارگذاری می‌کند، شما را به این فکر می‌اندازد: 5-10٪ سود از SMP و 14-19٪ کاهش سرعت از Hyper-Threading.

اما در پایان، اینتل صادقانه در برخی موارد احتمال کاهش عملکرد در طول Hyper-Threading را می پذیرد - به عنوان مثال، هنگام استفاده از حلقه های انتظار خالی. ما فقط می توانیم فرض کنیم که این دلیل است (مطالعه دقیق کدهای SolidEdge و SolidWorks خارج از محدوده این مقاله است). از این گذشته، همه محافظه کاری توسعه دهندگان CAD را می شناسند که قابلیت اطمینان ثابت شده را ترجیح می دهند و عجله خاصی برای بازنویسی کد با در نظر گرفتن روندهای جدید در برنامه نویسی ندارند.

خلاصه کردن یا "توجه، سوال درست"

Hyper-Threading کار می کند، در این شکی نیست. البته، این فناوری جهانی نیست: برنامه هایی وجود دارند که از Hyper-Threading "بدتر" هستند، و اگر این فناوری گسترش یابد، اصلاح آنها مطلوب است. اما آیا همین اتفاق در زمان مقرر در مورد MMX و SSE رخ نداده و همچنان با SSE2 ادامه دارد؟ ..

با این حال، این سوال را در مورد کاربردی بودن این فناوری در واقعیت های ما مطرح می کند. نوع سیستم تک پردازنده مبتنی بر Xeon با Hyper-Threading را فوراً کنار می‌گذاریم (یا اجازه می‌دهیم موقتی باشد، در انتظار خرید پردازنده دوم): حتی افزایش 30 درصدی عملکرد، قیمت را توجیه نمی‌کند. به هر حال - پس بهتر است یک پنتیوم 4 معمولی بخرید. تعداد CPU ها از دو یا بیشتر باقی می ماند.

حالا بیایید تصور کنیم که در حال خرید یک سیستم Xeon دو پردازنده هستیم (مثلاً با ویندوز 2000 / XP Professional). دو CPU نصب شده است، Hyper-Threading روشن است، BIOS به اندازه چهار پردازنده منطقی پیدا می کند، اکنون، چگونه می توانیم آن را خاموش کنیم ... توقف کنید. اما سیستم عامل ما چند پردازنده خواهد دید؟ درست است، دو. فقط دو، زیرا به سادگی برای تعداد بیشتری طراحی نشده است. اینها دو پردازنده فیزیکی خواهند بود، یعنی همه چیز دقیقاً مانند Hyper-Threading غیرفعال کار می کند - نه آهسته تر (دو CPU منطقی "اضافی" به سادگی متوقف می شوند)، اما نه سریع تر (تأیید شده توسط آزمایش های اضافی، نتایج به دست نمی آید. به دلیل شواهد کامل آنها ارائه شده است). هوم، کمی دلپذیر...

آنچه باقی مانده؟ خوب، آیا سرور پیشرفته یا سرور دات نت را روی ایستگاه کاری ما قرار نمی دهید؟ خیر، سیستم خود را نصب می کند، هر چهار پردازنده منطقی را می شناسد و کار می کند. اما سیستم عامل سرور در یک ایستگاه کاری کمی عجیب به نظر می رسد (بدون ذکر جنبه های مالی). تنها مورد معقول این است که سیستم Xeon با پردازنده دوگانه ما به عنوان یک سرور عمل کند (حداقل برخی از کلکسیونرها قبلاً بدون تردید تولید سرورها را روی ایستگاه های کاری-پردازنده Xeon راه اندازی کرده اند). اما برای ایستگاه های کاری دوگانه با سیستم عامل های متناظر، کاربرد Hyper-Threading همچنان مشکوک است. اینتل اکنون فعالانه از صدور مجوز سیستم عامل بر اساس تعداد CPUهای نه منطقی، بلکه فیزیکی حمایت می کند. بحث‌ها هنوز ادامه دارد و به طور کلی، خیلی به این بستگی دارد که آیا سیستم‌عاملی برای ایستگاه‌های کاری با پشتیبانی از چهار پردازنده خواهیم دید یا خیر.

خوب، با سرورها، همه چیز کاملاً ساده ظاهر می شود. به عنوان مثال، سرور پیشرفته ویندوز 2000 که بر روی یک سیستم Xeon با پردازنده دوگانه با فعال بودن Hyper-Threading نصب شده است، چهار پردازنده منطقی را "ببین" و به راحتی روی آن اجرا می شود. برای ارزیابی مزایای Hyper-Threading در سیستم‌های سرور، ما نتایج آزمایشگاه‌های نرم‌افزار میکروپروسسوری اینتل را برای سیستم‌های Xeon MP با پردازنده دوگانه و چندین برنامه سرور مایکروسافت ارائه می‌کنیم.

افزایش 20 تا 30 درصدی عملکرد برای سرور دو پردازنده "رایگان" بیش از حد وسوسه انگیز است (به ویژه در مقایسه با خرید یک سیستم 4 پردازنده "واقعی").

بنابراین معلوم می شود که در حال حاضر کاربرد عملی Hyper-Threading فقط در سرورها امکان پذیر است. مشکل ایستگاه های کاری به راه حل صدور مجوز سیستم عامل بستگی دارد. با این حال، یکی دیگر از کاربردهای Hyper-Threading کاملاً واقعی است - اگر پردازنده‌های دسکتاپ نیز از این فناوری پشتیبانی کنند. به عنوان مثال (بیایید خیال پردازی کنیم)، چرا سیستمی با پنتیوم 4 با پشتیبانی Hyper-Threading و Windows 2000 / XP Professional با پشتیبانی SMP نصب شده است؟ - از سرورها گرفته تا سیستم های دسکتاپ و موبایل.



© 2021 skypenguin.ru - نکاتی برای مراقبت از حیوانات خانگی