logo
Методичка

7.3 Мультитредовые процессоры с тредами, выявляемыми путем анализа потоков управления программы

Треды могут выявляться как на основе потоков управления (control driven), так и на основе потоков данных (data driven) программ. Треды бывают условно или безусловно исполняемыми.

В безусловно исполняемых тредах доступ к разделяемым переменным в регистрах и памяти обязан быть синхронизирован. Треды должны порождаться оператором fork только тогда, когда они действительно необходимы, т. к. аппаратура процессора не отслеживает нарушений порядка доступа. Состояние разделяемых переменных должно быть таким же, как при последовательном исполнении программы. Безусловно исполняемые треды имеют явно заданные операторы синхронизации и взаимодействия между собой. Отличие безусловно исполняемых тредов на мультитредовом процессоре от протекания тредов в процессорах параллельной системы состоит в том, что во втором случае процессы взаимодействуют между собой посредством пересылки данных и синхронизации без всяких ограничений, т.к. они представляют собой параллельную программу. В первом же случае передачи данных возможны только от ранее порожденных тредов к тредам, порожденным позднее, т.к. в этом случае выполняется последовательная программа.

В условно исполняемых тредах требуемый порядок доступа к разделяемым переменным поддерживается аппаратными средствами, обнаруживающими нарушение порядка доступа. Доступ к переменным выполняется в предположении, что он допустим, а если оказалось, что произошло нарушение порядка, то неверные результаты отбрасываются. Для этого могут быть использованы буферы, которые хранят значения, не изменяя архитектурного состояния треда до подтверждения правильности доступа.

При выявлении тредов на основе потоков управления анализируются управляющие структуры последовательной программы, такие как циклы, итерации обращения к функциям и подпрограммам. Предпринимается попытка выявления сегментов кода с минимальными взаимозависимостями.

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

Автоматическое преобразование программ на императивных языках в программы потоков данных находится в стадии исследования. Программы потоков данных пишутся на функциональных языках или специальных языках потоков данных.