cuda日记-20140929

来源:互联网 发布:网络暴力的英语作文 编辑:程序博客网 时间:2024/06/01 12:32

1、在kernel函数中,循环体的末尾(循环内)一定要有一次线程同步,保证所有线程处于同一次循环之中。


2、规约算法,转载

//求32*128矩阵的每行之和
//kernel
__global__ void RowSum(float* A, float* B){
    int bid = blockIdx.x;
    int tid = threadIdx.x;

    __shared__ s_data[128];
    
    //read data to shared memory
    s_data[tid] = A[bid*128 + tid];
    __synctheads();        //sync

    for(int i=64; i>0; i/=2){
        if(tid<i)
            s_data[tid] = s_data[tid] + s_data[tid+i] ;
        __synctheads();
    }
    if(tid==0)
        B[bid] = s_data[0];
}

int main(){
    RowSum<<<32,128>>>(A,B);
}

规约算法(reduction)用来求连加、连乘、最值等,应用广泛。每次循环参加运算的线程减少一半

0 0
原创粉丝点击