compics.net

 Мир компьютеров

 

 

 Обзоры

 

 Новости

Железо

Интернет

Коммуникации

Программы

Обзоры

Поиск неисправностей

Поддержка многоядерных процессоров

 Многоядерные процессоры уже давно на рынке, но до сих пор очень мало программ, способных использовать всю вычислительную мощь многоядерных процессоров. Статья расскажет о том, что может дать реальная многоядерность.

В рекламах четырехъядерных процессоров можно услышать: «Четырехкратное увеличение производительности за 8000 рублей». Имеют ввиду четырехъядерный процессор Core 2 Quad Q6600 производства Intel (см. рис.). Известно, что при хорошем сочетании с операционной системой и установленными программами этот микропроцессор с легкостью обгоняет самые дорогие двуядерные процессоры стоимостью от 30 000 рублей. Несмотря на низкую цену, многие пользователи компьютеров заняли выжидательную позицию, потому что сегодня лишь некоторые программы способны дать реальное повышение производительности при работе с несколькими ядрами микропроцессора. Есть даже такие утилиты, которые с многоядерными работают намного медленнее, чем с одноядерными процессорами. Это происходит потому, что при неблагоприятных условиях затраты ресурсов на управление дополнительными ядрами могут превышать реальное полезное действие.

Рис. Четырехъядерный процессор Core 2 Quad Q6600

Потенциал новых микропроцессоров раскрывается очень трудно. Ддизайн чипов — не единственная причина. Если бы разработчики программ сразу направились на работу с многоядерными процессорами, они могли бы уже выжать повышенную производительность почти из всех программ.

Искусство разделения: многопотоковость

Чтобы программа смогла работать с несколькими ядрами микропроцессора, она должна выполняться параллельно отдельными вычислительными потоками, так называемыми threads («нити»). При многопотоковости (multithreading) часть программы, требующая интенсивных вычислений, может работать в фоновом режиме, а интерфейс программы — постоянно обновляться небольшим отдельным потоком.Но это почти не дает общего прироста производительности, потому что операции, хоть и распределяются равномерно на все вычислительное время, все же выполняются одна за другой. Процессоры Intel Pentium 4 благодаря технологии hyperthreading начали работать с двумя логическими виртуальными ядрами, способными одновременно выполнять две вычислительные операции. Вот здесь и возникли проблемы, при одновременном выполнении двух процессов, которым необходим доступ к одному ресурсу, например ячейке памяти, один из потоков может справиться с вычислениями раньше, а другой позже с некоторой задержкой. Поэтому результат другого потока будет еще не готов, и он не сможет использовать общий ресурс - это называется race-condition, или «состояние гонки». Вторая большая проблема - потоки могут мешать друг другу, ожидая доступа к одному ресурсу и блокируя при этом какой-либо другой - это состояние называется deadlock, или «взаимоблокировка». Если при гиперпотоковости и двуядерных процессорах проблемы ограничивались двумя потоками (threads), то при увеличении количества ядер микропроцессора ситуация осложняется, и разработчикам программ приходится искать новые решения этих проблем.

Плюсы и минусы многоядерности

Очень часто зависимость от вычислений препятствует эффективной параллелизации. Например, программа, у которой каждая операция требует результата предыдущих вычислений, не дает увеличения скорости и производительности. Многие приложения и программы не обращают внимания на наличие нескольких ядер микропроцессора, просто их не замечая. Архиватор WinRAR использует только одно ядро. Разработчики игр не спешат разрабатывать игры для многоядерных процессоров, ведь графические чипы производят параллельные вычисления с незапамятных времен. Только некоторые игры, такие как World in Conflict, способны переносить искусственный интеллект своих персонажей и физические вычисления на несколько ядер CPU. Благодаря этому пользователь, применяющий дву- или четырехъядерный процессор, замечает преимущество в скорости. Параллелизация представляет интерес для кодирования видео, позволяет достичь роста производительности при кодировании. Формирование потоков дает возможность быстрее вычислять трансформации между двумя опорными кадрами (I-frames) или интерполяцию векторов движения. Кодек Н.264 Pro, разработанный компанией MainConcept, отлично работает как с одним, так и восемью ядрами процессоров.

Intel Compiler 10 против OpenMP

Intel предлагает программистам удобный инструмент — компилятор Intel Compiler 10 (пробную версию можно скачать с www.intel.com/software). При компиляции он анализирует программный код, при возможности автоматически делит программу на несколько потоков. Конечно, Intel Compiler 10 — не волшебная палочка: автоматическая параллелизация удается только отдельных случаях, если компилятор уверен, что это не приведет к вышеописанным состояниям dead­lock или race-condition. При этом он подходит к работе весьма консервативно и чаще создаёт программы, способные вычислять только последовательно. Хорошей оптимизации кода может добиться только программист, точно знающий, какие элементы его программы должны выполняться независимо или раздельно друг от друга. С 1997 года для этих целей используется система OpenMP, с помощью которой разработчик может параллелизировать те или иные элементы исходного кода, при этом он может оставить количество потоков на усмотрение системы или определить его самостоятельно для определённого количества ядер. Система OpenMP работает с языками C/C++ и FORTRAN и является идеальной основой для создания многоядерных приложений программистами.

 

 

 


 

 

language