怎么进行并行设计

经行一个并行运算,具体下图。有两幅图1、图2,其中把图1进行如同A、B这种块。我要做的就是在图2中找到图1中块对应的位置,比如图2中的红框是图1中A经过变形得到的。在图1中各个块之间没有联系,但是要求各个块在A、B中的对应位置需要知道图2中相应位置的信息。因为各个块对应的位置不相同,而且也不能事先确定,只能进行范围估计。但是A、B对应位置一定在图2中。那么在经行并行运算的时候,需要把图2进行分块么?因为对图2进行估计预测很麻烦,所以在不分块的情况下,能不能进行并行运算。谢谢。同时感谢版主和各位细心热情的回复和指导,祝大家端午节快乐。

[attach]3186[/attach]

完全未能看懂您的中文描述。

建议您重新整理语言。

目前从您的描述,完全不知道2图的对应关系,也不知道您需要进行什么处理。

因为无法建议。

额。不好意思啊。。写的有点急。。。重新整理了一下。你看这下是否说清楚了。。谢谢
1:图2是图1进过变形得到的,我要做的是找出图1中像素点在图2中的对应位置;
2:因此对图1进行分块,找出图1中每个块在图2中的位置,其中图1分块如上图;
3:图1经过变形的像素一定会在图2中,而且大致位置也是可以估计得到,但是很麻烦;
4:要求图1像素在图2中的具体位置,需要用到上面3说的估计位置的值或者用图2整幅图的信息(因为估计位置一定在图2中);
5:因为图1中的各个块之间没有联系,可以分别求其在图2中的对应的位置。由于如4中提到的,需要知道各个块对应的大致位置或者提供整幅图信息;那么在这两种情况下(即提供各个块相对位置和整幅图信息这两种情况),是否都可以进行并行计算编程?特别是在提供整幅图信息的情况下,能不能进行并行编程。谢谢

有点不确切的地方?你看:

各个块的可能位置信息,然后查找,这就必定需要知道图2的全部像素表示(否则您无法查找,不是吗?)。那么就和知道图2的正副图的像素表示一个意思的,除了外加可能的范围,进行缩小。

如果这个理解是正确的,您是在知道图1的像素表示,和知道图2的像素表示,以及可能的大致范围内的进行像素查找。那么这个显然是可以进行的,

简单的说,如果先要正确的找出,在没有大致像素的范围的情况下,2个图分别有N个像素,那么最简单的就是逐一匹配,那么这个时间将是和N^2成正比的。
(但是显然是可以实现的,不是吗?)

以及,如果知道了大致范围,则可以极大的减轻匹配的数据量。这多少算是优化了。

所以我当前理解下的结论是,显然是可以并行的实现的。这个无问题。
但如果能提高速度,如何进一步优化,则是一个深远的另一个问题了。

您觉得呢?

恩,谢谢版主在节日的热情回复,我也这么想的。但是现在的问题如下:
1:如果要精确计算每个像素点的位置,必须知道其在图2中的大致范围;
2:那么我在对每个像素点进行计算的时候,需要用到图2的局部信息;
3:对于每个像素点都要用到局部信息(而且可能重合),那么我在进行并行程序的时候需要把图2按照与图1对应位置进行分块么?可不可以直接传入图2的信息而不进行分块。
4:做一个简单的类比,则3的问题等同于如下代码:

__global__ void VecAdd(float* A, int N)
{
	int i = blockDim.x * blockIdx.x + threadIdx.x;
	if (i < N)
		A[i] = A[i] + N;
}

在这个核函数中,数据A的每个值都要加值N,那么在进行并行编程的时候,能否值传入一个N呢?还是需要对A的每个值都传入一个N ,即传入A数组大小个N。传入一个N和多个N的区别是什么?谢谢

额。。版主。。刚刚那个例子有点问题。因为不涉及到重叠的情况。重新举了个例子如下:

float B[2]={2.0,4.0};
float A[10]={0,1,2,3,4,5,6,7,8,9};
__global__ void VecAdd(float* A, float* B,int N) 
{
	int i = blockDim.x * blockIdx.x + threadIdx.x;
	if (i < N){
		if (N%2==0){
			A[i]=A[i]+B[0];
		}else{
			A[i]=A[i]+B[1];
		}
	}
}

我的理解是:对于核函数每个线程都是要赋值一份的,所以如果我在上面开了N个线程那么就有N个上面的函数;
我的问题是:在上面函数中A的奇数访问B的第二个值,A的偶数访问B的第一个值。但是上面A有5个奇数5个偶数,那么就会出现5个线程访问一个值的情况,怎么避免上面情况的发生呢?这种情况一般怎么解决?不知道我的理解对不对。。谢谢。。

表示完全没有看懂您在说什么。

如果您试图在另外一个图像中查找一个图像中的一个像素,前文我说了,
最简单的就是对N个像素的两图,分别进行N*N次匹配。这个是最简单的逻辑上的实现,然后你再考虑优化都措施。

以及,这里的查找和匹配需要定义,是另外一个图中能找到完全一样的像素作为匹配呢?还是,像素的颜色分量的值在一定范围内就算匹配呢?这些你都没说。

然后你上去就来了一个VecAdd()直接询问代码,这个我不认为是正确的此主题的讨论方式。
请勿灌水,谢谢。

额。。版主不好意思。。我问题可能没有说清楚。因为在图像匹配中设计到许多其他的东西,所以我用一个VecAdd函数做了个类比,以为这样能够简单点,但是发现这样让大家越来越感到没有逻辑性。不好意思。其实我的问题就是有多个线程对同一个数据进行访问,后面在论坛上看了一下,找到一个类似的帖子http://cudazone.nvidia.cn/forum/forum.php?mod=viewthread&tid=6432。。看了一下,基本上明白了。。谢谢版主的耐心解答。