Обложка канала

Goal Gesture программирование, IT

Новости, статьи и полезные материалы из мира IT

Goal Gesture программирование, IT

4 года назад
Открыть в
​​Что важнее: ядра или потоки? Что такое технология мультипоточности и для чего она нужна? Если очень просто - то это второй поток команд, который используется планировщиком задач операционной системы, чтобы использовать ресурсы процессора более эффективно. А теперь чуть сложнее. Во время работы к вычислительным ядрам процессора идет непрерывный поток команд от планировщика операционной системы. Теперь представим, что у нас процессор на 1 ядро и 1 поток и мы работаем в какой-то программе. У нас все хорошо, так как поток команд от этой программы идет на ядро, оно его обрабатывает - все гуд. Теперь открываем еще одну программу. Планировщик также помещает ее инструкции в очередь, но ядро у нас всего одно. Тогда, в зависимости от приоритета, одна из программ тупо не будет выполняться, так как выполнять ее не на чем - ядро-то одно. В 2002 году в intel озадачились этой проблемой. Так как процессор на 2 физических ядра был еще не готов, решили изящно выкрутиться из положения: к одному физическому ядру подводить два потока инструкций. Так и получился Hyper-Threading. Главное отличие физических ядер от логических. Само собой, логическое ядро - это не дополнительный вычислительный блок, а как бы второй путь к одному блоку, так что "производительность на бумаге" он не увеличивает... НО Теперь при открытии второй программы, первая не перестанет выполняться а будет ожидать процессорное время, и если оно появится - ядро переключится на второй поток и будет исполнять уже его, и, если это нужно, позже снова переключится на первый поток. Таким нехитрым образом на одном ядре можно исполнять сразу два потока команд. Даже больше скажу: если одна программа задействует два потока, то в случае какой-то проблемы с первым потоком ядро опять таки переключится на второй поток и продолжит выполнение программы, а не будет ждать, пока решится проблема на первом потоке. Если подытожить, то мультипоточность - это когда одно ядро процессора может выполнять несколько потоков команд, но не параллельно (ядро все-таки одно), а последовательно, но может в любой момент переключаться между ними, либо выполнять несколько программ параллельно (пусть и не так эффективно, как полноценные два ядра). А что лучше - 4/8 или 6/6? Теперь - простой вопрос. Что лучше взять - процессор на 4 ядра и 8 потоков или на 6 физических ядер, но без мультипоточности. Тут все зависит от того, для чего берется компьютер (имею в виду, для каких задач). Мы ведь помним, что количество потоков никак не влияет на количество физических ядер, а только повышает эффективность их работы, позволяя одновременно обрабатывать сразу два потока данных. Обычно это дает прирост производительности где-то от 5 до 30%. В 6-ядерном процессоре больше самих конвейеров, и плевать тут на то, что работают они не так эффективно. Запускаем одну тяжелую задачу - процессор на 6 ядер (при условии полной нагрузки на все ядра обоих процессоров) будет сильно быстрее, так как у него тупо больше ядер. Для примера можно взять i5 9500 и i3 10105F. Они имеют похожую архитектуру, одинаковую буст-частоту и одинаковый поядерный объем L1 и L2 кэшей (64 и 256 кб соответственно). В большинстве задач именно i5 на 6 ядер и 6 потоков окажется быстрее, но всего на 5-10%, а если одновременно нужно выполнять огромную кучу задач - между процессорами установится паритет, так как i3 тупо работает эффективнее.