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);
...

Ограничения

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

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

Введенный в R2018b