Параллелизм на уровне команд


ПАРАЛЛЕЛИЗМ НА УРОВНЕ ПОТОКОВ


Download 101.4 Kb.
bet2/3
Sana17.12.2022
Hajmi101.4 Kb.
#1026563
1   2   3

ПАРАЛЛЕЛИЗМ НА УРОВНЕ ПОТОКОВ


Термин «поток» в зависимости от контекста может использоваться в различных смыслах. Например, программный поток - это термин операционной системы, определяемый как последовательность команд, выполняемых в составе процесса. В настоящем разделе используется другое определение потока - как потока команд, поступающего на вход процессора. Процессор может выполнять поток команд независимо от других потоков команд или одновременно с ними, если у процессора есть аппаратные ресурсы для этого. Параллелизм на уровне потоков (или многопоточность) означает выполнение нескольких потоков команд, которые относятся к разным одновременно выполняющимся программам (или к разным веткам одной параллельной программы).
Различают программную и аппаратную многопоточность. Программная многопоточность - это способ выполнения нескольких потоков команд на одном процессоре периодическим переключением его с одного потока на другой. Недостаток программной многопоточности в том, что переключение процессора между потоками средствами операционной системы выполняется сравнительно долго (тысячи тактов процессора). Все современные операционные системы реализуют программную многопоточность, для того чтобы создать видимость параллельного выполнения программ.
Аппаратная многопоточность - это аппаратно поддержанный способ выполнения нескольких потоков команд на одном процессоре. Аппаратная поддержка многопоточности заключается в организации совместного использования ступеней конвейера и других ресурсов процессора (регистров, кэш-памяти) несколькими потоками команд. При одновременном выполнении команд из нескольких потоков ресурсы процессора загружаются более эффективно, чем при одном потоке, вследствие чего они меньше простаивают. Для операционной системы один многопоточный процессор логически выглядит как несколько процессоров (по числу поддерживаемых им потоков команд).
Существует несколько способов организации аппаратной многопоточности в микроархитектуре.

  • • При крупнозернистой многопоточности конвейер в каждый момент времени выполняет команды только одного потока. Если в какой- то момент произошла длительная задержка (в результате промаха при обращении в кэш-память, зависимости по управлению или по другой причине), то процессор автоматически переключается на другой поток команд и начинает выполнять его команды. Аппаратная поддержка переключения потоков позволяет делать это быстро, без каких-либо задержек. Действительно параллельного выполнения потоков команд здесь, как и при программной многопоточности, не происходит. Ускорение достигается за счет того, что длительные задержки одного потока оказываются скрытыми за выполнением команд другого потока. Примером реализации крупнозернистой многопоточности служит технология Hyper-threading в процессорах архитектуры Itanium.

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

  • • При одновременной многопоточности ступени конвейера могут обрабатывать сразу несколько команд с разных потоков. Таким образом, происходит действительно параллельное выполнение команд разных потоков. Ускорение здесь достигается за счет того, что недозагру- женные и простаивающие при одном потоке ступени конвейера загружаются командами из других потоков. Примером реализации одновременной многопоточности служит технология Intel Hyper-threading в процессорах архитектуры х86/64.

Большинство стадий процессора не различает команды нескольких потоков и может обрабатывать их единообразно. Ресурсы процессора, отвечающие за хранение данных (кэш-память, регистровые файлы, различные таблицы и буферы), в процессорах с аппаратной поддержкой многопоточности используются одним из следующих способов: они или дублируются для всех аппаратных потоков, или делятся поровну между аппаратными потоками, или же совместно ими используются. Например, кэш-память 2-го уровня в ранних многопоточных процессорах Intel делилась строго на две части (по числу ядер), а в более поздних стала использоваться совместно всеми ядрами.
Для того чтобы использовать возможности аппаратной поддержки многопоточности, необходимо либо выполнять больше одной программы, либо, если выполняется одна программа, она должна иметь несколько потоков команд, т. е. быть параллельной. При выполнении одной последовательной программы многопоточный процессор работает не лучше (иногда даже хуже за счет меньшего числа ресурсов), чем однопоточный.

Download 101.4 Kb.

Do'stlaringiz bilan baham:
1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling