СПОСОБ ОБРАБОТКИ ДЛЯ МНОГОЯДЕРНОГО ПРОЦЕССОРА И МНОГОЯДЕРНЫЙ ПРОЦЕССОР
PROCESSING METHOD FOR THE MULTICORE PROCESSOR AND THE MULTICORE PROCESSOR

ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ
[0001] Настоящее изобретение относится к способу обработки для многоядерного процессора и многоядерному процессору, в частности оно относится к многоядерному процессору, имеющему гетерогенную архитектуру.
УРОВЕНЬ ТЕХНИКИ ИЗОБРЕТЕНИЯ
[0002] Многоядерные системы широко используются для того, чтобы ускорить вычислительные операции. Традиционные многоядерные системы обычно содержат по меньшей мере один процессор со множеством идентичных ядер. Путем распределения машинного кода на отдельные ядра и выполнения машинного кода на каждом из этих нескольких ядер параллельно, может быть достигнуто параллельное вычисление. Пока все эти ядра являются идентичными, наблюдающему объекту нужно лишь идентифицировать доступное ядро и передать соответствующие инструкции этому ядру, чтобы выполнять машинный код на ядре. Поскольку все из этих ядер идентичны, все ядра могут выполнять один и тот же машинный код, и обычно все из этих ядер будут требовать одинаковое время для завершения операции.
[0003] В дополнение к этому, многоядерные системы, имеющие гетерогенную архитектуру, становятся более популярными. Такие гетерогенные многоядерные системы содержат множество ядер, которые могут работать с различными тактовыми частотами и/или которые могут иметь различные наборы инструкций. Благодаря такой гетерогенной архитектуре, одна и та же операция может быть завершена в течение различного времени в зависимости от ядра, выполняющего такую операцию.
[0004] Однако, поскольку ядра имеют различные наборы инструкций, оптимальное ядро может зависеть от операции, которая должна быть выполнена. Это означает, что для первой операции первое ядро могло бы быть подходящим ядром, выполняющим такую операцию за минимальную продолжительность. Кроме того, второе ядро могло бы быть более хорошим выбором для другого, второго типа операции. Такая операция может быть, например, математической операцией, которая будет вычисляться очень эффективно на арифметическом ядре, или операция может быть обработкой видеоданных, которая будет эффективно выполняться на графическом ядре. Следовательно, чтобы улучшить вычислительную скорость, важно выбрать оптимальное ядро для выполнения операции.
[0005] Вследствие различных наборов инструкций отдельных ядер в гетерогенных многоядерных системах машинный код для выполнения операции должен быть адаптирован к соответствующему ядру на этапе компиляции при генерировании машинного кода для всей компьютерной программы. Однако назначение конкретного ядра при компилировании кода является большой проблемой. Очень точное знание выполняющейся системы необходимо для того, чтобы оценить оптимальное время выполнения отдельных ядер и чтобы выбрать подходящее ядро для каждой задачи.
[0006] CA 2631255 A описывает отображение задачи-на-устройство на основе прогнозируемой оценки времени выполнения. Время выполнения задачи оценивается для каждого доступного устройства, и задача назначается устройству, имеющему минимальное оцененное время выполнения.
[0007] US 2006/0123401 A описывает способ распараллеливания программного кода. Программный код анализируется, чтобы определить оптимальную стратегию для распараллеливания, при компиляции кода.
[0008] US 2007/0283358 A описывает отображение задачи-на-устройство при компилировании программного кода для гетерогенной многоядерной системы. Компилятор оценивает требуемые выполнения на каждом устройстве путем статического прогнозирования. На основе этого прогнозирования выбирается оптимальное аппаратное устройство, и машинный код генерируется для выбранного устройства.
[0009] US 2007/0283337 A описывает способ для автоматической идентификации задач, которые могут быть выполнены параллельно. На основе этого анализа оценивается время выполнения, и задача назначается блоку обработки.
[0010] Однако, для прогнозирования времени выполнения на определенном устройстве требуется сложная модель, описывающая свойства соответствующего устройства. В дополнение к этому, множество моделей, описывающих свойства отдельных устройств, требуется для каждого устройства, которое должно учитываться при компиляции программного кода. Для каждого вновь введенного устройства пользователь должен предоставить входные данные, описывающие свойства нового устройства. Тем не менее, оценка времени выполнения приведет к большим неточностям, и, таким образом, будет очень трудно сгенерировать оптимальный машинный код для гетерогенных многоядерных систем.
[0011] Соответственно, цель настоящего изобретения состоит в том, чтобы предоставить улучшенное назначение ядра в гетерогенной многоядерной системе.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
[0012] В соответствии с первой реализацией первого аспекта изобретения, предоставлен способ обработки для многоядерного процессора, при этом упомянутый многоядерный процессор содержит по меньшей мере первое ядро и второе ядро, способ содержит этапы, на которых принимают машинный код для выполнения заранее определенной операции; предоставляют принятый машинный код первому ядру и второму ядру; обрабатывают машинный код на первом ядре и втором ядре; определяют первое время выполнения для первого ядра и второе время выполнения для второго ядра, при этом значение первого времени выполнения задает время выполнения машинного кода на первом ядре, а значение второго времени выполнения задает время выполнения машинного кода на втором ядре; вычисляют первый коэффициент эффективности на основе определенного значения первого времени выполнения и второй коэффициент эффективности на основе определенного значения первого времени выполнения; и обрабатывают машинный код на первом ядре или втором ядре на основе вычисленных коэффициентов эффективности.
[0013] В возможной второй реализации способа обработки в соответствии с первым аспектом настоящего изобретения, способ дополнительно содержит этап для определения рабочей нагрузки первого ядра и второго ядра.
[0014] В дополнительной возможной третьей реализации способа обработки в соответствии со второй реализацией первого аспекта настоящего изобретения, упомянутый первый коэффициент эффективности вычисляется на основе определенного значения первого времени выполнения и определенной рабочей нагрузки первого ядра, а упомянутый второй коэффициент эффективности вычисляется на основе определенного значения второго времени выполнения и определенной рабочей нагрузки второго ядра.
[0015] В возможной четвертой реализации способа обработки в соответствии с реализациями с первой по третью первого аспекта настоящего изобретения, на этапе приема принимают машинный код, содержащий первый поднабор, относящиеся к заранее определенному набору инструкций первого ядра, и второй поднабор, относящийся к заранее определенному набору инструкций второго ядра; где на этапе предоставления предоставляют первый поднабор первому ядру и предоставляют второй поднабор второму ядру.
[0016] В пятой реализации способа обработки в соответствии с реализациями с первой по четвертую первого аспекта настоящего изобретения способ содержит этап для определенного значения первого времени выполнения и определенного значения второго времени выполнения в памяти времени выполнения.
[0017] В шестой реализации способа обработки в соответствии с пятой реализацией первого аспекта настоящего изобретения первый коэффициент эффективности и второй коэффициент эффективности вычисляются на основе сохраненных значений времени выполнения.
[0018] В соответствии с первой реализацией второго аспекта настоящего изобретения, предоставлен способ инструктирования для многоядерного процессора, при этом многоядерный процессор содержит по меньшей мере первое ядро и второе ядро, способ содержит этапы, на которых считывают предварительно сохраненный программный код; идентифицируют подзадачу в считанном программном коде, при этом упомянутая идентифицированная подзадача выполняется несколько раз, когда операция, в соответствии со считанным программным кодом, выполняется, и несколько выполнений идентифицированной подзадачи могут выполняться одновременно; генерируют машинный код упомянутой идентифицированной подзадачи, при этом упомянутый машинный код содержит компьютерные исполняемые инструкции для выполнения упомянутой идентифицированной подзадачи на первом ядре и втором ядре.
[0019] В возможной второй реализации способа инструктирования в соответствии со вторым аспектом настоящего изобретения, способ дополнительно содержит этап для определения количества итераций упомянутой подзадачи, когда операция, в соответствии со считанным программным кодом, выполняется, где упомянутый этап генерирования лишь генерирует машинный код для первого ядра и второго ядра, если определенное количество итераций больше, чем заранее определенное пороговое значение.
[0020] В возможной третьей реализации способа инструктирования в соответствии со вторым аспектом настоящего изобретения идентифицированная подзадача представляет собой цикл.
[0021] В соответствии с третьим аспектом настоящего изобретения предоставлен компьютерный программный продукт, который адаптирован для выполнения способа обработки в соответствии с реализациями с первой по шестую первого аспекта настоящего изобретения.
[0022] В соответствии с четвертым аспектом настоящего изобретения предоставлен компьютерный программный продукт, который адаптирован для выполнения способа инструктирования в соответствии с реализациями с первой по вторую второго аспекта настоящего изобретения.
[0023] В соответствии с пятым аспектом настоящего изобретения предоставлен машиночитаемый запоминающий носитель, содержащий программный продукт в соответствии с третьим аспектом настоящего изобретения.
[0024] В соответствии с шестым аспектом настоящего изобретения предоставлен машиночитаемый запоминающий носитель, содержащий программный продукт в соответствии с четвертым аспектом настоящего изобретения.
[0025] В соответствии с первой реализацией седьмого аспекта настоящего изобретения предоставлен многоядерный процессор, при этом многоядерный процессор содержит первое ядро, адаптированное для обработки машинного кода в соответствии с первым набором инструкций; второе ядро, адаптированное для обработки машинного кода в соответствии со вторым набором инструкций; и планировщик, включающий в себя средство приема, адаптированное для приема машинного кода для выполнения заранее определенной операции; средство передачи, адаптированное для предоставления принятого машинного кода первому ядру и второму ядру; средство обработки, адаптированное для начала обработки машинного кода на первом ядре и втором ядре; средство определения, адаптированное для определения значения первого времени выполнения, задающего время выполнения машинного кода на первом ядре, и определения значения второго времени выполнения, задающего время выполнения машинного кода на втором ядре, и средство вычисления, адаптированное для вычисления первого коэффициента эффективности на основе определенного значения первого времени выполнения, и вычисления второго коэффициента эффективности на основе определенного второго времени выполнения; где упомянутое средство обработки начинает дополнительную обработку машинного кода на первом ядре или на втором ядре на основе вычисленного первого коэффициента эффективности и вычисленного второго коэффициента эффективности
[0026] В возможной второй реализации многоядерного процессора в соответствии с первой реализацией седьмого аспекта настоящего изобретения планировщик дополнительно содержит средство определения рабочей нагрузки, адаптированное для определения первой рабочей нагрузки первого ядра и второй рабочей нагрузки второго ядра.
[0027] В дополнительной возможной третьей реализации многоядерного процессора в соответствии со второй реализацией седьмого аспекта настоящего изобретения, упомянутое средство вычисления вычисляет первый коэффициент эффективности на основе определенного значения первого времени выполнения и определенной первой рабочей нагрузки, и вычисляет второй коэффициент эффективности на основе определенного значения второго времени выполнения и определенной второй рабочей нагрузки.
[0028] В возможной четвертой реализации многоядерного процессора в соответствии с реализациями с первой по третью седьмого аспекта настоящего изобретения, принятый машинный код содержит первый поднабор, относящийся к заранее определенному первому набору инструкций, и второй поднабор, относящийся к заранее определенному второму набору инструкций;
где средство передачи предоставляют только первый поднабор первому ядру, и предоставляют только второй поднабор второму ядру.
[0029] В возможной пятой реализации многоядерного процессора в соответствии с реализациями с первой по четвертую седьмого аспекта настоящего изобретения, процессор дополнительно содержит память времени выполнения для хранения определенного значения первого времени выполнения и определенного значения второго времени выполнения.
[0030] В дополнительной возможной шестой реализации многоядерного процессора в соответствии с реализациями с первой по пятую седьмого аспекта настоящего изобретения, процессор содержит первый блок обработки и второй блок обработки, и где первое ядро расположено в первом блоке обработки, а второе ядро расположено во втором блоке обработки.
[0031] В соответствии с первой реализацией восьмого аспекта настоящего изобретения предоставлен генератор инструкций для многоядерного процессора, при этом многоядерный процессор содержит по меньшей мере первое ядро и второе ядро, генератор содержит средство приема кода, адаптированное для приема предварительно сохраненного программного кода; средство анализа, адаптированное для идентификации подзадачи в считанном программном коде, при этом упомянутая идентифицированная подзадача выполняется несколько раз, когда операция, в соответствии со считанным программным кодом, выполняется, и несколько выполнений идентифицированной подзадачи могут выполняться одновременно; средство компиляции, адаптированное для генерирования машинного кода упомянутой идентифицированной подзадачи, при этом упомянутый машинный код содержит компьютерные исполняемые инструкции для выполнения упомянутой идентифицированной подзадачи на первом ядре, имеющем первый набор инструкций, и упомянутый машинный код содержит компьютерные исполняемые инструкции для выполнения упомянутой идентифицированной подзадачи на втором ядре, имеющем второй набор инструкций
[0032] В возможной второй реализации генератора инструкций в соответствии с восьмым аспектом настоящего изобретения генератор дополнительно содержит средство оценки выполнения для определения количества итераций упомянутой подзадачи, когда операция, в соответствии со считанным программным кодом, выполняется, где упомянутое средство компиляции лишь генерирует машинный код для первого ядра и машинный код для второго ядра, если определенное количество итераций больше, чем заранее определенное пороговое значение.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[0033] В дальнейшем описании варианты осуществления изобретения описаны посредством только примера со ссылкой на прилагаемые чертежи, на которых
[0034] Фиг. 1 показывает многоядерный процессор в соответствии с возможной реализацией процессора в соответствии с настоящим изобретением;
[0035] Фиг. 2 показывает схему для иллюстрации работы планировщика, как используется возможной реализацией процессора в соответствии с настоящим изобретением;
[0036] Фиг. 3 показывает схему для иллюстрации работы многоядерного процессора, как используется реализацией процессора в соответствии с седьмым аспектом настоящего изобретения;
[0037] Фиг. 4 показывает планировщик, как используется в возможной реализации первого аспекта настоящего изобретения;
[0038] Фиг. 5 показывает блок-схему способа обработки в соответствии с возможной реализацией первого аспекта изобретения;
[0039] Фиг. 6 показывает схему, иллюстрирующую работу генератора инструкций, как используется в возможной реализации генератора в соответствии с восьмым аспектом настоящего изобретения;
[0040] Фиг. 7 показывает генератор инструкций в соответствии с возможной реализацией восьмого аспекта настоящего изобретения; и
[0041] Фиг. 8 показывает блок-схему способа инструктирования в соответствии с возможной реализацией второго аспекта настоящего изобретения.
ПОДРОБНОЕ ОПИСАНИЕ ВАРИАНТОВ ОСУЩЕСТВЛЕНИЯ
[0042] Фиг. 1 схематически иллюстрирует многоядерный процессор 1 в соответствии с возможной реализацией седьмого аспекта настоящего изобретения. Многоядерный процессор 1 содержит по меньшей мере планировщик 10 и множество ядер 21, 22 и 23. Многоядерный процессор 1 снабжен данными, хранящимися в памяти 2. Данные содержат машинный код, определяющий компьютерные исполняемые инструкции для выполнения заранее определенных операций. Планировщик 10 принимает данные с машинным кодом. На основе этих инструкций планировщик 10 генерирует список задач, которые должны быть выполнены в соответствии с принятыми инструкциями. Для каждой задачи, которая должна быть выполнена, планировщик 10 выбирает одно из ядер 21, 22 или 23. Когда задача должна быть выполнена, планировщик 10 отправляет принятый машинный код в выбранное ядро 21, 22 или 23 и начинает выполнение машинного кода на соответствующем ядре 21, 22 или 23. Таким образом, множество задач может быть выполнено параллельно путем выполнения машинного кода на каждом из ядер 21, 22 и 23 в одно и то же время.
[0043] Если все ядра 21, 22 и 23 являются идентичными и управляются одной и той же тактовой частотой, задача будет требовать одного и того же периода времени работы на каждом из ядер 21, 22 и 23. Таким образом, планировщик 10 не должен заботиться о свойствах отдельных ядер 21, 22 и 23 и выбирает следующее ядро, предоставляющее вычислительные ресурсы для выполнения задачи.
[0044] Однако, в многоядерных системах с гетерогенной архитектурой не все ядра 21, 22 и 23 являются идентичными и управляются одной и той же тактовой частотой. Следовательно, выполнение конкретной операции на каждом из этих различных ядер может требовать различной продолжительности для завершения конкретной операции. Например, многоядерная система содержит центральный процессор (CPU), имеющий множество идентичных ядер для выполнения стандартных операций, графический процессор (GPU) для выполнения графических операций и математический процессор (MPU) для выполнения математических операций. GPU может содержать одно или более ядер для выполнения графических операций очень эффективно. Однако ядра такого GPU могут быть неэффективными при выполнении других операций, которые не относятся к графическим вопросам. Таким же образом математический процессор содержит одно или более ядер для выполнения математических операций, например, операций с плавающей точкой. При работе с такими многоядерными системами, содержащими множество различных типов ядер, которые оптимизированы для специализированных операций, очень важно выбрать подходящий тип ядра для каждой задачи, которая должна быть выполнена. Для этой цели планировщик 10 должен знать, какое ядро 21, 22 или 23 могло бы быть подходящим для выполнения конкретной задачи за минимальное время работы.
[0045] В частности, когда задача должна быть выполнена несколько раз, выбор оптимального ядра уменьшит требуемое время для завершения всех этих операций существенно.
[0046] Фиг. 2 показывает схему, иллюстрирующую работу планировщика 10, управляющего выполнения распараллеленных задач. После того как планировщик 10 принял машинный код, включающий в себя инструкции для распараллеленных задач, планировщик 10 строит очередь задач, содержащую все задачи, которые должны быть выполнены. Затем планировщик 10 должен назначить каждую задачу, включенную в очередь задач, одному из множества ядер 21, 22, 23. Для этой цели список SDList устройств доступных ядер создается для определения производительности ядра по отношению к текущим задачам. При запуске нового назначения задач множеству ядер, список SDList устройств пуст.
[0047] Чтобы определить производительность отдельных ядер 21, 22, 23 по отношению к задачам, включенным в текущий список задач, тестовый прогон задачи выполняется для каждого типа ядер 21, 22, 23, и определяется затраченное время для завершения задачи на каждом из ядер 21, 22, 23. Чтобы увеличить точность затраченного времени для завершения задачи, заранее определенное количество NTrials задач может быть выполнено, и среднее значение Ta(Ci) затраченного времени вычисляется в соответствии со следующей формулой:
,
причем T(Ci) представляет собой общее затраченное время для завершения заранее определенного количества NTrials задач, которые выполняются на ядре Ci типа i ядра.
[0048] В дополнение к требуемому времени для завершения заранее определенной операции также важно учесть рабочую нагрузку ядер 21, 22 и 23. Например, когда огромное количество задач назначено первому ядру, являющемуся самым быстрым ядром, дополнительная задача должна ждать до тех пор, пока все предыдущие запланированные операции не завершатся, прежде чем дополнительная задача сможет быть выполнена. Следовательно, дополнительная задача может быть завершена даже раньше, если задача выполнится другим ядром, имеющим меньшую рабочую нагрузку.
[0049] Именно для этой цели планировщик 10 дополнительно учитывает рабочую нагрузку отдельных ядер 21, 22 и 23 при выполнении тестового прогона. Соответственно, коэффициент Eff(i) эффективности может быть вычислен как:
,
причем Ta(Ci) представляет собой время для завершения описанной выше тестовой задачи на ядре Сi типа i ядра. L(Ci) описывает рабочую нагрузку ядра Ci, когда тестовый прогон запущен, причем L(Ci) представляет собой действительное значение между 0 (бездействие) и 1 (полностью загружен). Таким образом, учитывая текущую рабочую нагрузку, вычисляется нормализация коэффициента эффективности, и может быть определена соответствующая эффективность ядра, даже когда соответствующее ядро сильно загружено в момент, когда запускается тестовый прогон.
[0050] Информация, относящаяся к рабочей нагрузке, обычно предоставляется операционной системой. Таким образом, коэффициент Eff(i) эффективности может быть вычислен для каждого из доступных ядер 21, 22, 23. После того как коэффициент эффективности ядра 21, 22, 23 вычислен, дополнительный элемент в списке SDList устройств создается, как проиллюстрировано в левой части Фиг. 2.
[0051] Многоядерная система обработки может содержать множество ядер, относящихся к одному и тому же типу ядра. Например, многоядерная система обработки может содержать множество блоков обработки, таких как CPU, MPU и/или GPU. Каждый блок обработки может дополнительно содержать множество ядер, относящихся к одному и тому же типу ядра.
[0052] Если множество ядер, относящихся к одному и тому же типу ядра, доступны в многоядерной системе обработки, достаточно выполнить лишь тестовый прогон на одном представительном ядре каждого типа ядра. После того как тестовый прогон на представительном ядре типа ядра был завершен, и соответствующий коэффициент эффективности был вычислен, отдельный элемент для каждого доступного ядра, относящегося к этому типу ядра, создается в списке SDList устройств.
[0053] Если по меньшей мере один элемент создан в списке SDList устройств, планировщик 10 планирует оставшиеся задачи, включенные в очередь задач. Для этой цели дополнительная задача назначается ядру C, удовлетворяющему следующим условиям:
коэффициент Eff(Type(C)) эффективности соответствующего типа ядра C уже вычислен;
ядро не полностью загружено, т.е. рабочая нагрузка L(C) ядра C меньше, чем 1; и
оцененное время T(C) для завершения задачи является минимальным в соответствии со следующей формулой:
.
После того как задача назначена ядру, задача удаляется из очереди задач. Оставшиеся задачи планируются таким же образом, как описано выше.
[0054] При работе с многоядерной системой, имеющей гетерогенную архитектуру, отдельные ядра не только предоставляют специализацию для определенных операций. Кроме того, такие специализированные ядра для определенных операций, таких как арифметические операции с плавающей точкой или специальные графические вычисления, обычно имеют специализированные наборы инструкций. Такие специализированные, различные наборы инструкций требуют отдельного машинного кода для каждого типа ядра, причем машинный код адаптирован к определенному набору инструкций соответствующего ядра. Следовательно, индивидуальный машинный код должен быть предоставлен каждому типу ядра.
[0055] Поскольку назначение задачи определенному ядру определяется во время выполнения кода, данные, предоставленные многоядерному процессору 1, должны содержать машинный код для всех доступных ядер 21, 22, 23. Более подробно, код, предоставленный многоядерному процессору 1, содержит несколько версий задачи, при этом каждая версия представляет собой машинный код по отношению к набору инструкций одного из множества ядер. Таким образом, доступны несколько версий задачи, и планировщик 10 может предоставить всем ядрам 21, 22 и 23 соответствующие версии машинного кода для выполнения такой задачи. Таким образом, необязательно определять конкретное ядро заранее при генерировании машинного кода на предыдущем этапе компиляции.
[0056] На основе нескольких версий машинного кода задачи планировщик 10 способен предоставить всем ядрам 21, 22 и 23 соответствующую версию машинного кода. В частности, при запуске тестового прогона задачи для определения требуемого времени обработки на каждом из множества ядер 21, 22, 23, каждое ядро может быть снабжено соответствующей версией машинного кода по отношению к отдельным наборам инструкций ядер 21, 22, 23.
[0057] Поскольку машинный код доступен для всех различных типов ядер, включенных в многоядерный процессор 1, планировщик 10 может выбрать подходящее ядро 21, 22 или 23 на основе фактических свойств системы, в частности на основе рабочей нагрузки отдельных ядер 21, 22, 23 и определенной продолжительности для выполнения задачи.
[0058] При работе с многоядерным процессором, имеющим гетерогенную структуру, некоторые из ядер основаны на одном и том же типе устройства. Например, многоядерный процессор может содержать первый блок обработки, например, CPU, имеющий множество идентичных ядер первого типа ядра, и второй блок обработки, например, GPU, имеющий множество ядер второго типа ядра. Соответственно, можно предположить, что задача будет выполнена за одно и то же время на каждом ядре, относящемся к одному и тому же типу ядра. Следовательно, достаточно выполнить только одну тестовую задачу на одном из ядер, относящихся к одному и тому же типу устройства.
[0059] Фиг. 3 иллюстрирует схему многоядерного процессора, имеющего блоки 31, 32, 33 обработки. Каждый блок 31, 32, 33 обработки может содержать множество ядер различного типа устройства, соответственно. Например, ядро 21-1, 21-2 и 21-3 в первом блоке 31 обработки относятся к первому типу устройства. Ядро 22-1, 22-2 и 22-3 во втором блоке 32 обработки относятся ко второму типу устройства. Ядро 23-1, 23-2 и 23-3 в третьем блоке 33 обработки относятся к третьему типу устройства.
[0060] Когда новый набор задач должен быть запланирован, единственный тестовый прогон выполняется для каждого типа устройства. В соответствии с Фиг. 3, тестовый прогон выполняется на ядре 21-1 для первого типа устройства, на ядре 22-1 для второго типа устройства и на ядре 23-1 для третьего типа устройства. Все тестовые прогоны начинаются в T1.
[0061] После того как тестовый прогон был завершен на ядре 22-2 в T2, коэффициент эффективности вычисляется для второго типа устройства, и дополнительные задачи начинаются на каждом ядре 22-1, 22-2 и 22-3, относящемся ко второму типу устройства.
[0062] Затем тестовый прогон завершается на ядре 23-1 в T3, и коэффициент эффективности вычисляется для третьего типа устройства. Соответственно, планировщик может выбрать между ядрами второго и третьего типа устройств. Поскольку ядра 22-1, 22-1 и 22-3 второго типа устройства полностью загружены, следующие три задачи назначаются ядрам 23-1, 23-2 и 23-3 третьего типа устройства.
[0063] Наконец, тестовый прогон также завершается на ядре 21-2 в Т4. Соответственно, коэффициент эффективности вычисляется для первого типа устройства, и планировщик может выбрать между ядрами первого, второго и третьего типа устройства. Однако, все ядра второго и третьего типа устройства полностью загружены. Следовательно, дополнительные задачи назначаются ядрам 21-1, 21-2 и 21-3, относящимся к первому типу устройства.
[0064] Когда ядра 22-1, 22-2 и 22-3 завершили свои задачи в T5, планировщик может выбрать между ядрами первого, второго и третьего типа устройства. Поскольку все ядра первого и третьего типа устройства полностью загружены, дополнительные задачи назначаются ядрам 22-1, 22-2, 22-3 второго типа устройства.
[0065] Фиг. 4 показывает планировщик 10 возможной реализации многоядерного процессора в соответствии с седьмым аспектом изобретения. Планировщик 10 включает в себя средство 11 приема. Средство 11 приема принимает машинный код для выполнения заранее определенной операции. Этот машинный код включен в данные, предоставленные многоядерному процессору 1.
[0066] Кроме того, планировщик 10 включает в себя средство 12 передачи. Эти средство 12 передачи предоставляет машинный код каждому из множества ядер 21, 22 и 23. После того как машинный код передан соответствующему ядру, средство 13 обработки начинает обработку машинного кода на соответствующем ядре. Чтобы выполнить тестовый прогон для определения времени выполнения на каждом из доступных ядер 21, 22 и 23, машинный код передается каждому из ядер 21, 22, 23, и средство 13 обработки начинает обработку машинного кода на каждом из множества ядер 21, 22, 23.
[0067] Далее, средство 14 определения определяет продолжительность выполнения для каждого из множества ядер 21, 22, 23. Для этой цели определяется значение времени выполнения, определяющее продолжительность выполнения машинного кода на ядре. Средство 15 вычисления вычисляет коэффициент Eff(i) эффективности для каждого ядра 21, 22, 23 на основе определенного значения времени выполнения. После того как тестовые прогоны были завершены, и коэффициенты эффективности вычислены, средство 13 обработки начинает дополнительную обработку машинного кода на ядре 21, 22, 23 на основе вычисленного коэффициента Eff(i) эффективности. Таким образом, может быть достигнуто подходящее распределение машинного кода для минимального времени выполнения.
[0068] Чтобы дополнительно принять во внимание рабочую нагрузку отдельных ядер 21, 22 и 23, средство 16 определения рабочей нагрузки определяет рабочую нагрузку каждого из множества ядер 21, 22, 23. Определение рабочей нагрузки может быть достигнуто, например, посредством операционной системы, контролирующей многоядерный процессор 1. Однако другие возможности для определения рабочей нагрузки многоядерного процессора 1 также возможны. При приеме во внимание рабочей нагрузки отдельных ядер 21, 22 и 23 коэффициент Eff(i) эффективности может быть дополнительно вычислен на основе определенной рабочей нагрузки ядер 21, 22, 23 в сочетании с определенными значениями времени выполнения.
[0069] В частности, когда по меньшей мере два из ядер 21, 22 и 23 имеют различный набор инструкций, принятый машинный код может содержать множество подмножеств, при этом каждый поднабор относится к определенному набору инструкций одного из ядер. Соответственно, средство 11 приема принимает большой объем машинного кода. Средство 12 передачи планировщика 10 только предоставляет подмножество соответствующего машинного кода каждому из ядер 21, 22, 23. Другими словами, только машинный код, соответствующий набору инструкций ядра 21, 22, 23, передается в соответствующее ядро 21, 22, 23.
[0070] Кроме того, планировщик 10 дополнительно может содержать память 17 времени выполнения для хранения определенных значений времени выполнения. Например, значения времени выполнения могут храниться в таблице, определяющей время выполнения для каждого из ядер 21, 22 и 23. Таким образом, значения времени выполнения доступны в любое время для дополнительного определения подходящего ядра и для вычисления коэффициента эффективности.
[0071] Фиг. 5 иллюстрирует блок-схему способа обработки для многоядерного процессора 1 в соответствии с возможной реализацией первого аспекта настоящего изобретения. На первом этапе 100 принимают машинный код для выполнения заранее определенной операции. Чтобы дополнительно принять во внимание рабочую нагрузку отдельных ядер 21, 22 и 23, рабочая нагрузка может быть определена на этапе 110. Как уже было отмечено выше, определение рабочей нагрузки может быть выполнено, например, посредством операционной системы, управляющей всей многоядерной системой 1, или посредством любого дополнительного способа для получения рабочей нагрузки соответствующих ядер 21, 22 и 23.
[0072] Для того чтобы выполнить тестовую операцию на каждом из ядер 21, 22 и 23, на дополнительном этапе 120 принятый машинный код предоставляют во множество ядер различных типов ядра. Далее, на этапе 130 машинный код обрабатывают на каждом из множества ядер. После того как обработка машинного кода была завершена, на этапе 140 определяют значение времени выполнения для каждого из множества ядер. Для этой цели измеряют временной интервал между начальным сигналом и завершением ядра при выполнении машинного кода. На основе определенного значения времени выполнения и рабочей нагрузки, определенной на этапе 110, на этапе 150 вычисляют коэффициент эффективности для каждого типа ядра. После того как по меньшей мере один коэффициент эффективности вычислен, на этапе 160 выполняют дополнительную обработку машинного кода посредством одного из ядер 21, 22, 23. Для этой цели выбирают ядро для дополнительной обработки на основе вычисленных коэффициентов эффективности.
[0073] Определенные коэффициенты эффективности могут быть сохранены в таблице, как уже было отмечено выше. Для этой цели определенные коэффициенты эффективности сохраняют в памяти 17 на этапе 170.
[0074] Если по меньшей мере два из ядер 21, 22 и 23 имеют различные наборы инструкций, принятый машинный код на этапе 100 содержит соответствующие поднаборы машинного кода, относящегося к отдельным наборам инструкций ядер 21, 22 и 23. Соответственно, предоставляющий этап 120 лишь предоставляет машинный код, относящийся к набору инструкций ядра, соответствующему ядру 21, 22 и 23. Следовательно, каждому ядру может быть предоставлен корректный машинный код, относящийся к набору инструкций ядра.
[0075] В соответствии с описанным выше многоядерным процессором 1 и соответствующим способом обработки возможно определить продолжительность для выполнения задачи на соответствующем ядре. В частности, при выполнении одной и той же задачи несколько раз, время выполнения для всего цикла, содержащего многократные выполнения задачи, может быть значительно улучшено путем выбора подходящего ядра. Поскольку соответствующее ядро определяется во время выполнения, необязательно выполнять какие-либо оценки на стадии компиляции машинного кода.
[0076] Эффективность назначения ядер в реальном времени увеличивается, если большое количество одних и тех же задач должно быть выполнено после определения значений времени выполнения и вычисления значений эффективности. В противном случае, если только небольшое количество циклов должно быть выполнено после вычисления значений эффективности, влияние назначения реального времени будет низким. Чтобы избежать ненужных определений значений времени выполнения, дополнительный этап (не показан) может быть введен, определяющий, сколько итераций одной и той же задачи должно быть выполнено. Чтобы избежать ненужной перегрузки, значения времени выполнения определяются, только если определенное количество итераций превышает заранее определенное пороговое значение.
[0077] Однако в этом контексте должно быть подчеркнуто, что определение значений времени выполнения не приводит к каким-либо ненужным выполнениям, поскольку определение значения времени выполнения выполняется на основе предоставленного машинного кода. Таким образом, даже результаты тестовых задач приводят результатам, которые используются при выполнении программного кода.
[0078] Как стало очевидным из приведенного выше описания, специализированный машинный код необходим для выполнения выбора в реальном времени ядер в гетерогенном многоядерном процессоре 1.
[0079] Фиг. 6 показывает блок-схему, иллюстрирующую генерирование машинного кода в соответствии с реализацией второго аспекта изобретения. Генератору 5 ядра предоставляется исходный код. Сначала программы пользовательского интерфейса выполняют семантический, лексический и синтаксический анализ предоставленного исходного кода и выводят промежуточное представление кода. Далее выполняется аппаратно-независимая оптимизация. Например, устраняются общие подвыражения, и удаляются неиспользуемые сегменты кода. Затем осуществляется идентификация сегментов кода, которые являются подходящими для распараллеливания. Например, идентифицируются подходящие циклы в коде. Если возможно, определяется количество итераций цикла, и цикл считается подходящим для распараллеливания, когда количество итераций превышает заранее определенное пороговое значение.
[0080] Оставшийся код, т.е., код, который считается неподходящим для распараллеливания, компилируется традиционным образом, как уже известно в предшествующем уровне техники. В дополнение к этому, для каждой части кода, которая является подходящей для распараллеливания, соответствующий сегмент кода, например, код цикла, преобразуется в отдельную процедуру. Следовательно, отдельные задачи могут быть выполнены путем вызова соответствующей процедуры. Далее, код созданной процедуры компилируется для каждого типа устройства, доступного в многоядерном процессоре 1. Поскольку каждый тип устройства обычно имеет различный набор инструкций, отдельный код должен быть сгенерирован для каждого типа устройства. Наконец, отдельная библиотека скомпилированных процедур создается для каждого типа устройства, и набор библиотек выводится в дополнение к скомпилированной основной программе.
[0081] Фиг. 7 схематически иллюстрирует генератор 5 инструкций в соответствии с возможной реализацией восьмого аспекта настоящего изобретения. Генератор 5 инструкций содержит средство 51 приема кода, которое снабжено предварительно сохраненным программным кодом. Этот программный код может быть сохранен, например, в памяти программ. Программный код описывает последовательность операций, которые должны быть выполнены на многоядерном процессоре 1. Для этой цели желаемая операция может быть запрограммирована на широко известном языке программирования, например, C, С++ или любом другом компьютерном языке.
[0082] Принятый программный код анализируется средствами 52 анализа, для того чтобы идентифицировать подзадачу в программном коде. В частности, средство 52 анализа идентифицирует такие подзадачи, которые должны быть выполнены множество раз при выполнении предварительно сохраненного кода. Чтобы сделать возможным параллельное выполнение подзадачи, важно, чтобы каждое выполнение подзадачи могло быть выполнено независимо. Такая подзадача могла бы быть, например, циклом в программного коде, который выполняется множество раз.
[0083] После идентификации подзадачи, которая могла бы быть распараллелена, средство 54 оценки выполнения может определить количество итераций подзадачи. Если количество итераций подзадачи превышает заранее определенное пороговое значение, такая подзадача считается подходящей для распределения по ядрам многоядерного процессора 1, как описано выше. В противном случае, если ожидаемое количество итераций подзадачи ниже заранее определенного порогового значения, анализ реального времени для распределения программного кода по ядрам многоядерного процессора 1 пропускается.
[0084] Однако, если идентифицированная подзадача считается подходящей для анализа реального времени и распределения по ядрам 21, 22, 23 многоядерного процессора 1, средство 53 компиляции генерирует машинный код для идентифицированной подзадачи. Сгенерированный машинный код содержит исполняемые на компьютере инструкции для всех связанных ядер 21, 22, 23 по отношению к наборам инструкций рассматриваемых ядер в гетерогенной многоядерной системе 1. Следовательно, сгенерированный машинный код содержит не только машинный код в соответствии с одним набором инструкций одного ядра, но несколько версий машинного кода, одна версия для каждого набора инструкций множества ядер. Следовательно, планировщик 10 может снабдить все связанные ядра 21, 22, 23 подходящим машинным кодом для выполнения подзадачи.
[0085] Таким образом, может быть сгенерирована очень гибкая версия машинного кода, позволяющая выбирать подходящее ядро в гетерогенном многоядерном процессоре 1. Соответственно, нет необходимости определять конкретное ядро при компилировании программного кода без знания свойств системы, например, фактической рабочей нагрузки.
[0086] Фиг. 8 иллюстрирует блок-схему для выполнения способа инструктирования для многоядерного процессора в соответствии с возможной реализацией второго аспекта настоящего изобретения. На первом этапе 200 считывают предварительно сохраненный машинный код. Например, компьютерный код на подходящем компьютерном языке может быть сохранен в памяти, и этот код может быть считан для дополнительной обработки.
[0087] Далее, на этапе 210 идентифицируют подзадачу в программном коде, которая должна быть выполнена множество раз. Кроме того, подзадача должна быть проанализирована, чтобы идентифицировать подзадачу, которая является подходящей для параллельного выполнения.
[0088] На этапе 220 генерируют машинный код для идентифицированной подзадачи. Если подзадача является подходящей для параллельного выполнения, сгенерированный машинный код содержит машинно-выполняемые инструкции для выполнения подзадачи на множестве ядер, имеющих различные наборы инструкций. Другими словами, генерируют множество версий машинного кода, одну версию для каждого набора инструкций рассматриваемых ядер 21, 22 и 23.
[0089] В целях повышения эффективности, этап 230 может быть включен для оценки количества итераций подзадачи. В этом случае только если оцененное или определенное количество итераций подзадачи превышает заранее определенное пороговое значение, несколько версий машинного кода генерируются, для того чтобы сделать возможным описанный выше анализ реального времени для выбора ядер в многоядерном процессоре 1. В противном случае, если идентифицированная подзадача повторяется меньше, чем заранее определенное пороговое значение, генерируется только один машинный код.
[0090] Подводя итог, настоящее изобретение относится к гетерогенному многоядерному процессору 1. Чтобы выбрать одно из множества ядер 21, 22, 23 в таком процессоре, определяется время выполнения задач, которые выполняются множество раз. На основе определенного времени выполнения на отдельных ядрах 21, 22, 23 выбирается подходящее ядро 21, 22, 23 для дополнительных выполнений задачи. Кроме того, настоящее изобретение дополнительно предоставляет генератор кода и способ генерации кода для предоставления соответствующего машинного кода для гетерогенного многоядерного процессора 1.