способ и устройство для выполнения инструкций процессора на основе динамически изменяемой задержки
Классы МПК: | G06F9/38 совмещение выполнения одновременных команд, например строчная печать, просмотр |
Автор(ы): | МИЧАЛАК Джералд Пол (US), ДОКСЕР Кеннет Алан (US) |
Патентообладатель(и): | КВЭЛКОММ ИНКОРПОРЕЙТЕД (US) |
Приоритеты: |
подача заявки:
2007-08-16 публикация патента:
27.05.2011 |
Изобретение относится к вычислительной технике. Технический результат заключается в динамическом балансировании энергопотребления и производительности и оптимизации системы обработки. Способ управления выполнением инструкций, содержащий этапы, на которых: определяют первое значение динамической задержки для первого набора из одной или более инструкций; выбирают и декодируют первый набор из одной или более инструкций; задерживают выполнение, после выбора и декодирования, первого набора из одной или более инструкций на основе первого значения динамической задержки; определяют второе значение динамической задержки для второго набора из одной или более инструкций; выбирают и декодируют второй набор из одной или более инструкций; задерживают выполнение, после выбора и декодирования, второго набора из одной или более инструкций на основе второго значения динамической задержки; причем по меньшей мере первое или второе значение динамической задержки указывает по меньшей мере частично спекулятивное выполнение инструкций. 4 н. и 32 з.п. ф-лы, 7 ил.
Формула изобретения
1. Способ управления выполнением инструкций, содержащий этапы, на которых:
определяют первое значение динамической задержки для первого набора из одной или более инструкций;
выбирают и декодируют первый набор из одной или более инструкций;
задерживают выполнение, после выбора и декодирования, первого набора из одной или более инструкций на основе первого значения динамической задержки;
определяют второе значение динамической задержки для второго набора из одной или более инструкций;
выбирают и декодируют второй набор из одной или более инструкций;
задерживают выполнение, после выбора и декодирования, второго набора из одной или более инструкций на основе второго значения динамической задержки;
причем, по меньшей мере, первое или второе значение динамической задержки указывает, по меньшей мере, частично спекулятивное выполнение инструкций.
2. Способ по п.1, дополнительно содержащий этап, на котором ассоциативно связывают отдельные значения динамической задержки с соответствующим набором из одной или более инструкций.
3. Способ по п.2, в котором ассоциативное связывание отдельных значений динамической задержки с соответствующим набором из одной или более инструкций содержит этап, на котором помечают каждый набор из одной или более инструкций с помощью соответствующего значения динамической задержки.
4. Способ по п.1, в котором значения динамической задержки определяются во время, по меньшей мере, одного из компиляции кода, загрузки кода и выполнения кода.
5. Способ по п.1, в котором значения динамической задержки определяются на основе приложения, ассоциативно связанного с соответствующим набором инструкций.
6. Способ по п.5, в котором значения динамической задержки определяются на основе ресурсов процессора, доступных для соответствующего приложения.
7. Способ по п.1, в котором значения динамической задержки определяются на основе ресурсов процессора, доступных для соответствующего приложения.
8. Способ по п.1, в котором определение значений динамической задержки содержит этапы, на которых:
сохраняют историю спекулятивного выполнения инструкций; и
определяют значения динамической задержки на основе истории спекулятивного выполнения инструкций.
9. Способ по п.8, в котором хранение истории спекулятивного выполнения инструкций содержит этап, на котором отслеживают случаи сброса конвейера выполнения.
10. Способ по п.1, в котором значения динамической задержки указывают, по меньшей мере, одно из полностью спекулятивного выполнения инструкций, неспекулятивного выполнения инструкций, полностью спекулятивного выполнения инструкций после некоторого числа циклов задержки обработки инструкций и частично спекулятивного выполнения инструкций.
11. Способ по п.10, в котором частично спекулятивное выполнение инструкций содержит этап, на котором приостанавливают выполнение каждой инструкции на указанной стадии, пока более старшая инструкция не будет подтверждена.
12. Способ по п.1, дополнительно содержащий этап, на котором:
управляют хранением значений задержки.
13. Способ по п.12, дополнительно содержащий этап, на котором:
извлекают значения динамической задержки из регистра;
задерживают выполнение отдельных наборов из одной или более инструкций на основе соответствующего извлеченного значения динамической задержки; и
управляют сохранением результатов выполнения наборов инструкций.
14. Способ по п.13, в котором управление сохранением результатов выполнения наборов инструкций содержит этап, на котором временно сохраняют результаты от неподтвержденных инструкций, ассоциативно связанных с одним или более из наборов инструкций.
15. Способ по п.14, дополнительно содержащий этап, на котором обновляют достигнутое состояние с помощью результатов, ассоциативно связанных, по меньшей мере, с одним из наборов из одной или более инструкций, которые подтверждены.
16. Способ по п.14, дополнительно содержащий этап, на котором очищают результаты, ассоциативно связанные с неподтвержденными инструкциями, в ответ на условие сброса конвейера выполнения.
17. Способ по п.16, в котором условие сброса конвейера выполнения соответствует, по меньшей мере, одному из ошибок при ошибочном прогнозировании ветвления, исключения, ловушки, прерывания или сбоя.
18. Устройство обработки, содержащее:
модуль определения динамической задержки, выполненный с возможностью определять первое значение динамической задержки для первого набора из одной или более инструкций и второе значение динамической задержки для второго набора из одной или более инструкций; и
модуль обработки, выполненный с возможностью задерживать выполнение первого набора из одной или более инструкций на основе первого значения динамической задержки, после выбора и декодирования первого набора из одной или более инструкций, и задерживать выполнение второго набора из одной или более инструкций на основе второго значения динамической задержки, после выбора и декодирования второго набора из одной или более инструкций;
причем, по меньшей мере, первое или второе значение динамической задержки указывает, по меньшей мере, частично спекулятивное выполнение инструкций.
19. Устройство обработки по п.18, в котором модуль обработки дополнительно выполнен с возможностью ассоциативно связывать отдельные значения динамической задержки с соответствующим набором из одной или более инструкций.
20. Устройство обработки по п.19, в котором модуль обработки выполнен с возможностью ассоциативно связывать отдельные значения динамической задержки с соответствующим набором из одной или более инструкций, отмечая каждый набор из одной или более инструкций с помощью соответствующего значения динамической задержки.
21. Устройство обработки по п.18, в котором модуль определения динамической задержки выполнен с возможностью определять значения динамической задержки во время, по меньшей мере, одного из компиляции кода, загрузки кода и выполнения кода.
22. Устройство обработки по п.18, в котором модуль определения динамической задержки выполнен с возможностью определять значения динамической задержки на основе приложения, ассоциативно связанного с соответствующим набором из одной или более инструкций.
23. Устройство обработки по п.22, в котором модуль определения динамической задержки выполнен с возможностью определять значения динамической задержки на основе ресурсов процессора, доступных для соответствующего приложения.
24. Устройство обработки по п.18, в котором модуль определения динамической задержки выполнен с возможностью определять значения динамической задержки на основе ресурсов процессора, доступных для соответствующего приложения.
25. Устройство обработки по п.18, в котором модуль определения динамической задержки выполнен с возможностью определять значения динамической задержки путем хранения истории спекулятивного выполнения инструкций и определения значения динамической задержки на основе истории спекулятивного выполнения инструкций.
26. Устройство обработки по п.25, в котором модуль определения динамической задержки выполнен с возможностью хранить историю спекулятивного выполнения инструкций путем отслеживания случаев сброса конвейера выполнения.
27. Устройство обработки по п.18, в котором значения динамической задержки указывают, по меньшей мере, одно из полностью спекулятивного выполнения инструкций, неспекулятивного выполнения инструкций, полностью спекулятивного выполнения инструкций после некоторого числа циклов задержки обработки инструкций и частично спекулятивного выполнения инструкций.
28. Устройство обработки по п.27, в котором частично спекулятивное выполнение инструкций содержит приостановление выполнения каждой инструкции на указанной стадии, пока более старшая инструкция не будет подтверждена.
29. Устройство обработки по п.18, в котором модуль определения динамической задержки выполнен с возможностью управлять сохранением значений в регистре.
30. Устройство обработки по п.29, в котором модуль обработки выполнен с возможностью задерживать выполнение отдельных наборов из одной или более инструкций на основе соответствующего значения динамической задержки посредством извлечения значений динамической задержки из регистра, задерживания выполнения отдельных наборов из одной или более инструкций на основе соответствующего извлеченного значения динамической задержки и управления сохранением результатов выполнения наборов инструкций.
31. Устройство обработки по п.30, в котором модуль обработки выполнен с возможностью управлять сохранением результатов выполнения наборов инструкций посредством временного сохранения результатов неподтвержденных инструкций, ассоциативно связанных с одним или более из наборов инструкций.
32. Устройство обработки по п.31, в котором модуль обработки дополнительно выполнен с возможностью обновлять достигнутое состояние с помощью результатов, ассоциативно связанных, по меньшей мере, с одним из наборов из одной или более инструкций, которые подтверждены.
33. Устройство обработки по п.31, в котором модуль обработки дополнительно выполнен с возможностью очищать результаты, ассоциативно связанные с неподтвержденными инструкциями в ответ на условие сброса конвейера выполнения.
34. Устройство обработки по п.33, в котором условие сброса конвейера выполнения соответствует, по меньшей мере, одному из ошибок при ошибочном прогнозировании ветвления, исключения, ловушки, прерывания или сбоя.
35. Способ установления задержки выполнения инструкций в сопроцессоре, содержащий этапы, на которых:
задерживают выполнение входящих инструкций в соответствии со значением динамической задержки, принимаемым от ассоциативно связанного процессора; и
изменяют размер задержки, устанавливаемой на последующие входящие инструкции, в ответ на прием новой динамической задержки от ассоциативно связанного процессора; и
причем, по меньшей мере, первое или второе значение динамической задержки указывает, по меньшей мере, частично спекулятивное выполнение инструкций, а частично спекулятивное выполнение содержит спекулятивное выполнение инструкции в сопроцессоре и приостановление выполнения инструкции на указанной стадии.
36. Компьютерно-считываемый носитель данных, имеющий инструкции, которые при выполнении системой, содержащей, по меньшей мере, один процессор, приводят к изменению задержки выполнения инструкций в процессоре, после того как инструкции были выбраны и декодированы, при этом компьютерно-считываемый носитель данных содержит:
инструкции для определения первого значения динамической задержки для первого набора из одной или более инструкций и второго значения динамической задержки для второго набора из одной или более инструкций на основе одного или более приложений, выполняемых процессором; и
инструкции для предоставления значения инструкции задержки в процессор;
причем значение динамической задержки указывает, по меньшей мере, частично спекулятивное выполнение инструкций.
Описание изобретения к патенту
Область техники
Настоящее изобретение, в общем, относится к микропроцессорам, более конкретно относится к динамической задержке выполнения инструкций.
Уровень техники
Современные системы обработки традиционно включают в себя основной или центральный процессор и один или более сопроцессоров. Основной процессор перекладывает нагрузку по определенным задачам на сопроцессоры. Например, задачи с плавающей точкой, арифметические, графические задачи, задачи обработки сигналов, обработки строк, шифрования и/или обработки векторов могут быть вынесены на соответствующие сопроцессоры. Вычислительная загрузка, лежащая на основном процессоре, облегчается путем переноса ресурсоемких для процессора задач, таким образом улучшая системную производительность.
Инструкция, перенесенная на сопроцессор, может быть спекулятивной, т.е. основной процессор еще до конца не принял решение, должна ли инструкция быть выполнена, когда она предоставляется в сопроцессор для выполнения. Это зачастую происходит в контексте инструкций условного ветвления. Когда встречается инструкция условного ветвления, процессор предсказывает по какому пути она пойдет; перейдет ли она в другой поток кода (т.е. ветвление принято), или выполнение продолжится инструкцией после ветвления (т.е. ветвление не принято). Процессор или сопроцессор тогда спекулятивно выполняет одну или более инструкций, ассоциативно связанных с предсказанным путем. Когда инструкция ветвления позже разрешена, может быть определено, что путь был предсказан неправильно, зачастую это упоминается как ошибочное прогнозирование ветвления. Когда происходит ошибочное прогнозирование ветвления, все инструкции в ошибочно спрогнозированном пути отбрасываются или очищаются. Это может повлечь ненужное потребление энергии, поскольку любая работа, выполненная по инструкциям в ошибочно спрогнозированном пути, была ненужной, но все же, возможно, существенной.
Чтобы уменьшить отрицательные эффекты, ассоциативно связанные с ошибочно прогнозированными ветвлениями, традиционные сопроцессоры работают с фиксированным временем задержки выполнения инструкций. Инструкции, принимаемые традиционным сопроцессором, задерживаются на время задержки выполнения, соответствующее фиксированному времени задержки. По сути, выполнение инструкций, принимаемых сопроцессором, не начинается до истечения фиксированного времени задержки. Как только схема процессора 'закреплена', время задержки выполнения инструкции не может быть изменено без пересмотра схемы. Таким образом, каждая инструкция, выполняемая традиционным сопроцессором, задерживается на одно и то же фиксированное время задержки безотносительно конкретного выполняемого приложения и окружения, в котором оно выполняется. Тем не менее, приложения различного типа дают, в результате, различную предсказуемость выполнения инструкции. Так, спекулятивные инструкции, ассоциативно связанные с некоторыми типами приложений, почти всегда принимаются с правильным прогнозом, и, таким образом, выполнение спекулятивных инструкций довольно надежно, потому что вероятность ошибочного прогнозирования ветвления относительно низка.
Например, функция обратного преобразования, используемая приложением декодирования видео, выполняется для каждого макроблока каждого видеокадра. Наоборот, выполнение спекулятивных инструкций, ассоциативно связанных с другими типами приложений, может быть менее надежным, повышая вероятность сброса конвейера выполнения. Например, функции фильтров разблокирования и подавления ревербераций, выполняемые приложением декодирования видео, зависят от значений пикселей конкретного видеокадра и выполняются менее прогнозируемо. В результате, фиксированное время задержки выполнения инструкции может снижать производительность процессора или повышать энергопотребление при выполнении спекулятивных инструкций, ассоциативно связанных с приложениями, у которых присутствует различная предсказуемость выполнения инструкции.
Время задержки выполнения инструкции традиционно установлено либо по одному экстремальному значению, которое предоставляет возможность полностью спекулятивного выполнения инструкций, либо по другому экстремальному значению, которое не предоставляет возможности спекулятивного выполнения инструкций. В режиме полностью спекулятивного выполнения инструкций сопроцессоры спекулятивно выполняют каждую инструкцию, предоставляемую к ним без времени задержки, и до того, как инструкция была подтверждена основным процессором. По сути, фиксированное время задержки выполнения инструкции - по существу нуль. Хотя эта методика полезна для производительности, она препятствует эффективному энергопотреблению, когда спекулятивное выполнение инструкции становится непредсказуемым. Например, высокоспекулятивные инструкции могут часто ошибочно прогнозироваться, таким образом, заставляя сопроцессор с нулевой задержкой часто выполнять код лишний раз. Эффективное энергопотребление ухудшается каждый раз, когда вычисления, ассоциативно связанные с ошибочно спрогнозированной инструкцией, очищаются из конвейера выполнения. Тем не менее, производительность повышается за счет отсутствия дополнительного времени ожидания запуска для новых инструкций, выданных в сопроцессор.
Наоборот, в конфигурациях неспекулятивного выполнения, сопроцессор задерживает выполнение инструкции, пока основной процессор не подтвердит соответствующую инструкцию. Хотя эта методика полезна с точки зрения энергопотребления для высокоспекулятивных инструкций, предотвращая выполнение инструкций, которые будут впоследствии сброшены, это снижает производительность системы за счет дополнительного времени ожидания запуска. Когда ветвления часто прогнозируются правильно и могут непрерывно подаваться в сопроцессор, долгое время ожидания запуска неразличимо и, таким образом, производительность значительно не ухудшается. С другой стороны, неспекулятивный подход значительно увеличивает эффективное время ожидания инструкции, когда, например, процессор ждет результатов от сопроцессора.
Сущность изобретения
Согласно способам и устройству, заданным в данном документе, инструкции, выполняемые в системе обработки, задерживаются на время задержки выполнения инструкций, которое динамически изменяемо. В то время как время задержки может быть изменено, чтобы вызывать либо полностью спекулятивное, либо неспекулятивное выполнение, оно также может вызывать частично-спекулятивное выполнение, где инструкции выполняют некоторое спекулятивное вычисление, но останавливают выполнение на определенной стадии, пока инструкция не подтверждена. Кроме того, время задержки может конфигурироваться, чтобы разрешить полностью спекулятивное выполнение после набора циклов в надежде, что предположение будет типично разрешено к тому времени, когда инструкция готова, чтобы обновить достигнутое состояние. Динамическое управление временем задержки исполнения во время выполнения позволяет системе обработки принимать во внимание различные изменяющиеся условия, которые могут встречаться, так или иначе, желательно увеличение время задержки выполнения инструкции.
В некоторых вариантах осуществления динамическое время задержки определяется приложением, которое должно быть выполнено системой обработки. В других вариантах осуществления динамическое время задержки определяется путем анализа истории ранее выполняемых инструкций. В еще одних других вариантах осуществления динамическое время задержки определяется путем оценки ресурсов обработки, доступных для данного приложения. Независимо, время задержки может быть динамически изменено на основе каждой инструкции, множества инструкций или приложения.
Выполнение инструкций процессора может управляться посредством определения первого значения задержки для первого набора одной или более инструкций и второго значения задержки для второго набора одной или более инструкций. Выполнение наборов инструкций задерживается на основе соответствующего значения задержки. Модуль определения задержки определяет значения задержки, и модуль обработки выполняет наборы инструкций на основе соответствующих значений времени задержки. Модуль определения задержки может быть включен в основной процессор или сопроцессор. Модуль обработки может содержать один или более исполнительных модулей, включенных в основной процессор или сопроцессор.
Конечно, настоящее изобретение не ограничено вышеупомянутыми признаками и преимуществами. Специалисты в данной области техники должны обнаружить дополнительные признаки и преимущества после прочтения нижеследующего подробного описания и после ознакомления с прилагаемыми чертежами.
Краткое описание чертежей
Фиг.1 - блок-схема, иллюстрирующая вариант осуществления системы обработки, имеющей модуль определения задержки.
Фиг.2 - блок-схема, иллюстрирующая вариант осуществления инструкции, помеченной с помощью динамического значения задержки выполнения инструкции.
Фиг.3 - блок-схема, иллюстрирующая вариант осуществления регистра, который хранит динамическую информацию задержки выполнения инструкции.
Фиг.4 - блок-схема логической последовательности операций, иллюстрирующая вариант осуществления программной логики для управления выполнением инструкции процессора.
Фиг.5 - блок-схема, иллюстрирующая вариант осуществления системы обработки, включающей в себя процессор, имеющий модуль определения задержки.
Фиг.6 - блок-схема, иллюстрирующая вариант осуществления системы обработки, имеющей модуль определения задержки, включенный в специализированный сопроцессор.
Фиг.7 - блок-схема, иллюстрирующая вариант осуществления процессора, имеющего модуль определения задержки.
Подробное описание изобретения
Фиг.1 иллюстрирует вариант осуществления системы 10 обработки, включающей основной или центральный процессор 12 и сопроцессор 14. Сопроцессор 14 выполняет инструкции, предоставляемые ему основным процессором 12 на основе динамической задержки выполнения инструкции. Таким образом, сопроцессор задерживает выполнение инструкций в соответствии с динамической задержкой. Возможность изменить задержку выполнения инструкции после того, как этап проектирования закончен, позволяет системе 10 обработки динамически принимать во внимание различные условия, которые воздействуют на выполнение инструкции, на основе корректировки динамической задержки соответственно.
В некоторых вариантах осуществления модуль 16 определения задержки включен в/или ассоциативно связан с основным процессором 12, сопроцессором 14 или другим сопроцессором (не показан), модуль 16 определения задержки принимает во внимание спекулятивный характер определенного набора одной или более инструкций, которые должны выполняться сопроцессором 14. Модуль 16 определения задержки принимает во внимание спекулятивный характер инструкций, изменяя задержку выполнения инструкции, ассоциативно связанную с сопроцессором 14 соответственно. Некоторые инструкции могут быть более или менее спекулятивными, чем другие, т.е. они более или менее вероятно подтвердятся, что позволяет им обновить спроектированное состояние в основном процессоре 12 или сопроцессоре 14. Спроектированное состояние включает в себя любое состояние, видимое программисту посредством набора команд процессора. Например, результат выполнения инструкции может быть сохранен в регистровом файле 18, включенном в или ассоциативно связанном с основным процессором 12, или в регистровом файле 19, включенном в или ассоциативно связанном с сопроцессором 14. По сути, каждая инструкция или набор инструкций, выгруженных на сопроцессор 14, могут задержаться на время задержки выполнения на основе их спекулятивного характера. Например, высокоспекулятивные инструкции могут задержаться на большее время задержки выполнения, в то время как менее спекулятивные инструкции могут задержаться на меньшее время задержки.
В других вариантах осуществления модуль 16 определения задержки принимает во внимание объем ресурсов обработки, доступных для приложения, которое должно выполняться системой 10 обработки. Таким образом, модуль 16 определения задержки изменяет динамическую задержку на основе ресурсов обработки, таких как скорость обработки, полоса пропускания запоминающего устройства, размер кэша, возможности дисплея, режим батареи, время работы от аккумулятора, режим сохранения энергии и т.п. По сути, модуль 16 определения задержки позволяет системе 10 обработки достигать компромисса между производительностью системы и потребляемой мощностью, соответственно, изменяя задержку выполнения, ассоциативно связанное с сопроцессором 14. Например, если принято во внимание время работы от аккумулятора, модуль 16 определения задержки может изменить время задержки сопроцессора 14 так, чтобы инструкции не выполнялись, пока они не подтверждены основным процессором 12, таким образом, снижая потребляемую мощность.
Независимо от состояния, которое запускает регулировку задержки выполнения инструкции, задержка может быть динамически изменена на основе каждой инструкции, множества инструкций или приложения. Возможность изменять задержку выполнения инструкции не предотвращает очисток конвейера инструкций; скорее - это предоставляет возможность управления спекулятивным выполнением, основанным на задержке. Выгодой для пользователей является динамическое балансирование энергопотребления и производительности и оптимизация системы 10 обработки.
Более подробно, основной процессор 12 подключен с возможностью осуществления связи с сопроцессором 14. Основной процессор 12 включает в себя модуль 20 обработки инструкций, один или более исполнительных модулей 22 и регистровый файл 18. Модуль 20 обработки инструкций предоставляет централизованное управление потоком инструкций к исполнительным модулям 22 и на сопроцессор 14. Исполнительные модули 22, которые могут включать в себя один или более модулей загрузки и хранения (не показаны), модулей для операций с плавающей точкой (не показаны) и модулей для целочисленных операций (не показаны), выполняют инструкции, отправленные модулем 20 обработки инструкций. Регистровый файл 18 содержит массив регистров, которые размещают данные между запоминающим устройством (не показано) и функциональными модулями основного процессора 12, к примеру, исполнительными модулями 22. Аналогично, регистровый файл сопроцессора 19 содержит регистры, которые размещают данные между запоминающим устройством (не показано) и функциональными модулями сопроцессора 14, к примеру исполнительными модулями 26. Регистровый файл 18 может хранить временные результаты прежде, чем соответствующие инструкции будут подтверждены основным процессором 12. В такой компоновке регистровый файл 18 может реализовать переименование регистров, которое позволяет динамическое отображение физических записей регистрового файла в спроектированные регистровые имена. По сути, записи регистра, удерживающие временные результаты, могут быть переименованы, когда инструкции подтверждены. Аналогично, сопроцессор 14 может хранить временные результаты, формируемые им, пока выданные инструкции не подтверждены, в это время регистровый файл 19 обновляется.
Сопроцессор 14 принимает инструкции, выгруженные модулем 20 обработки инструкций. В некоторых вариантах осуществления сопроцессор 14 допускает только выполнение функций сопроцессора и не может выбирать инструкции из памяти (не показана), выполнять инструкции управления потоком данных программы, выполнять операции ввода/вывода, управлять запоминающим устройством и т.п. По сути, основной процессор 12 выбирает инструкции для сопроцессора 14 и обрабатывает другие операции, кроме функций сопроцессора. В других вариантах осуществления сопроцессор 14 функционирует больше как универсальный процессор, выполняя ограниченный диапазон дополнительных функций под управлением основного процессора 12.
Тем не менее, инструкции, выгруженные на сопроцессор 14, могут быть буферизированы в очереди 24 инструкций для последующей отправки в исполнительный модуль 26 сопроцессора или могут быть предоставлены непосредственно в исполнительный модуль 26 сопроцессора. Очередь 24 инструкций сопроцессора может постоянно размещаться в основном процессоре 12 или в других расположениях за пределами сопроцессора 14. Исполнительный модуль 26 сопроцессора может содержать множество ступеней 28 для того, чтобы выполнять инструкции, к примеру ступени декодирования, регистрового доступа, выполнения и обратной записи. Независимо от конвейерной природы исполнительного модуля 26 сопроцессора, каждая инструкция выполняется сопроцессором 14 на основе динамической задержки, сохраненной в регистре 30. Дополнительно, каждая инструкция или набор инструкций, предоставляемых на сопроцессор 14, ассоциативно связаны со своей соответствующей задержкой. Эта ассоциативная связь позволяет динамически перепрограммировать регистр 30, не теряя значение(я) задержки, назначенное инструкции(ям), еще не полностью выполненной. В результате, задержки, ассоциативно связанные с инструкциями, двигающимися через очередь 24 инструкций и различные ступени 28 выполнения, доступны для последующего использования. В одном варианте осуществления каждый набор из одной или более инструкций, обрабатываемых сопроцессором 14, помечается своей назначенной задержкой, как показано на фиг.2. По сути, инструкции, двигающиеся через очередь 24 инструкций сопроцессора и исполнительный модуль 26, содержат первое поле 32, содержащее декодированную инструкцию, второе поле 34, содержащее значение задержки, назначенное инструкции, третье поле 36, содержащее необязательные тэги, и четвертое поле 38, содержащее один или более битов необязательных флагов.
Динамическое значение задержки выполнения инструкции может быть выражено в различных формах. Эти различные формы для динамического значения задержки выполнения инструкции могут быть использованы отдельно или в комбинации. В одном варианте осуществления динамическая задержка выполнения инструкции соответствует флагу 40 спекулятивного выполнения инструкции в регистре 30, как проиллюстрировано на фиг.3. Инструкции выполняются спекулятивно без задержки, когда флаг 40 спекулятивного выполнения инструкции установлен. В другом варианте осуществления динамическая задержка выполнения инструкции соответствует флагу 42 подтверждения инструкции в регистре 30, как проиллюстрировано на фиг.3. Когда флаг 42 подтверждения инструкции установлен, выполнение инструкции задерживается, пока соответствующая инструкция не подтверждена основным процессором 12, т.е. основной процессор 12 окончательно принял решение, что инструкция должна быть выполнена.
В еще одном варианте осуществления динамическое время задержки выполнения инструкции соответствует полю 44 счетчика циклов процессора в регистре 30, как проиллюстрировано на фиг.3. Когда в поле 44 счетчика загружено значение, выполнение инструкции задерживается, пока не пройдет некоторое число циклов процессора, соответствующее полю 44 счетчика. После того как прошло достаточное число циклов процессора, может начаться выполнение инструкции, предполагая, что никакие другие условия не задерживают ее выполнение. В еще другом варианте осуществления динамическая задержка выполнения инструкции соответствует полю 46 ступени конвейера в регистре 30, как проиллюстрировано на фиг.3. Поле 46 ступени конвейера указывает число ступеней 28 конвейера выполнения сопроцессора 14, через которые выполнение инструкции прошло. Выполнение инструкции останавливается на указанной ступени до тех пор, пока основной процессор 12 не подтвердит соответствующую инструкцию. Выполнение инструкции возобновляется на оставшихся ступенях 28 после того, как основной процессор 12 подтвердит инструкцию. Например, значение, сохраненное в поле 46 ступени конвейера, может указывать ступень непосредственно перед ступенью обратной записи исполнительного модуля 26 сопроцессора, к примеру, стадией n, как показано на фиг.1. Инструкции выполняются без задержки, пока они не достигнут ступени обратной записи. По сути, результаты не обновляют достигнутое состояние, пока инструкция не подтверждена основным процессором 12, таким образом, предоставляя возможность сброса временных результатов в случае, когда инструкция не подтверждена.
Возвращаясь к фиг.1, модуль 16 определения задержки определяет динамическую задержку выполнения инструкции, которая должна быть ассоциативно связана с отдельными инструкциями или группами инструкций, как проиллюстрировано этапом 100 на фиг.4. Модуль 16 определения задержки содержит микропрограммное обеспечение и/или аппаратные средства, подходящие для того, чтобы формировать динамическую задержку. Как бы не было сформировано, значение задержки предоставляется в сопроцессор 14, где значение определяет задержку выполнения, на которую задерживаются инструкции, обрабатываемые сопроцессором 14, как проиллюстрировано этапом 102 на фиг.4.
В некоторых вариантах осуществления модуль 16 определения задержки определяет динамическое время задержки выполнения инструкции на основе приложения, которое должно выполняться системой 10 обработки. Таким образом, приложение указывает соответствующую задержку выполнения, или соответствующая задержка может быть определена посредством или для приложения. В одном варианте осуществления приложение определяет динамическую задержку на основе ресурсов обработки, доступных для приложения, к примеру, скорость обработки, полоса пропускания запоминающего устройства, размер кэша, возможности дисплея, режим батареи, время работы от аккумулятора, режим сохранения энергии и т.п.
В другом варианте осуществления приложение определяет динамическую задержку на основе задержки выполнения инструкции, которая может быть допущена приложением. Например, некоторые приложения могут допускать длительную задержку выполнения инструкции без неблагоприятного воздействия на производительность системы, к примеру приложения, которые выполняют пакетную обработку с большим числом циклов, где результаты потребляются значительно позже выполнения вычислений. Наоборот, другие приложения не могут допускать длительной задержки выполнения инструкции, к примеру приложения, у которых есть наборы коротких команд или которые требуют результатов немедленно.
Производительность системы может быть оптимизирована путем приспосабливания задержки выполнения инструкции к отдельным приложениям. Каждое приложение, выполняемое системой 10 обработки, может корректировать задержку выполнения инструкции соответствующим образом, к примеру на основе каждой инструкции, множества инструкций или приложения. Приложение может определять динамическую задержку во время компиляции, к примеру, используя оперативный компилятор Java , во время загрузки приложения или во время выполнения приложения, также упоминаемое как время выполнения программы. Тем не менее, модуль 16 определения задержки предоставляет инструкцию основному процессору 12, что указывает требуемую задержку выполнения инструкции. В ответ на инструкцию основной процессор 12 может непосредственно записать динамическое значение задержки в регистр 30 сопроцессора. Альтернативно, основной процессор 12 пропускает инструкцию в сопроцессор 14, где сопроцессор 14 декодирует инструкцию и обновляет регистр 30 соответствующим образом.
В других вариантах осуществления модуль 16 определения задержки определяет динамическую задержку выполнения инструкции на основе данных истории ветвления. В одном варианте осуществления модуль 16 определения задержки хранит таблицу 50 данных истории ветвлений, к примеру данные, которые указывают точность прогнозирования ветвлений. В одном варианте осуществления данные истории ветвлений соответствуют частоте сбросов конвейера выполнения. В таком контексте модуль 16 определения задержки отслеживает каждый раз, когда сопроцессор 14 сбрасывает инструкции из своей очереди 24 инструкций или исполнительного модуля 26 и ассоциативно связывает такие случаи с соответствующей инструкцией, которая вызвала возникновение каждого сброса. Эти данные предоставляют индикацию относительно того, насколько спекулятивны определенные инструкции. Чем более спекулятивной является инструкция, тем больше задержка, которая может быть назначена инструкции, и наоборот.
В другом варианте осуществления данные истории ветвлений соответствуют данным, поддерживаемым модулем обработки ветвлений (не показан), включенным в основной процессор 12, к примеру данным, хранящимся в таблице истории переходов (не показана). Когда инструкция или набор инструкций выгружены в сопроцессор 14, модуль 16 определения задержки осуществляет доступ к таблице истории 50 для того, чтобы определить, будет ли инструкция(и), более или менее вероятно, подтверждена основным процессором 12. Чем более спекулятивной является инструкция(и), тем больше задержка, назначенная инструкции(ям). Обратное сохраняется для менее спекулятивных инструкций.
В еще других вариантах осуществления модуль 16 определения задержки использует гибридную технологию для того, чтобы определить динамическую задержку выполнения инструкции. Согласно гибридной технологии, приложение, которое должно быть выполнено системой 10 обработки, использует исторические данные, поддерживаемые модулем 16 определения задержки, чтобы определить динамические значения задержки. Таким образом, приложение исследует таблицу 50 истории, чтобы определить задержку выполнения, которая будет назначаться инструкциям, составляющим приложение. Гибридная технология позволяет программам осуществлять доступ к историческим данным, чтобы определить времена задержки выполнения инструкции, которые лучше всего удовлетворяют отдельным приложениям. Это может произойти во время компиляции, загрузки или выполнения программы.
Независимо от того, как определена динамическая задержка, модуль 16 определения задержки может быть включен в основной процессор 12, как упомянуто ранее. Фиг.5 иллюстрирует один вариант осуществления системы 10 обработки, где модуль 16 определения задержки включен в/или ассоциативно связан с модулем 20 обработки инструкций основного процессора 12. Модуль 60 извлечения инструкций извлекает инструкции из кэша инструкций (не показан), декодирует их и загружает декодированные инструкции в очередь 62 инструкций. Модуль 64 пересылки инструкций пересылает поставленные в очередь инструкции к соответствующим исполнительным модулям 22. Модуль 66 обработки ветвлений (BPU) обнаруживает инструкции ветвления и, в зависимости от типа обнаруженного ветвления, выполняет различные механизмы прогнозирования ветвлений, к примеру, прогнозируя целевой адрес ветвления и/или то, будет ли принято конкретное ветвление. BPU хранит таблицу 68 истории переходов (BHT), которая отслеживает хронологию "принята/не принята" для недавно выполненных инструкций ветвления.
Модуль 16 определения задержки может осуществить доступ к BHT 68, чтобы определить динамические значения задержки, назначаемые инструкциям, имеющим историю, отслеживаемую посредством BHT 68. В одном варианте осуществления модуль 16 определения задержки дополняет свою таблицу 50 истории с помощью этой BHT 68. Модуль 16 определения задержки использует информацию, хранящуюся в BHT 68, для того, чтобы определить динамические значения задержки выполнения инструкции, к примеру, определяя значения задержки на основе силы или слабости предыдущей истории "принятых/не принятых" ветвлений. Получившиеся, в результате, динамические значения задержки предоставляются в сопроцессор 14 для задержки выполнения выгруженных инструкций, как описано ранее.
Альтернативно, фиг.6 иллюстрирует один вариант осуществления системы 10 обработки, где модуль 16 определения задержки включен в сопроцессор 70, выделенный для определения динамических задержек выполнения инструкций для одного или более других сопроцессоров 14 и/или основного процессора 12. Другие сопроцессоры 14 и основной процессор 12 - каждый включает в себя регистр 30 для того, чтобы хранить информацию динамической задержки, формируемую выделенным сопроцессором 70. Выделенный сопроцессор 70 отслеживает операции по всей системе, чтобы определить, какие динамические задержки лучше всего удовлетворяют каждому из других сопроцессоров 14 и основному процессору 12. По сути, выделенный сопроцессор 70 может определять динамические значения задержки, которые уникально удовлетворяют каждому из других сопроцессоров 14 и основному процессору 12. Выделенный сопроцессор 70 может определять динамические значения задержки в соответствии с любым из вариантов осуществления, ранее раскрытых в данном документе, к примеру посредством приложения, которое должно быть выполнено системой 10 обработки, анализа истории ранее выполненных инструкций или оценки системных ресурсов, доступных для данного приложения.
В то время как различные варианты осуществления определения динамической задержки, ранее раскрытые в данном документе, были описаны в значительной степени относительно сопроцессоров, они одинаково применимы к исполнительным модулям 22, включенным в основной процессор 12. Таким образом, один или более из исполнительных модулей основного процессора 22 может использовать динамические значения задержки, определенные модулем 16 определения задержки, чтобы управлять внутренней синхронизацией выполнения инструкций. В этом контексте фиг.7 иллюстрирует один вариант осуществления основного процессора 12, включающего модуль 16 определения задержки для того, чтобы управлять временем задержки выполнения инструкции, ассоциативно связанным с одним или более из исполнительных модулей 22 основного процессора 12.
Исполнительные модули 22 могут содержать множество ступеней 82 для того, чтобы выполнить инструкции, к примеру ступени декодирования, доступа к регистрам, выполнения и обратной записи. Инструкции, которые должны быть выполнены внутри посредством основного процессора 12, могут быть буферизированы в очереди 80 инструкции для последующего выполнения или могут быть предоставлены непосредственно на первую из ступеней 82 выполнения. Независимо от конвейерной и организующей очередь природы исполнительных модулей 22, выполнение инструкции базируется на динамической задержке выполнения инструкции, сохраненной в одном или более регистров 30. Чтобы разрешить динамическое изменение задержки выполнения инструкции, каждый набор одной или более инструкций, предоставляемых к исполнительным модулям 22, ассоциативно связывается со своей соответствующей задержкой. По сути, регистры 30 могут быть динамически перепрограммированы без потери значений задержки, назначенных предыдущим, еще не выполненным инструкциям. Значения динамической задержки могут быть определены в соответствии с любым из вариантов осуществления, ранее раскрытых в данном документе. Кроме того, модуль 16 определения задержки может определять различную динамическую задержку для каждого исполнительного модуля 18, включенного в основной процессор 12, таким образом, предоставляя возможность управления синхронизацией выполнения инструкций на основе каждого исполнительного модуля.
По меньшей мере, некоторые инструкции, выполняемые в системе 10 обработки, задерживаются перед выполнением на основе значения динамически изменяемой задержки. В некоторых вариантах осуществления динамическая задержка определяется приложением, которое должно быть выполнено системой 10 обработки. Основанная на приложении корректировка задержки выполнения может быть выполнена во время компиляции, во время загрузки или во время выполнения программы. В других вариантах осуществления динамическая задержка определяется путем анализа истории ранее выполненных инструкций. В еще одних других вариантах осуществления динамическая задержка определяется путем оценки ресурсов обработки, доступных для данного приложения. Тем не менее, динамическая задержка выполнения инструкции может быть определена основным процессором 12 или сопроцессором 14. Динамическая задержка может быть нулевой задержкой, на основе цикла или на основе ступени и события. Задержки на основе ступени и события приводят, в результате, к инструкциям, удерживаемым на указанной ступени обработки, включая очередь инструкций, пока не произойдет указанное событие (к примеру, принимается подтверждение). Задержка может быть динамически изменена на основе каждой инструкции, множества инструкций или приложения.
Помня о вышеописанном диапазоне разновидностей и вариантов применения, следует понимать, что настоящее изобретение не ограничено вышеозначенным описанием, как и не ограничено прилагаемыми чертежами. Наоборот, настоящее изобретение ограничено только последующей формулой изобретения и ее обоснованными эквивалентами.
Класс G06F9/38 совмещение выполнения одновременных команд, например строчная печать, просмотр