N点FFT利用按时间基2抽取之后,每一级运算中的N/2个蝶形运算中任意两个蝶形是没有数据交互的,因此我觉得可以用OpenMP来实现每一级中N/2个蝶形运算的并行执行。但是发现实际写起来还是遇到了困难,百思不得其解。问题在:
串行情况下,我可以按逐级、逐组、逐个这样的迭代来执行,其中每个蝶形运算的中两个运算数的序号,旋转因子的序号都很容易确定。
在并行情况下,若用逐级、逐个这种迭代方式来实现的话,发现怎么都找不出各个参数如何确定。
也就是:temp=data[p]+data[p+k]*W[bf];
data[p+k]=data[p]-data[p+k]*W[bf];
data[p]=temp;
在逐个运算时,这个p,k,bf三个参数如何确定。想的头都大了,完全找不出规律来。
串行情况下,我可以按逐级、逐组、逐个这样的迭代来执行,其中每个蝶形运算的中两个运算数的序号,旋转因子的序号都很容易确定。
在并行情况下,若用逐级、逐个这种迭代方式来实现的话,发现怎么都找不出各个参数如何确定。
也就是:temp=data[p]+data[p+k]*W[bf];
data[p+k]=data[p]-data[p+k]*W[bf];
data[p]=temp;
在逐个运算时,这个p,k,bf三个参数如何确定。想的头都大了,完全找不出规律来。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货