Хранение вашего кода в кеше L1
Я читал статью в Википедии о языке программирования K, и вот что я увидел:
Небольшой размер интерпретатора и компактный синтаксис языка позволяют K-приложениям полностью вписываться в кэш 1-го уровня процессора.
Я заинтригован. Как можно иметь всю программу в кеше L1? Скажем, процессор имеет 256 Кбайт кеша L1. Скажем, моя программа намного меньше, и ей нужно очень мало памяти (скажем, только для стека вызовов и тому подобного). Скажем, ему не нужны никакие библиотеки (хотя, если программа предназначена для ОС, она должна включать kernel32.dll или что-то еще). И разве ОС автоматически не выделяет минимальный объем памяти для какой-либо программы (ну, для исполняемого кода, стека и кучи)?
Спасибо.
4 ответа
Я думаю, что они говорят не о том, что вся программа помещается в кэш L1, а о том, что весь код, который выполняется большую часть времени, помещается в кэш L1.
Да, ОС выделяет множество других структур, но они поражаются достаточно редко, чтобы не иметь значения.
Конечно, это все домыслы - я ничего не знаю о языке "К".
Я полагаю, что они говорят о том преимуществе, что основной исполняемый код помещается в кэш L1; независимо от памяти, выделенной для программы. Как только приложение K загружено, если оно никогда не касается этой памяти, не имеет значения, распределяется ли оно с точки зрения производительности (то есть преимущества от полного нахождения в кеше L1).
Вы путаете весь программный код с наиболее часто выполняемым кодом.
Для интерпретируемых языков ядро интерпретатора, безусловно, является одним из наиболее часто исполняемых кодов. Наличие наиболее часто выполняемого кода в кэше ускоряет выполнение так же, как и наиболее часто выполняемый доступ к данным в кэше.
Ключевой частью является "наиболее часто" - нет необходимости кэшировать весь код / данные, чтобы увидеть значительное ускорение.
Интерпретатор работает как обычная программа, управляемая ОС. Интерпретируемая программа выполняется в пространстве памяти интерпретатора в сегменте данных. Многие K-программы могут легко вписаться в кэш L1 полностью, даже если весь интерпретатор не может. Основной цикл интерпретатора, вероятно, подойдет, хотя.