Cuda 如何使用一个线程在多个块中反转数组?

Cuda 如何使用一个线程在多个块中反转数组?,cuda,reverse,Cuda,Reverse,我需要创建一个包含两个参数的数组:数组及其大小 我有这样一个函数: __global__ void reverseArray(int *data, int size){ int tid = blockIdx.x// Total blocks } 如何使用此功能反转阵列?这取决于您的启动参数,但您可以尝试这样做 __global__ void reverseArray(int *data,int count){ const int tid = threadIdx.x + bl

我需要创建一个包含两个参数的数组:数组及其大小

我有这样一个函数:

__global__ void reverseArray(int *data, int size){

    int tid = blockIdx.x// Total blocks

}

如何使用此功能反转阵列?

这取决于您的启动参数,但您可以尝试这样做

__global__ void reverseArray(int *data,int count){
    const int tid = threadIdx.x + blockIdx.x*blockDim.x;
    if(tid < count/2)
    {
        const int new_tid = count - tid - 1;
        int prev_valA = data[tid];
        int prev_valB = data[new_tid];

        data[new_tid] = prev_valA;
        data[tid] = prev_valB;
    }
}
\uuuuu全局\uuuuuu无效反转array(int*数据,int计数){
const int tid=threadIdx.x+blockIdx.x*blockDim.x;
如果(tid<计数/2)
{
const int new_tid=count-tid-1;
int prev_valA=数据[tid];
int prev_valB=数据[新的tid];
数据[新的]tid=上一个值;
数据[tid]=上一个值;
}
}
我想这是你的计划的延续


另外,请注意,这假设您只对内核启动参数使用x维,这取决于您的启动参数,但您可以尝试这样做

__global__ void reverseArray(int *data,int count){
    const int tid = threadIdx.x + blockIdx.x*blockDim.x;
    if(tid < count/2)
    {
        const int new_tid = count - tid - 1;
        int prev_valA = data[tid];
        int prev_valB = data[new_tid];

        data[new_tid] = prev_valA;
        data[tid] = prev_valB;
    }
}
\uuuuu全局\uuuuuu无效反转array(int*数据,int计数){
const int tid=threadIdx.x+blockIdx.x*blockDim.x;
如果(tid<计数/2)
{
const int new_tid=count-tid-1;
int prev_valA=数据[tid];
int prev_valB=数据[新的tid];
数据[新的]tid=上一个值;
数据[tid]=上一个值;
}
}
我想这是你的计划的延续


另外,请注意,这假设您只对内核启动参数使用x维

,因为此代码作为发布更新
data[new_tid]
,而不考虑使用它更新相应值的线程是否拾取了该元素,因此它将被破坏。您可以通过让每个线程更新
data[]
数组中正在相互交换的两个值(并启动大约一半的线程)来解决这一问题。@RobertCrovella好的一点,我将更新我的答案,因为此代码作为发布的更新
data[new\u tid]
如果不考虑使用该元素更新相应值的线程是否已拾取该元素,则该元素将被破坏。您可以通过让每个线程更新
data[]
数组中正在相互交换的两个值(并启动大约一半的线程)来解决这一问题。@RobertCrovella很好,我将更新我的答案