3D effectsПричем, описываемый случай отнюдь не является надуманным, скорее наоборот. Это типичная ситуация. Базовые структуры данных имеют ярко выраженную зависимость по данным, т.к. объединяют свои элементы именно посредством указателей, что сводит на нет весь выигрыш от параллелизма. Большинство функции штатных библиотек Си/Си++ также имеют зависимость по данным и не могут обрабатывать их параллельно. Маскировать латентность позволяют лишь очень немногие алгоритмы, да и то не без помощи специальных команд предвыборки. Команды предвыборки, во-первых, отсутствуют в микропроцессорах Pentium младшего поколения. Во-вторых, они чрезвычайно аппаратно зависимы и требуют реализовать код как минимум в двух вариантах отдельно для процессоров Pentium и отдельно для процессоров K 6/ K 7, причем, реализация для PentiumIII будет весьма не оптимальна для Pentium 4 и, соответственно, наоборот. Наконец, в-третьих, команды предвыборки до сих пор не поддерживаются ни одним оптимизатором, и вряд ли будут поддерживаться в ближайшем будущем. Ручная же оптимизация слишком сложна и трудоемка, чтобы стать массовой.
|