0

T[N]次のように、シフトの値を制御するブール 1D 配列があります。

**a: グローバル メモリ内の行列へのポインターの配列。取得するためn*nに、各行列aが shift*Identity をサブストラクチャする必要があります。

a=a-shift*eye(n)

私は持っている:

__device__ bool T[N];
__device__ float shift1[N];
__device__ float shift2[N];
__device__ float* a[N];

shift の値は T[i]==true の場合は T によって制御されます => shift=shift1 else shift=shift2;

int tid=threadIdx.x;

      if(tid < N){

              if(T[tid]){

               for (int i=0;i<n;i++){

                   a[tid][i*n+i]=a[tid][i*n+i]-shift1[tid];
               }

            }
        else {

          for (int i=0;i<n;i++){

                   a[tid][i*n+i]=a[tid][i*n+i]-shift2[tid];
               }
            }
        }
      __syncthreads();

これにより、ワープ発散が発生し、コードが遅くなります。上記のループのワープ発散を回避するトリックはありますか?

4

1 に答える 1