我有T[N]
控制移位值的布尔一维数组,如下所示:
**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 控制 if T[i]==true => 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();
这将导致扭曲发散并减慢我的代码。是否有避免上述循环的翘曲发散的技巧?