Сбор-разброс - это тип адресации памяти, который часто возникает при адресации векторов в операциях разреженной линейной алгебры . Это векторный эквивалент косвенной адресации регистров со сборкой, включающей индексированные чтения и разбросанные индексированные записи. Векторные процессоры (и некоторые блоки SIMD в ЦП ) имеют аппаратную поддержку операций сбора-разброса, предоставляя такие инструкции, как Загрузить вектор, индексированный для сбора и Сохранить вектор, индексированный для разброса.
Малонаселенный вектор держит непустые элементы может быть представлены два густонаселенными векторами длины ; содержащий непустые элементы и указание индекса, в котором расположен элемент. Совокупность в , обозначенная , назначается с уже вычисленным. [1] Предполагая отсутствие псевдонимов указателя между x [], y [], idx [], реализация C является
для ( я = 0 ; я < N ; ++ я ) х [ я ] = у [ idx [ я ]];
Обозначенный разреженный разброс представляет собой обратную операцию. Он копирует значения в соответствующие места в малонаселенном векторе , т . Е.
для ( i = 0 ; i < N ; ++ i ) y [ idx [ i ]] = x [ i ];