在线程中使用thrust :: sort

 我可不是文章 发布于 2023-01-18 10:01

我想知道在一个线程中是否可以使用thrust :: sort()

__global__
void mykernel(float* array, int arrayLength)
{
    int threadID = blockIdx.x * blockDim.x + threadIdx.x;
    // array length is vector in the device global memory
    // is it possible to use inside the thread?
    thrust::sort(array, array+arrayLength);
    // do something else with the array
}

如果是,那么sort会启动其他内核来并行排序吗?

1 个回答
  • 是的,thrust::sort可以与thrust::seq执行策略结合使用,在单个CUDA线程内顺序排序数字(或在单个CPU线程内顺序排序):

    #include <thrust/sort.h>
    #include <thrust/execution_policy.h>
    
    __global__
    void mykernel(float* array, int arrayLength)
    {
      int threadID = blockIdx.x * blockDim.x + threadIdx.x;
    
      // each thread sorts array
      // XXX note this causes a data race
      thrust::sort(thrust::seq, array, array + arrayLength);
    }
    

    请注意,您的示例会导致数据争用,因为每个CUDA线程都会尝试并行对相同的数据进行排序.一个正确的无竞争程序将array根据线程索引进行分区.

    thrust::seq此功能所需的执行策略仅在Thrust v1.8或更高版本中可用.

    2023-01-18 10:05 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有