1

Параллельность в Java или некоторых подобных языках достигается посредством потоков или параллелизма на уровне задач. Но под капотом аппаратное обеспечение или время работы также используют ILP для достижения наилучшей производительности.
Дальнейшая разработка: в многоядерном процессоре (скажем, 4 за систему) с несколькими потоками (скажем, 2 на ядро) (т.е. всего 8 потоков на систему), поток java выполняется в одном из нескольких (в этом случае 8) потоки процессора. Но если система определяет, что все или несколько других потоков ничего не делают, но остаются идеальными, может ли аппаратное обеспечение или среда выполнения выполнять какие-либо юридические переупорядочения и выполнять их в других потоках на тех же или других ядрах и возвращать результаты назад (или в главные память)
Я беспокоюсь о том, что реализация java разрешает это или даже в противном случае это аппаратное обеспечение, чтобы справиться с этим независимо, даже с JVM, даже зная что-либо.java concurrency - Параллелизм уровня инструкций (ILP), используемый underhood

+0

Существует более одной реализации языка Java, и существует более чем одна аппаратная платформа, для которой доступны реализации Java. Они не все должны работать точно так же: им нужно только добросовестно внедрять спецификацию Java Language Specification (JLS). Ничто из того, о чем вы просите, упоминается в JLS. –

ответ

3

Немного непонятно, о чем вы спрашиваете, но я не думаю, что это имеет много общего с Java.

Я думаю, что вы говорите (по крайней мере) две разные вещи:

  1. «МЛП», как правило, используется для обозначения набора методов, которые происходят в одном ядре (например, конвейерная и предсказание ветви) и имеет мало общего с потоковой или многоядерной обработкой. Эти методы являются прозрачными деталями реализации CPU и обычно не отображаются так, как вы (или среда выполнения) можете взаимодействовать напрямую.

  2. Нити меняются местами ядра и выключены ядрами, если они блокируются (и даже если это не так, чтобы обеспечить справедливость).

+0

Я вижу, что вы говорите, а # 1 просто упрощает вещи. Есть ли какая-либо ссылка, которую вы можете указать на внутренние элементы ILP (за пределами wiki) (я буду очень благодарен за любую дополнительную информацию). поэтому в каждом ядре он имеет собственный ILP (если вообще), и это независимо от других IPL-ядер или операций. И если в одном потоке происходит только одна интенсивная операция с использованием данных/вычислений, а другие эффективно ничего не делают или сидят без дела, нет другого способа, чтобы другие ядра или потоки процессора мешали или помогали ускорить вычисление. – samshers

+0

# 2 - переключение потоков с одного процессора (или потока процессора при использовании HT) на другой кажется прекрасным, если существует несколько потоков, борющихся за одни и те же ресурсы. Существует определенная масса переключения контекста, и планировщик может каждый раз назначать новое ядро ​​или то же самое. – samshers

+0

, поэтому IPL является мерой одиночного/индивидуального ядра или одиночного/отдельного потока (в HT), но не для многопроцессорного процессора в целом. Правильно?? – samshers