gpt4 book ai didi

cuda - 在线程内使用推力::排序

转载 作者:行者123 更新时间:2023-12-04 17:20:32 24 4
gpt4 key购买 nike

我想知道是否可以在线程内使用推力::排序()

__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
}

如果是,排序是否会启动其他内核来并行化排序?

最佳答案

是的,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 或更高版本中可用。

关于cuda - 在线程内使用推力::排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23403653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com