原子操作的优化

亲们:现在我要求一堆数组的最大最小值,用规约的方法是个好方法,但是我现在的情况是这样:每个线程有个自己的聚类号,要分别求每个聚类所有的线程里数据的最大最小值,换句话说:1024*1024个线程被分成若干聚类,怎么求分别的最大最小值。我现在用的是原子操作,即每个线程对所属聚类的最大最小进行原子比大小,很费时间,有没有改进?
PS:每个聚类里线程不是个恒定值。

大致的流程如下:
texture<float4, 2, cudaReadModeElementType> Tex; //1024*1024 texture

kernel(parameter p ,vector vec)
{
int x = thread.x;
int y = thread.y;

value groupId = Tex(x,y);
value result = compute(x,y,p);

atomicMax(vec[groupId].max,result);
atomicMin(vec[groupId].max,result);
}

这个无需原子操作,用线程同步反复检测几次即可。

愿闻其详?