Здравствуйте, netch80, Вы писали:
V>>В любом случае, эффективно обыграть эту проблему с целью утилизации выч. блоков получилось только с аппаратной многопоточностью, а не через ОоО и переименование регистров. V>>Единственно что, 2x аппаратная многопоточность оказалась недостаточной, более хорошо выглядели 4x и даже 16x многопоточность. N>Так "утилизация выч. блоков" никогда не была прямой целью.
Это совершенно новая для меня мысль. ))
N>А вот сократить задержки на команды в целом — да.
Это в "лапшееобразном" коде т.н. "бизнес-логики", где куча if-ов и простейших перемещений данных в памяти, зачастую даже без вычислений.
Т.е. где код заведомо неэффективный-непродуманный с произвольной итерацией по графу косвенно связанных блоков данных произвольной же глубины этих связей.
Именно под такой непродуманный код требуется ОоО.
А где происходят именно полезные вычисления над сколь-нибудь заметными объёмами данных, там все эти вещи прекрасно обыгрываются через prefetch, да и сам лейаут данных в памяти продуман всяко лучше, чем эти бесконечные виноградные гроздья т.н. бизнес-объектов в памяти, особенно в языках наподобие Джавы или C#, провоцирующих просто чудовищную косвенность хранения данных, что предсказать промахи кеша на этапе компиляции действительно невозможно. ))