exponenta event banner

Пример тяги

Благодаря поддержке библиотеки Trust в GPU Coder™ можно воспользоваться преимуществами ускоренных GPU примитивов, таких как сортировка для реализации сложных высокопроизводительных параллельных приложений. Когда используется код MATLAB ® gpucoder.sort функция вместо sortКодер графического процессора может генерировать вызовы примитивов сортировки тяг.

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

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

Используйте codegen для создания функции CUDA MEX.

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

Сгенерированный код CUDA

Ниже приведен фрагмент сгенерированного кода. Вызов библиотеки «Тяга» обозначается 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);
...