Другие языки программирования и технологии

на каком уровне распаралеливается код????

на каком уровне распаралеливается код) ) примерно такой вопрос) по сути на ассме нет команды переключения ядер и тп тобиж должен паралелить сап проц а помогать ему компилятор но тогда почему линейная задача использует 1 ядро ведь даже скомпилиная линейная задача во многих местах легко паралелится на уровне проца
ну т. е
MOV ax,10
MAV ax,15
хрен распаралелиш а вот допустим
MOV ax,10
MAV dx,10 по идее 2 команду должно выполнять 2 ядро
Код может распараллеливаться на уровне данных (векторные команды MMX, SSE), на уровне команд (суперскалярный конвейр) , на уровне потоков (многоядерность и многопроцессорность) , на уровне заданий (кластеры, вычислительные блоки) .
Приведенный пример:
MOV ax,10
MOV dx,10
реализуется на уровне параллелизма команд.
Начиная с процессора Пентиум, несколько независимых команд может быть выполнено одновременно (на одном ядре).
Александр Бесчастных
Александр Бесчастных
75 009
Лучший ответ
Внутри каждого ядра обычно имеется несколько арифметико-логических устройств и скрытых от прграммиста наборов одноименных регистров, между которыми и распараллеливается автоматически выполнение таких наборов команд.
Распаралеливание происходит в момент разделения потоков. То есть, код, который выполнается в единном потоке никогда не будет распределён на 2 ядра, так как один участок кода может жёстко зависить от другого участка, и потому разделение на 2 ядра может привести к плачевным последствиям. Однако, когда Вы разделяете один процесс на 2 потока, то каждый поток получает свою квоту на выполнение (то есть для процессора это уже 2 независимые задачи) и тогда оба кода могут выполняться одновременно и висеть соответственно на разных ядрах. Не знаю как в асме, а вот в делфи есть специальный набор классов для работы с потоками (TThread). Так что явное распараллеливание создаётся программистом.
ni
nikolai-prokazov
42 952
На уровне цепочек он распаралеливается. Каждая цепочка - одно ядро. У вас одна цепочка, вот ваш код и не паралелится.
У многоядерных процессоров общая память, но разные регистры, поэтому ваш код для второго ядра - полная бессмысленность. ТО есть да, конечно-же можно выполнять каждую вторую команду на втором ядре, но получится полная чушь (регистры-то не копируются).