С Thrust библиотека поддерживает в GPU Coder™, можно использовать в своих интересах ускоренные графическим процессором примитивы, такие как вид, чтобы реализовать комплексные высокоэффективные параллельные приложения. Когда ваш MATLAB® использование кода gpucoder.sort
функция вместо sort
, GPU Coder может сгенерировать вызовы примитивов вида Тяги.
Этот пример генерирует 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); ...