主要内容

gpucoder.sort

优化的GPU实现MATLAB排序函数

描述

例子

B= gpucoder.sort (一个对元素进行排序一个按升序。在推力库的帮助下,在GPU上执行排序操作。推力是CUDA的C ++模板库®并配有CUDA Toolkit。排序输出B有与之相同的型号和尺寸吗一个.如果一个是一个矢量,gpucoder.sort (A)将A中的元素按升序排序。如果一个是一个矩阵,gpucoder.sort (A)按升序对每列进行排序。如果一个是n维数组,gpucoder.sort (A)沿着第一个非单例尺寸排序。

B= gpucoder.sort (一个昏暗的有可选参数昏暗的指定执行排序操作的维度。

B= gpucoder.sort (一个方向有可选参数方向指定排序方向。方向可以取以下两个值中的一个:

  • “提升”—按升序排序。这是默认选项

  • “下”- 以降序排序。

B) = gpucoder.sort (一个,……)返回排序索引这指定了如何的元素一个重新排列以获得分类的输出B

  • 如果一个是向量吗B =(我)

  • 如果一个是一个m-by-n矩阵和昏暗的= 1,然后

    j = 1:n b(:,j)= a(i(:,j),j);结束

排序顺序稳定。即,当多个元素具有相同值时,在已排序的输出B中,相等元素的顺序保持不变,而与相等元素相关的索引I是升序的。

什么时候gpucoder.sort从MATLAB中调用®,它使用内置的种类函数。

例子

全部折叠

这个示例生成CUDA代码以按降序对矩阵的列进行排序。

在一个文件中,编写一个入口点函数mysort.它接受矩阵输入一个.使用gpucoder.sort函数对列进行排序一个按降序。

功能B = mySort(A) B = gpucoder。排序(1“下”);结束

使用codegen函数生成CUDA MEX函数。

codegen配置coder.gpuconfig('mex')arg游戏{(1024, 1024,“双”)}报告mysort.

下面是生成的代码片段。Thrust库调用用thrustSortImpl

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

输入参数

全部折叠

输入数组,指定为向量、矩阵或多维数组。

数据类型:||int8|int16|INT32.|int64|uint8|uint16|uint32|uint64|逻辑|char

维度运行,指定为正整数标量。如果没有指定值,则默认值是第一个数组维度,其大小不等于1。

种类返回一个如果昏暗的大于ndims (A)昏暗的不支持金宝app一个是单元格数组,也就是说,种类只对第一个大小不等于1的数组维进行操作。

数据类型:||int8|int16|INT32.|int64|uint8|uint16|uint32|uint64

排序方向,指定为“提升”或者“下”方向不支持金宝app一个是单元格数组,也就是说,种类只按升序排序。

输出参数

全部折叠

排序阵列,返回为向量,矩阵或多维数组。B和你的尺寸和型号一样吗一个.元素的顺序B保持中任何相等元素的顺序一个

数据类型:||int8|int16|INT32.|int64|uint8|uint16|uint32|uint64|逻辑|char

排序索引,返回为向量,矩阵或多维数组。大小是一样的吗一个.索引向量的方向与种类操作。例如,如果一个是2 × 3矩阵吗[B,我]=排序(A, 2)的每一行中的元素排序一个.输出是一个1×3行索引矢量的集合,描述了每行的重新排列一个

限制

  • gpucoder.sort不支持复杂的数字。金宝app

  • gpucoder.sort不支持金宝app“MissingPlacement”“ComparisonMethod”MATLAB支持的名称-值对金宝app种类函数。

介绍了R2018b