gpucoder.sort

Оптимизированная реализация графического процессора функции вида MATLAB

Описание

пример

B = gpucoder.sort(A) сортирует элементы A в порядке возрастания. Операция вида выполняется на графическом процессоре с помощью библиотеки Thrust. Тяга является библиотекой шаблонов C++ для CUDA® и поставляется с инструментарием CUDA. Отсортированный выход в B имеет тот же тип и размер как A. Если A вектор, gpucoder.sort(A) сортирует элементы в порядке возрастания. Если A матрица, gpucoder.sort(A) виды каждый столбец в порядке возрастания. Если A N-мерный массив, gpucoder.sort(A) виды по первому неодноэлементному измерению.

B = gpucoder.sort(A,dim) имеет дополнительный аргумент dim это задает размерность, по которой выполняется операция вида.

B = gpucoder.sort(A,direction) имеет дополнительный аргумент direction это задает направление вида. direction может принять одно из двух значений:

  • 'ascend' - Сортировки в порядке по возрастанию. Это - опция по умолчанию

  • 'descend' - Сортировки в порядке убывания.

[B,I] = gpucoder.sort(A,...) возвращается вид индексируют I который задает как элементы A были перестроены, чтобы получить отсортированный выход B.

  • Если A вектор, затем B = A(I).

  • Если A матрица m на n и dim = 1то

    for j = 1:n
      B(:,j) = A(I(:,j),j);
    end

Упорядоченное расположение вида устойчиво. А именно, когда больше чем один элемент имеет то же значение, порядок равных элементов сохраняется в отсортированном выходе B и индексах, я имеющий отношение к равным элементам возрастаю.

Когда gpucoder.sort называется из MATLAB®, это использует встроенное sort функция.

Примеры

свернуть все

Этот пример генерирует код CUDA, чтобы отсортировать столбцы матрицы в порядке убывания.

В одном файле запишите функции точки входа mySort это признает, что матрица вводит A. Используйте gpucoder.sort функционируйте, чтобы отсортировать столбцы A в порядке убывания.

function B = mySort(A)
     B = gpucoder.sort(A, 1, 'descend');
end

Используйте codegen функция, чтобы сгенерировать MEX-функцию CUDA.

codegen -config coder.gpuConfig('mex') -args {ones(1024,1024,'double')} -report mySort

Следующее является отрывком сгенерированного кода. Вызов библиотеки Thrust обозначается thrustSortImpl

...
cudaMalloc(&gpu_inDims, 8ULL);
cudaMalloc(&gpu_B, 8388608ULL);
cudaMalloc(&gpu_A, 8388608ULL);
mySort_kernel1<<<dim3(1U, 1U, 1U), dim3(32U, 1U, 1U)>>>(*gpu_inDims);
cudaMemcpy(gpu_A, (void *)&A[0], 8388608ULL, cudaMemcpyHostToDevice);
mySort_kernel2<<<dim3(2048U, 1U, 1U), dim3(512U, 1U, 1U)>>>(*gpu_A, *gpu_B);
cudaMemcpy(&inDims[0], gpu_inDims, 8ULL, cudaMemcpyDeviceToHost);
thrustSortImpl(&(*gpu_B)[0], 2, &inDims[0], 1, 'd', false);
cudaMemcpy(&B[0], gpu_B, 8388608ULL, cudaMemcpyDeviceToHost);
...

Входные параметры

свернуть все

Входной массив, заданный как векторный, матричный или многомерный массив.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char

Величина для работы, заданная как положительный целый скаляр. Если значение не задано, то по умолчанию это первый размер массива, не равный 1.

sort возвращает A если dim больше ndims(A)dim не поддерживается когда A массив ячеек, то есть, sort только действует вдоль первого измерения массива, размер которого не равняется 1.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Сортировка направления в виде 'ascend' или 'descend'. direction не поддерживается когда A массив ячеек, то есть, sort только виды в порядке возрастания.

Выходные аргументы

свернуть все

Сортированный массив, возвращенный как вектор, матрица или многомерный массив. B одного размера и тип с A. Порядок элементов в B сохраняет порядок любых равных элементов в A.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char

Сортировка индекса, возвращенного как вектор, матрица или многомерный массив. I одного размера с A. Векторы индекса ориентированы по тому же измерению что sort работает с. Например, если A матрица 2 на 3, затем [B,I] = sort(A,2) сортирует элементы в каждой строке A. Выход I набор 1 3 векторов индекса строки, описывающих перестановку каждой строки A.

Ограничения

  • gpucoder.sort не поддерживает комплексные числа.

  • gpucoder.sort не поддерживает 'MissingPlacement' and 'ComparisonMethod' пары "имя-значение", поддержанные sort MATLAB функция.

Введенный в R2018b