C++ ppl.h的parallel_for语句的问题

 

parallel_for的并行语句中,如果其中的变量定义在循环体外,会导致运行时间变慢很多,不知道是不是的运用有问题。比如以下三段代码:(原代码指没有使用并行执行的代码)

代码段1运行的速率比原代码还慢,而代码段2则比原代码快很多,区别仅仅只是把int iCalcLoc定义于并行循环内外;而且很奇怪的是,定义在循环外部反而速度会更慢。代码1和2对于循环体外的byte*byteArrDestR(G/B)的数组调用却不影响。但是代码段3却出现了引用循环体外的数组后,速率比原代码速度更慢的情况(调用函数前,都已经初始化了输入参数),然而如果将iCalNumR(G/B)定义在循环体内的话,循环体外就无法调用。

搞不懂呀,难受!!!!!!

/*代码1*/
int aaaa(byte *byteArrSrcR,byte *byteArrSrcG,byte *byteArrSrcB,int AiWidth,int AiHeight ,byte*AbyteArrNewColorTmp,byte *byteArrDestR,byte *byteArrDestG,byte *byteArrDestB)
{
    ....
int iCalcLoc;
Concurrency::parallel_for(iMinTop,iMaxBottom,[&](int i)
	{
	for(int j=iMinLeft;j<iMaxRight;j++)
		{ 
			iCalcLoc=i*AiWidth+j;
			if(byteArrSrcR[iCalcLoc]==0&&byteArrSrcG[iCalcLoc]==0&&byteArrSrcB[iCalcLoc]==0)
			{
				byteArrDestR[iCalcLoc]=iCalcMaxLoc_R;
				byteArrDestG[iCalcLoc]=iCalcMaxLoc_G;
				byteArrDestB[iCalcLoc]=iCalcMaxLoc_B;
			}
		}
	});
}

/*代码2*/
int aaaa(byte *byteArrSrcR,byte *byteArrSrcG,byte *byteArrSrcB,int AiWidth,int AiHeight ,byte*AbyteArrNewColorTmp,byte *byteArrDestR,byte *byteArrDestG,byte *byteArrDestB)
{
    ....

Concurrency::parallel_for(iMinTop,iMaxBottom,[&](int i)
	{
    int iCalcLoc;
	for(int j=iMinLeft;j<iMaxRight;j++)
		{ 
			iCalcLoc=i*AiWidth+j;
			if(byteArrSrcR[iCalcLoc]==0&&byteArrSrcG[iCalcLoc]==0&&byteArrSrcB[iCalcLoc]==0)
			{
				byteArrDestR[iCalcLoc]=iCalcMaxLoc_R;
				byteArrDestG[iCalcLoc]=iCalcMaxLoc_G;
				byteArrDestB[iCalcLoc]=iCalcMaxLoc_B;
			}
		}
	});
}
/*代码3*/
void aasa(int AiHeight,int AiWidth,Mat R,Mat G,Mat B,int*iCalcNumR,int*iCalcNumG,int*iCalcNumB )
{
	
	Concurrency::parallel_for(0,AiHeight,[&](int i)
	{
		
		uchar*r=R.ptr(i);
		uchar*g=G.ptr(i);
		uchar*b=B.ptr(i); 
		for(int j=0;j<AiWidth;j++)
		{
			iCalcNumR[ r[j] ]++;
			iCalcNumG[ g[j] ]++;
			iCalcNumB[ b[j] ]++;
		}
	});
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值