__global__ void smithWaterman_device(int *a, int *b, int *temp){
int j=blockIdx.x*blockDim.x+threadIdx.x;
if (j<strBDim){
for (int k=0; k<strADim+strBDim+1; k++){
if (k>j+1 && k-(j+1)<strADim+1){
temp[(j+1)*(strADim+strBDim+1)+k] = maxOf(0,
maxOf(temp[(j+1)*(strADim+strBDim+1)+(k-1)]-gap,
maxOf(temp[(j)*(strADim+strBDim+1)+(k-1)]-gap,
temp[(j)*(strADim+strBDim+1)+(k-2)]+hitOrMiss(a[k-j-2],b[j]))));
}
__syncthreads();
}
}
}
这是我的code…关于计算smithWaterman的平行演算法
问题是 如果再不同的block内 它执行的数据是错误的(无法依照K的时间顺序执行?)
还有就是我这样写出来 效率并不好…(2倍多)
是我DP的平行想法不够好 还是有什么优化的办法?
谢谢…
[ 本帖最后由 darkwaterqqq 于 2010-3-17 09:36 编辑 ]