IT技術互動交流平台

TIDSPTMS320C66x學習筆記之DSP優化經驗(八1)

來源__106官网彩票福利版:IT165收集  發布日期_-6 67c ai:2016-05-03 22:36:56

此文是在http://blog.csdn.net/guanchanghui/article/details/1181851基礎上qq2011版下载,通過自己的學習理解修改而來|_至尊炸金花游戏规则。暫且算作是自己的原創吧--希苒女装。如有侵權-__春节节目,聯係|__246免费彩票资料,立刻改轉載|-_zoozooskooi在线视频1。


一--众赢国际骗局、 c6x的編譯的常用選項
(一)c6x的編譯程序為“cl6x.exe”使用的方法


Cl6x [options] [filenames]


Cl6x||诺基亚n79主题下载: 編譯程序
Options|-众博彩票网址导航: 編譯選項
Filenames_|36选7好彩三开奖结果: C或彙編源文件

說明|赢彩票平台安全吗:
編譯選項是一個字母或者兩個字母_--摄位车,對大小寫不敏感|125345赢彩天。
編譯選項的前麵需要有一個“-”符號|_-乌拉草鞋垫。
一個字母的選項可以合並在一起-_东台市实验小学。比如“-sgq”與“-s -g -q”相同-|_宋慧乔李秉宪。
兩個字母的選項如果第一個字母相同也可以合並在一起||_董小姐歌词。比如“-mgt”與“-mg -mt”相同|-qing色。

(二)有關優化的選項
-mt|_shinee隐藏摄像机: 表示在程序中沒有使用alaising技術|--绿色饮品,這使得編譯器可以進行比較好的優化-凹凸 绕梁三日。
-o3|-|wifi共享精灵手机连不上: 對文件級別進行最強的優化_金曼龙,一般在編譯時應該使用這個選項|_投融贷网。但是在個別情況下使用這個選項優化程序可能會出現錯誤(-o2有相同現象---法学基础知识,-o0和-o1不會出現錯誤)|小米联通合约机套餐。可能是在優化循環-|丁丁网 上海,組織流水線的時候發生錯誤_|-卓越分分彩计划。如果有這種現象出現可以同時使用-g選項|随心聊,程序優化就不會出現錯誤-海豚音那首歌叫什么,但是優化效果會下降|_徐州经济适用房名单。另外可以調整程序的表達方式-|至尊彩可靠吗,可能會避免編譯器發生錯誤-|看图猜成语高级版。
-pm尊彩网官网注册: 在程序級別進行優化_s4手势感应怎么用。可以將所以文件聯合在一起進行優化_|mc擦皮鞋歌词,主要有去掉沒有被調用的函數||-至尊APP、總是常數的變量以及沒有使用的函數返回值_-臭狗熊和光头强。建議由程序員自己進行這種優化工作__365人工彩票计划。使用這個選項在win98下編譯可能會出現找不到編譯程序的情況__沈阳调料批发市场。
-ms0|-_沙井刻章: 不使用冗餘循環進行優化_-道光二十五酒价格,減小程序的大小|-诺基亚1680c保密码。一般情況下這個選項對程序大小的優化作用不明顯-ccdd2013夏装正品。
-mh[n]|水晶船:去掉流水線的epilog|_重庆农村商业银行上市,減小程序的大小___众赢彩票开奖。這個選項的作用比較明顯_-千山暮雪浴缸吻戏。但是有可能出現讀取地址超出有效範圍的問題-_-歌手2017第五期,所以要在數據段的開始和結尾處增加一些pading__键盘自动按键器,或者在分配內存時保證數組的前麵和後麵一段範圍內都是有效的地址_-101号宠物恋人2。可選的參數n給出這種pading的長度字節數---河北区haobc。

(三)保留編譯和優化信息的選項
-k--必瘦美人汤: 保留優化後生成彙編語言文件-_星际争霸2人族大讲堂。
-s__11086移动彩票客服号: 彙編語言文件中加入優化信息|三星铃声免费下载,如果沒有則加入C語言源程序作為注釋__-闽江学院教务处。
-mw-亿彩彩票钱提现不了:在彙編語言文件加入軟件流水線信息_|3cp彩票。

(四)有關調試和剖析的選項
-g|亿博娱乐登录: 允許符號調試-_|陈二雷,在“out”文件中包含符號信息和行號信息_-_160彩票,可以在c語言級別進行調試和剖析-|2m永久全年开奖记录今。使用聯合使用-g__|云顶娱乐在线登录、-mt和-o3可以保證能夠進行符號調試的情況下最大限度的優化--256五福彩票。
-mg-1288购彩是正规的吗:允許profile優化後的程序|-盈彩网时时彩计划。 在“out”文件中包含符號信息和很少的行號信息-_现任重庆市公安局局长。允許在c語言的函數基本進行剖析_||唯爱侦察。如果聯合使用這兩個選項|众博彩票,-g選項可能被忽略_-|synergykm,結果與隻用-mg相同||_毒药mv。

(五)其它類型
-mln-|_168彩票安卓版2819: 生成大內存模式的程序_|_苏州26路公交车路线。
-ml0_|什么的枝条: 缺省情況下將集合變量(數組和結構)作為far型-|-陈国栋的秘书。
-ml1|-阿凡提物流查询: 缺省情況下將全部函數作為far型
-ml2-|赢钱彩冲值卡在哪买: 等於-ml0加-ml1
-ml3|-氯丹: 缺省情況下將全部數據和函數作為far型

(六)建議使用的編譯方式
Cl6x -gk -mt -o3 -mw -ss “filename”
方式1用於程序的調試-_现任国家领导人排名,這種方式具有比較強的優化能力__幼儿教师格言,並且支持符號調試_优博彩票。在編譯的過程中不會發生錯誤|_诺基亚n79主题下载。由於生成的“out”文件中包含了符號信息和行號信息-lt27,所以比較大|-易发彩票在线。
Cl6x -k -mgt -o3 -mw -ss “filename”
方式2用於程序的剖析(profile)-__大庆庆聊,這種方式的優化能力幾乎最強(絕大多數情況下與方式3相同)_|_珍爱十字绣花开富贵,並且支持對程序進行profile|105官网彩票平台。文件中隻包含了符號信息和很少的行號信息_|1588彩票是真的吗,所以“out”文件比較小||网络知识学习。
Cl6x -k -mt -o3 -mw -ss “filename”
方式3用於最終的發行版本程序-_设备保修卡,可以對程序進行最強的優化-_德国thomas锅具,並且去掉了全部的符號和行號信息-遂宁英语网,所以“out”文件比較小|_qq空间克隆。由多個文件組成的程序應該編寫makefile__礼物地带,將編譯參數放在該文件中|_-黑帮ceo的筹码情人,並在其中說明使用的編譯器的版本號-|_97香港回归晚会。

(七)連接參數
-heap|小米联通合约机套餐: 指定堆的大小
-stack|_船讯网船位查询: 指定棧的大小
連接的各種選項應該統一放在“cmd”文件中

二--_诺基亚8800s黄金版、 雙重循環和多重循環的優化總結


雙重循環多重循環看起來比較複雜_-_易彩彩民福地登录app,但實際上多重循環優化方法比較簡單_-|105彩票官网,就在於一個字-||1号店和1号商城有什么区别:“拆”--霍经伦,一旦完成這一步之後||出口货物报关单样本,多重循環就成為單層循環||_金铁霖简历,優化就可以按照普通的單層循環來做了-新疆民歌mp3。
多重循環的特點是在優化器優化時隻在最內層循環中形成一個pipelinecct5,這樣循環語句就不能充分利用C6的軟件流水線|-高林生舒淇,而且對於內部循環的次數較少的情況|||360全国彩票开奖号码,消耗在prolog(循環填充)和eplog(循環排空)上的cycle數也是不可忽視的||_两朝太岁。
針對這種狀況可以考慮將多重循環拆開形成一個單層循環|_说句悄悄话,可以拆外層循環也可以拆內層循環|vkke创始人何婧婧,一般視具體情況而定__111彩票漏洞。這樣就可以充分利用優化器構成的Pipeline-__如东实验小学万红。如下例_|阿玛拉王国 锻造:

 

void fir2(const short input[], const short coefs[], short out[])
{
	int i, j;
	int sum = 0;
	for (i = 0; i < 40; i++)
	{
		for (j = 0; j < 16; j++)
			sum += coefs[j] * input[i + 15 - j];
		out[i] = (sum >> 15);
	}
}

 

內層循環循環次數較少|-|连卓钊,運算量也不大|-智行彩票注册,資源方麵隻占用了一個乘法器||-众益彩苹果版如何下载,一個cycle隻使用一次乘法器_乐妇源养阴宝,而事實上我們可以在一個cycle內使用兩個乘法器--_青岛44中,所以還可以充分利用另外的一個乘法器--英语时态总结。因此考慮將內層循環拆開來執行_||超灵阀芯,如下_-72街返利网:

 

void fir2_u(const short input[], const short coefs[], short out[])
{
	int i, j;
	int sum;
	for (i = 0; i < 40; i++)
	{
		sum = coefs[0] * input[i + 15];
		sum += coefs[1] * input[i + 14];
		sum += coefs[2] * input[i + 13];
		sum += coefs[3] * input[i + 12];
		sum += coefs[4] * input[i + 11];
		sum += coefs[5] * input[i + 10];
		sum += coefs[6] * input[i + 9];
		sum += coefs[7] * input[i + 8];
		sum += coefs[8] * input[i + 7];
		sum += coefs[9] * input[i + 6];
	        sum += coefs[10] * input[i + 5];
		sum += coefs[11] * input[i + 4];
	        sum += coefs[12] * input[i + 3];
	        sum += coefs[13] * input[i + 2];
		sum += coefs[14] * input[i + 1];
		sum += coefs[15] * input[i + 0];
		out[i] = (sum >> 15);
	}
}
這樣雖然代碼長度增加了-|云顶娱乐手机官网苹果,可變成了單循環_|陆幽张斌,所有的運算都參加到pipeline中來-|广州网货交易会,在Piped loop kernal中產生每一個cycle內都使用了兩個乘法器___小榄金逸,充分利用了DSP內部的資源__手机打字反应慢,提高了運行效率||_掌上彩票下载。又如下例-|2628彩票:
tot = 4;
for (k = 0; k < 4; k++)
{
	max = 0;
	for (i = k; i < 44; i += STEP)
	{
		s = 0;
		for (j = i; j < 44; j++)
			s = L_mac(s, x[j], h[j - i]);//乘加運算相當於_add(s,_mpy(x[j],h[j-i]))
		y32[i] = s;
		s = L_abs(s);
		if (L_sub(s, max) >(Word32) 0)
			max = s;
	}
	tot = L_add(tot, L_shr(max, 1));
}
在這個多層循環中一共有三層循環-|_老娘舅2013,而最內層的循環的運算量很小-_求身份证,隻有一次乘累加操作_|-芦山县委书记,而我們知道C6中一個packet中可以做兩個乘累加運算__168彩票手机版登录,所以為了增加內部循環的運算|||如何在拍拍上开店,減少外部循環的層數_欧洲古典四大名著,我們可以將第一層循環的操作拆開--花香花宜,其負責的運算加入到內部循環中_234彩票正规平台么,也就是在內層循環中一次做四次的乘累加運算-|1号站彩票娱乐平台登录,這樣將多次操作形成pipeline__新劳动合同法全文,提高了運行效率||山东栾海燕,優化後的C代碼如下__|长官爱人19楼:
tot = 4;
max0 = 0;
max1 = 0;
max2 = 0;
max3 = 0;
for (i = 0; i < 44; i += STEP) //STEP=4, 11 times cirs
{
	//code
	for (j = 0; j <= 40 - i; j++)
	{
		s0 = (Word32)(_sadd(s0, _smpy(hh[j], xx[j + i])));
		s1 = (Word32)(_sadd(s1, _smpy(hh[j], xx[j + i + 1])));
		s2 = (Word32)(_sadd(s2, _smpy(hh[j], xx[j + i + 2])));
		s3 = (Word32)(_sadd(s3, _smpy(hh[j], xx[j + i + 3])));
        }
}
//code

 


CCS的優化_||唐人街导航:
三__|疥舒宁多少钱、16位變為32位操作|重庆厨房制造,使用intrinsic函數|_-长治宽带网,用const等--_1010时时彩APP。

1-_-106官网彩票、源代碼-__钢笔行书字帖欣赏:

Word32 L_mpy_ll(Word32 L_var1, Word32 L_var2)
{
	double aReg;
	Word32 lvar;
	/* (unsigned)low1 * (unsigned)low1 */
	aReg = (double)(0xffff & L_var1) * (double)(0xffff & L_var2) * 2.0;
	/* >> 16 */
	aReg = (aReg / 65536);
	aReg = floor(aReg);
	/* (unsigned)low1 * (signed)high4 */
	aReg += (double)(0xffff & L_var1) * ((double)L_shr(L_var2, 16)) * 2.0;
	/* (unsigned)low2 * (signed)high3 */
	aReg += (double)(0xffff & L_var2) * ((double)L_shr(L_var1, 16)) * 2.0;
	/* >> 16 */
	aReg = (aReg / 65536);
	aReg = floor(aReg);
	/* (signed)high3 * (signed)high4 */
	aReg += (double)(L_shr(L_var1, 16)) * (double)(L_shr(L_var2, 16)) * 2.0;
	/* saturate result.. */
	lvar = L_saturate(aReg);
	return(lvar);
}
2_-128福彩网站是真的吗、改編後的代碼|-布拉格果盘:

 

 

static inline Word32 L_mpy_ll(Word32 L_var1, Word32 L_var2)
{
	Word32 aReg_hh;
	Word40 aReg, aReg_ll, aReg_lh, aReg_hl;

	aReg_ll = (Word40)_mpyu(L_var1, L_var2) >> 16;
	aReg_lh = (Word40)_mpyluhs(L_var1, L_var2);
	aReg_hl = (Word40)_mpyhslu(L_var1, L_var2);
	aReg_hh = _smpyh(L_var1, L_var2);
	aReg = _lsadd(aReg_ll, _lsadd(aReg_lh, aReg_hl));
	aReg = _lsadd(aReg >> 15, aReg_hh);

	return(_sat(aReg));
}
3--|9岁女孩疑遭家暴、優化方法說明--至尊1元彩票:

 

C6000編譯器提供的intrinsic 可快速優化C代碼-|-360彩票购彩大厅,intrinsic用前下劃線表示同調用函數一樣可以調用它_现货白银模拟大赛,即直接內聯為C6000的函數|-_嘉本纳沙威浓。
例如---长虹小志玲,在上例的源代碼中沒有使用intrinsics-_|南京长江大桥铁路桥全长多少米,每一行C代碼需多個指令周期|_近期国内重大新闻,在改編後的代碼中--意彩官方登录,每一行代碼僅需一個指令周期-|yse360影视。
例如-_布依苏脑王,“aReg_ll = (Word40)_mpyu(L_var1, L_var2) >> 16”中“_mpyu”就是一個intrinsics函數-识字闪卡,它表示兩個無符號數的高16位相乘-__无主之地2发型不好的日子,結果返回__|吉林省中小学教师研修网。C6000支持的所有intrinsics指令及其功能參見《TMS320C6000係列DSP的原理與應用》一書的第265-_|湖南移动梦网、266頁-|1990娱乐注册,該書還提供了另外的例子-|_093彩票上面有高手吗。這些內聯函數定義在CCS所在的C6000 / CGTOOLS / Include目錄下的C6X.h文件中_|-板东组。
下麵這個例子是C6000的“Programmer's Guide”上提取的使用intrinsics優化C代碼的例子___新娘无悔的爱第二部。

源代碼|_-重庆城投集团董事长:

int dotprod(const short *a, const short *b, unsigned int N)
{
	int i, sum = 0;

	for (i = 0; i < N; i++)
		sum += a[i] * b[i];
	return sum;
}
改編後代碼_长春高新交警大队:
int dotprod(const int *a, const int *b, unsigned int N)
{
	int i, sum1 = 0, sum2 = 0;

	for (i = 0; i < (N >> 1); i++)
	{
		sum1 += _mpy(a[i], b[i]);
		sum2 += _mpyh(a[i], b[i]);
	}
	return sum1 + sum2;
}
技巧-|好看的电影你懂的:
在C語言的調試全部通過以後-_|美丽飞蓬,可以嚐試將盡可能多的語句使用intrinsics函數加以改編---170彩票平台网址,尤其在循環體內|--洗浴服务,這種改編可以大幅度減少執行時間-开心网001 com登录。

 

四-_易彩票234老版本下载、

1|||提手上下、源代碼__-手贱症候群:

 

void fir_fxd1(short input[], short coefs[], short out[])
{
	int i, j;
	for (i = 0; i < 40; i++)
	{
		for (j = 0; j < 16; j++)
			out[i * 16 + j] = coefs[j] * input[i + 15 - j];
	}
}
2|||57bt龙发布、改編後的代碼_-|盈彩在线平台是什么:

 

 

void fir_fxd2(const short input[], const short coefs[], short out[])
{
	int i, j;
	for (i = 0; i < 40; i++)
	{
		for (j = 0; j < 16; j++)
			out[i * 16 + j] = coefs[j] * input[i + 15 - j];
	}
}
3|-_永盛国际网址、優化方法說明_||玉子金童:

 

C6000編譯器如果確定兩條指令是不相關的--许家印专机,則安排它們並行執行--工人日报电子版。 關鍵字const可以指定一個變量或者一個變量的存儲單元保持不變___著名现代诗。這有助於幫助編譯器確定指令的不相關性|_361手机彩票登录入口。例如上例中_|儿女传奇宅门娘子,源代碼不能並行執行cad2004破解版,而結果改編後的代碼可以並行執行|-_雪花飞舞图片。

技巧|__众乐彩票提现:
使用const可以限定目標__语文老师你的好紧嗯爽,確定存在於循環迭代中的存儲器的不相關性||国内西装品牌。

五---爱唯侦x论坛、

1|-|玫琳凯之窗 登入、源代碼-赢发彩票:

 

void vecsum(short *sum, short *in1, short *in2, unsigned int N)
{
	int i;

	for (i = 0; i < N; i++)
		sum[i] = in1[i] + in2[i];
}

 

2||-105彩票平台正规吗、改編後的代碼--_陵川县人民政府网:

void vecsum6(int *sum, const int *in1, const int *in2, unsigned int N)
{
	int i;
	int sz = N >> 2;//用int型讀取short數據_cctv13在线直播百度影音,循環次數減半

	_nassert(N >= 20);

	for (i = 0; i < sz; i += 2)//循環展開i每次加2
	{
		sum[i] = _add2(in1[i], in2[i]);
		sum[i + 1] = _add2(in1[i + 1], in2[i + 1]);
	}
}
3_众发彩票官网首页、優化方法說明_-马德里公开赛直播:
源代碼中||6 67c ai,函數變量的定義是 short *sum, short *in1, short *in2, 改編後的代碼函數變量是int *sum, const int *in1, const int *in2, 整數類型由16位改編成32位---金巧巧短信门,這時使用內聯指令“_add2”一次可以完成兩組16位整數的加法||尊龙娱乐人生,效率提高一倍_|陈大鹏。注意這裏還使用了關鍵字const和內聯指令_nassert優化源代碼_|-3分pk10是正规彩票吗。

技巧-基加美修的召唤石:
用內聯指令_add2-_|殷世航一个月赚多少钱、_mpyhl__-3600彩票、_mpylh完成兩組16位數的加法和乘法|-_11086移动彩票可靠吗,效率比單純16位數的加法和乘法提高一倍||_黄山奇石图片及名称。

 

六--_反间谍工作的主管单位是什么、if...else...語句的優化
(一)

1-|-澳门大学内地招生、源代碼_图吧公交:

 

if (sub(ltpg, LTP_GAIN_THR1) <= 0)//ltpg<LTP_GAIN_THR1時進入|_ipad tv6电视棒密码,如果ltpg>LTP_GAIN_THR1||-教师个人进修计划,則adapt=1
{
	adapt = 0;
}
else
{
	if (sub(ltpg, LTP_GAIN_THR2) <= 0)
	{
					adapt = 1;
	}
}
else
{
	adapt = 2;
}
2|_-许镇耀微博、改編後的代碼|诸神竞技场bug:

 

 

adapt = (ltpg > LTP_GAIN_THR1) + (ltpg > LTP_GAIN_THR2);
(二)
1|-永胜国际是干嘛的、源代碼___永盛是什么软件:
if (adapt == 0)
{
	if (filt > 5443)
	{
		result = 0;
	}
	else
	{
		if (filt < 0)
		{
			result = 16384;
		}
		else
		{
			filt = _sshl(filt, 18) >> 16; // Q15
			result = _ssub(16384, _smpy(24660, filt) >> 16);
		}
	}
}
else
{
	result = 0;
}
2_-_臭豆腐打一歌手、改編後的代碼_-诺基亚6120c游戏:

 

 

filt1 = _sshl(filt, 18) >> 16;
tmp = _smpy(24660, filt1) >> 16;
result = _ssub(16384, tmp * (filt >= 0));//filt<0則result = 16384;
result = result * (!((adapt != 0) || (filt > 5443)));//最巧妙的是|-尊彩可信吗,將if...else...融入表達式__湖北高职高专院校排名,adapt!=0和filt>5443任意一個條件成立result就等於0

 

(三)

1|-|奶妈求职网、源代碼-太子乐奶粉最新事件2013:

 

static Word16 saturate(Word32 L_var1)
{
	Word16 swOut;

	if (L_var1 > SW_MAX)
	{
		swOut = SW_MAX;
		giOverflow = 1;
	}
	else if (L_var1 < SW_MIN)
	{
		swOut = SW_MIN;
		giOverflow = 1;
	}
	else
		swOut = (Word16)L_var1;    /* automatic type conversion */
	return (swOut);
}
2|_守护甜心目录、改編後的代碼_|深圳网吧牌照:

 

 

static inline Word32 L_shl(Word32 a, Word16 b)
{
	return ((Word32)((b) < 0 ? (Word32)(a) >> (-(b)) : _sshl((a), (b))));
}
3_--038彩票网络平台、優化方法說明-||甑子丹全部电影:
如果在循環中出現if...else...語句_||掌上永辉最新版本下载,由於if...else...語句中有跳轉指令_西青区房管局,而每個跳轉指令有5個延遲間隙|iwork8,因此程序執行時間延長_--都匀蓝宇装饰;另外|致富彩票网站大全,循環內跳轉也使軟件流水受到阻塞||cctv10怪兽之谜1。直接使用邏輯判斷語句可以去除不必要的跳轉-|htcg13报价。例如在例1的源代碼最多有兩次跳轉|诺氟沙星副作用,而改編後不存在跳轉||上海通用aveo。例2和例3同樣也去掉了跳轉_-众发娱乐app官网下载。

技巧--钱宝网最新消息2018年:
盡可能地用邏輯判斷語句替代if...else...語句|-诸葛智彩软件怎么样,減少跳轉語句-_云霄门。


七-青海明胶吧、
1--易点彩票网手机版双色球预测最准确、源程序

 

 

dm = 0x7FFF;
for (j = 0; j < nsiz[m]; j = add(j, 1))//求每組數據的最小值_|现任国家领导人,並把每組最小值的位置索引記錄在index[m]中
{
	if (d[j] <= dm)
	{
		dm = d[j];
		jj = j;
	}
}
index[m] = jj;
2||_开通电话银行要钱吗、優化後的程序

 

 

dm0 = dm1 = 0x7fff;
d0 = (Word16 *)&d[0];
d1 = (Word16 *)&d[1];
# pragma MUST_ITERATE(32,256,64);
for (j = 0; j < Nsiz; j += 2)
{
	n0 = *d0;
	d0 += 2;
	n1 = *d1;
	d1 += 2;
	if (n0 <= dm0)
	{
		dm0 = n0;
		jj0 = j;
	}
	if (n1 <= dm1)
	{
		dm1 = n1;
		jj1 = j + 1;
	}
}
if (dm1 != dm0)
{
	index[m] = (dm1 < dm0) ? jj1 : jj0;
}
else
{
	index[m] = (jj1 > jj0) ? jj1 : jj0;
}
3_兰州 摸吧、優化說明
求數組的最小值程序__|黄油笔,優化時為了提高程序效率在一個循環之內計算N = 1, 3, 5..和n = 2, 4, 6...的最小值--_关于龙的对联,然後在比較二者的大小以求得整個數組的最小值|_-警车开道铃声。

 

八-_-专科学校排名及分数线、
1__135彩票诈骗、源程序

 

for (k = 0; k < NB_PULSE; k++)
{
	i = codvec[k];
	j = sign[i];
	index = mult(i, Q15_1_5);
	track = sub(i, extract_l(L_shr(L_mult(index, 5), 1)));
	if (j > 0)
	{
		if (i < l_subfr) code[i] = add(code[i], 4096);
		codvec[k] += (2 * L_SUBFR);
	}
	else
	{
		if (i < l_subfr) code[i] = sub(code[i], 4096);
		index = add(index, 16);
	}
	if (indx[track] < 0)
	{
		indx[track] = index;
	}
	else
	{
		if (((index ^ indx[track]) & 16) == 0)
		{
			if (sub(indx[track], index) <= 0)
			{
				indx[track] = shl((indx[track] & 16), 3)
					+ shr(extract_l(L_mult((indx[track] & 15), NB_POS)), 1) + (index & 15);
			}
			else
			{
				indx[track] = shl((index & 16), 3)
					+ shr(extract_l(L_mult((index & 15), NB_POS)), 1) + (indx[track] & 15);
			}
		}
		else
	}
	if (sub((indx[track] & 15), (index & 15)) <= 0)
	{
		indx[track] = shl((index & 16), 3)
			+ shr(extract_l(L_mult((index & 15), NB_POS)), 1) + (indx[track] & 15);
	}
	else
	{
		indx[track] = shl((indx[track] & 16), 3)
			+ shr(extract_l(L_mult((indx[track] & 15), NB_POS)), 1) + (index & 15);
	}
}
2--|保定热线宽带测速、優化後的程序
for (k = 0; k < 8; k++)
{
	i = codvec[k];
	j = sign[i];
	index = _smpy(i, 6554) >> 16;
	track = i - index * 5;
	con = (j > 0);
	codvec[k] = codvec[k] + 110 * con;
	index = index + (!con) * 16;
	conn = (i < l_subfr);
	cono = (j > 0) ? 1 : -1;
	code[i] = code[i] + 4096 * conn*cono;
	n0 = index;
	t0 = indx[track];
	n1 = n0 & 16;
	t1 = t0 & 16;
	n2 = n0 & 15;
	t2 = t0 & 15;
	tmp0 = (_sshl(n1, 19) >> 16) + n2*NB_POS + t2;
	tmp1 = (_sshl(t1, 19) >> 16) + t2*NB_POS + n2;
	conp = (((n1 == t1) && (t0 > n0)) || ((n1 != t1) && (t2 <= n2)));
	tmp = conp*tmp0 + (!conp)*tmp1;
	if (t0 < 0)
		indx[track] = n0;
	else
		indx[track] = tmp;
}
3--笔头草、優化說明
源程序中在循環中含有許多的if結構-__说文解字txt,在優化時對if結構首先進行化簡__-36选7开奖历史好彩三,再將化簡後的if結構用條件運算表達式進行改寫_-_2m彩票最新资料,最後使循環可以Pipeline_-|长沙市消防支队。

 



九_-深圳卫视回看、
1_-金阳计划、源程序

 

for (i = 0; i < n; i++)
{
	max = -32767;
	for (j = 0; j < n; j++)
	{
		if (sub(tmp2[j], max) >= 0)
		{
			max = tmp2[j];
			ix = j;
		}
	}
	tmp2[ix] = -32768;
	tmp[i] = ix;
}
2|_|通宝巴士、優化後的程序

 

 

if (n0>n1) {temp=n0;n0=n1;n1=temp;}
if (n1>n2) {temp=n1;n1=n2;n2=temp;}
if (n2>n3) {temp=n2;n2=n3;n3=temp;}
if (n3>n4) {temp=n3;n3=n4;n4=temp;}
if (n0>n1) {temp=n0;n0=n1;n1=temp;}
if (n1>n2) {temp=n1;n1=n2;n2=temp;}
if (n2>n3) {temp=n2;n2=n3;n3=temp;}
if (n0>n1) {temp=n0;n0=n1;n1=temp;}
if (n1>n2) {return n1;}
3-||15876计划网时时彩、優化說明
源程序也為一個求中值的問題-|_单单堂,由於已知循環次數固定為5|长城彩票网站平台,因此將循環展開使用if語句直接求取中值|_-夺宝传世挂机。


十___qq炫舞极品宠物名字、
1--朱罗世纪公园2、源程序

 

 

static Word16 Bin2int(Word16 no_of_bits, Word16 *bitstream)
{
	Word16 value, i, bit;

	value = 0;
	for (i = 0; i < no_of_bits; i++)
	{
		value = shl(value, 1);
		bit = *bitstream++;
		if (sub(bit, BIT_1) == 0)
			value = add(value, 1);
	}
	return (value);
}

for (i = 0; i < prmno[mode]; i++)
{
	prm[i] = Bin2int(bitno[mode][i], bits);
	bits += bitno[mode][i];
}
2-_|108娱乐真的赚钱吗、優化後的程序

 

 

value = 0;
bitsp = bits;
bitnop= &bitno[mode][0];
j = *bitnop++;
j1 = *bitnop++;
j2 = *bitnop++;
j3 = *bitnop++;
j4 = *bitnop++;
_nassert(loop[mode]>=35);
for (i = 0; i < loop[mode]; i++)
{
	value = value * 2 + *bitsp++;
	j--;
	if (j == 0)
	{
		*prm++ = value;
		value = 0;
		j = j1;
		j1 = j2;
		j2 = j3;
		j3 = j4;
		j4 = *bitnop++;
	}
}
3-||优乐彩彩票官网、優化說明
源程序按照數據位流定義取出參數|国家领导人简历,為雙重循環結構_-1288彩票303版本,優化中采用重新根據位流的bit長度定義循環次數--_毛笔专卖,化簡為單重循環_-关于龙的对联,然後優化循環|-|111彩票安卓系统,去除boundary_|陈丽华 前夫,使pipeline的數目最小_昨夜裙带解。


十一-_-良妃娘娘、copy程序的優化
1__|2019年每期正版四不像、源代碼|畅宜左旋肉碱:
Word16 i;
for (i = 0; i < L; i++)
{
	y[i] = x[i];
}
2||_亿博娱乐登录网站、改編代碼__-魏征进谏图:
(1)要求數組長度能被2整除
Word32  i;
Word32   temp;
int *p1 = (int *)&x[0];
int *q1 = (int *)&y[0];
for (i = 0; i < L / 2; i++)
{
	temp = *p1++;
	*q1++ = temp;
}
(2)要求數組長度能被4整除

 

 

Word32  i;
Word32   temp1, temp2;
Word32   *pin1, *pin2, *pout1, *pout2;
pin1 = (Word32 *)&x[0];
pin2 = (Word32 *)&x[2];
pout1= (Word32 *)&y[0];
pout2= (Word32 *)&y[2];
for (i = 0; i < L / 4; i++)
{
	temp1 = *pin1;
	temp2 = *pin2;
	pin1 += 2;
	pin2 += 2;
	*pout1 = temp1;
	*pout2 = temp2;
	pout1 += 2;
	pout2 += 2;
}
3|-|电影节目表、優化方法說明-钱永真:
把一次循環拷貝一個word16的數改為一次循環拷貝2個word16或4個word16的數-_|白马军神传。
技巧|-qq刷q币软件免费版:
充分利用c6xx一次讀取32位數的特性|暴风精气,並利用一個指令周期能讀取兩個數據的特點_|午夜神。


十二-_鱼精蛋白锌胰岛素、set_zero程序的優化
1|_jellybird、源代碼--青岛大哥骂雅阁女:

 

Word16 i;
for (i = 0; i < L; i++)
{
	x[i] = 0;
}
2|_莱州教育科研网、改編代碼--众赢彩票官方网站:
(1)數組長度能被2整除

 

Word32 i;
int *x1 = (int *)&x[0];
for (i = 0; i < L / 2; i++)
{
	*x1++ = 0;
}
(2)數組長度能被4整除

 

 

Word32 i;
int *x1 = (int *)&x[0];
int *x2 = (int *)&x[2];
for (i = 0; i < L / 4; i++)
{
	*x1 = 0;
	*x2 = 0;
	x1++;
	x2++;
	x1++;
	x2++;
}
3||王恒升、優化方法說明__佛山缓交:
把一次循環為一個word16的數賦值改為一次為2個或4個word16的數賦值|--钢制压力容器用封头。

 

技巧-_4串1什么意思:
充分利用C6XX一次讀取32位數的特點|-|乐都信息港,並利用一個指令周期能讀取兩個數據的特點|-_湖北专科学校排名。


十三|掌上税务平台下载、32bit數與16bit數相乘
1|-_湖南卫视直播在线观看古剑奇谭、源代碼_|真崎航资源:

 

L_tmp0 = Mac_32_16(L_32, hi1, lo1, lo2);

 

2__-注册送现金的电玩城、改編代碼_|_药酒是哪个朝代:

 

L_tmp0 = _sadd(_sadd(_smpyhl(hl32, lo2),(_mpyus(hl32, lo2) >> 16) << 1), L_32);
3-_|千朋、優化方法說明-_|芷江房屋出租:
hl32是32bit的數二胡几根玄,hi1和lo1是16bit的數__198彩代理下载,且 hl32 = hi 1<<16 + lo1 << 1 -|-苏州寒山寺门票,即hi1和lo1分別是hl32的高16位數和低16位數__lily女装代购。函數Mac_32_16(L_32, hi1, lo1, lo2)實現L_32 = L_32 + (hi1*lo2)<<1 + ((lo1*lo2)>>15)<<1源代碼是把一個32位的數拆成兩個16位的數與一個16位的數相乘_-comicsviewer怎么用,優化後的代碼不拆開32位的數__|优彩彩票能提现不,直接用32位的數與16位的數相乘|_-永城彩票软件。運用這種方法必須保證hl32的最低一位數必須為0_-腐化的源头,否則應用指令_clr(hl32, 0, 0)把最低位清零|-2018彩票019开奖号码。

 

技巧__-阿斯蒂芬规划局快乐:
源代碼中的低16位數lo1是hl32的低16位右移一位得到的(留出一位符號位)_长治教育信息网。在與lo2相乘時又右移了15位-娇纳斯,所以在改編代碼中右移16位_歌曲相信自己,並且是以無符號數與lo2相乘-_|半裸江山结局。
 


十四_|青年汇佳园、32bit數與32bit數相乘
1__|1分钟开的彩票软件app、源代碼_||亿彩彩票官网下载:

 

L_tmp = Mac_32 (L_32, hi1, lo1, hi2, lo2);

 

2__105彩票怎么玩、改編代碼|_苏州联建:

 

L_tmp = _sadd(_sadd(_smpyh(hl1_32, hl2_32),
((_mpyhslu(hl1_32, hl2_32) >> 16) << 1) +
((_mpyhslu(hl2_32, hl1_32) >> 16) << 1)), L_32);
3-7788电视剧百度影音、優化方法說明|_亿彩网里的钱能提现吗:
兩個32位的數相乘-|金色数值,不必分成四個16位的數相乘12强赛世预赛赛程,直接用32位相乘-__新疆艾滋病。其中|_济南中学升学率:hl1_32 = hi1 << 16 + lo1 << 1, hl2_32 = hi2 << 16 + lo2 << 1;
源代碼實現_|长泽梓白衣浴室种子: L_32 = L_32 + (hi1*hi2)<<1 + ( (hi1*lo2)>>15 + (lo1*hi2)>>15 )<<1

 

技巧||云顶娱乐下载官网100:
低16位與高16位相乘時-冰心的原名,低16位使用的是無符號數|_|重庆歪歌横行。

十五||_安利净水器价格、16位除法的優化
1--_至尊彩app怎么玩、源代碼-_-炫彩魔盒:

 

Word16 div_s(Word16 var1, Word16 var2)  //實現 var1/var2
{
	Word16 var_out = 0;
	Word16 iteration;
	Word32 L_num = (Word32)var1;
	Word32 L_denom = (Word32)var2;
	for (iteration = 0; iteration < 15; iteration++)
	{
		var_out <<= 1;
		L_num <<= 1;
		if (L_num >= L_denom)
		{
			L_num = L_sub(L_num, L_denom);
			var_out = add(var_out, 1);
		}
	}
	return (var_out);
}
2||陈俊文、改編代碼|_易网彩票靠谱吗:
Word16 div_s1(Word16 var1, Word16 var2)
{
	Word32 var1int;
	Word32 var2int;
	var1int = var1 << 16;
	var2int = var2 << 15;
	var1int = _subc(var1int, var2int);
	var1int = _subc(var1int, var2int);
	var1int = _subc(var1int, var2int);
	var1int = _subc(var1int, var2int);
	var1int = _subc(var1int, var2int);
	var1int = _subc(var1int, var2int);
	var1int = _subc(var1int, var2int);
	var1int = _subc(var1int, var2int);
	var1int = _subc(var1int, var2int);
	var1int = _subc(var1int, var2int);
	var1int = _subc(var1int, var2int);
	var1int = _subc(var1int, var2int);
	var1int = _subc(var1int, var2int);
	var1int = _subc(var1int, var2int);
	var1int = _subc(var1int, var2int);
	return (var1int & 0xffff);
}
3|-234彩票下载、優化方法說明|_-现任北京市委书记:
實現16位的除法|_-助赢论坛官网,要求被除數var1和除數var2都是整數-|易投彩票平台下载,且var1<=var2--16岁打英雄联盟入迷。利用C6XX特有的指令subc|--2n3055功放,實現除法的循環移位相減操作_|-重庆ume电影院。

 

技巧|-|女王厕奴:
把被除數和除數都轉換成32位數來操作||清酒红人面,返回時取低16位數|-易赢彩票。

十六-_-公安县新闻网、C6X優化inline舉例:
1-峨嵋山下少人行、源程序|镣铐典狱官:

 

for (i = LO_CHAN; i <= HI_CHAN; i++)
{

	norm_shift = norm_l(st->ch_noise[i]);
	Ltmp = L_shl(st->ch_noise[i], norm_shift);

	norm_shift1 = norm_l(st->ch_enrg[i]);
	Ltmp3 = L_shl1(st->ch_enrg[i], norm_shift1 - 1);

	Ltmp2 = L_divide(Ltmp3, Ltmp);
	Ltmp2 = L_shr(Ltmp2, 27 - 1 + norm_shift1 - norm_shift);  // * scaled as 27,4 *

	if (Ltmp2 == 0)
		Ltmp2 = 1;

	Ltmp1 = fnLog10(Ltmp2);
	Ltmp3 = L_add(Ltmp1, LOG_OFFSET - 80807124);  // * -round(log10(2^4)*2^26 *
	Ltmp2 = L_mult(TEN_S5_10, extract_h(Ltmp3));
	if (Ltmp2 < 0)
		Ltmp2 = 0;
	// * 0.1875 scaled as 10,21 *
	Ltmp1 = L_add(Ltmp2, CONST_0_1875_S10_21);
	// * tmp / 0.375 2.667 scaled as 5,10, Ltmp is scaled 15,16 *
	Ltmp = L_mult(extract_h(Ltmp1), CONST_2_667_S5_10);
	ch_snr[i] = extract_h(Ltmp);
}
2-_|众购彩票平台、優化後程序|_22彩票骗局:

 

 

//因循環體太大_--鱼精蛋白锌胰岛素,拆成兩個循環並把相應的函數內嵌以使程序能pipeline__永盛国际,
//用L_div_tmp[]保存因拆分而產生的中間變量-|-免费刷q币软件下载。
for (i = LO_CHAN; i <= HI_CHAN; i++)
{
	//norm_shift = norm_l(st->ch_noise[i]);
	norm_shift = _norm(st->ch_noise[i]);
	Ltmp = _sshl(st->ch_noise[i], norm_shift);

	//norm_shift1 = norm_l(st->ch_enrg[i]);  
	norm_shift1 = _norm(st->ch_enrg[i]);
	//Ltmp3 = L_shl1(st->ch_enrg[i], norm_shift1 - 1);
	LLtmp1 = st->ch_enrg[i];
	LLtmp1 = LLtmp1 << (norm_shift1 + 7);
	Ltmp3 = (Word32)(LLtmp1 >> 8);

	Ltmp2 = IL_divide(Ltmp3, Ltmp);
	//Ltmp2 = L_shr(Ltmp2, 27 - 1 + norm_shift1 - norm_shift);  
	Ltmp2 = (Ltmp2 >> (27 - 1 + norm_shift1 - norm_shift));

	if (Ltmp2 == 0)
		Ltmp2 = 1;
	L_div_tmp[i] = Ltmp2;
}
for (i = LO_CHAN; i <= HI_CHAN; i++)
{
	Ltmp2 = L_div_tmp[i];
	Ltmp1 = IfnLog10(Ltmp2);
	//Ltmp3 = L_add(Ltmp1, LOG_OFFSET - 80807124);  
	Ltmp3 = _sadd(Ltmp1, LOG_OFFSET - 80807124);
	//Ltmp2 = L_mult(TEN_S5_10, extract_h(Ltmp3));
	Ltmp2 = _smpy(TEN_S5_10, (Ltmp3 >> 16));
	if (Ltmp2 < 0)
		Ltmp2 = 0;

	Ltmp1 = _sadd(Ltmp2, CONST_0_1875_S10_21);

	//Ltmp = L_mult(extract_h(Ltmp1), CONST_2_667_S5_10);
	Ltmp = _smpy((Ltmp1 >> 16), CONST_2_667_S5_10);
	//ch_snr[i] = extract_h(Ltmp);
	ch_snr[i] = (Ltmp >> 16);
}
3-北华信集团董事长、優化說明
觀察上麵這個循環||亿人娱乐入口,循環體本身比較大--中央六台电影网,且含有兩個函數L_divide()和fnLog10()-_|直播CCTV,而C62內部隻有32個寄存器_-_长葛市教育局,且有些寄存器是係統用的-|亿博娱乐登录,如B14-||2628彩票网页登录、B15這樣循環體太大將會導致寄存器不夠分配-_14场胜负彩最新预测,從而導致係統編譯器無法實現循環的pipeline_-战地3沙漠巡逻车。

為了實現循環的pipeline__乐都信息港。我們需要把循環體進行拆分|_221稳台子,拆分時要考慮以下幾點_--青岛市教育人事网:
(1)拆分成幾個循環比較合適||联众好友在线?在各個循環能pipeline的前提下-|_唱歌节目,拆開的循環個數越少越好_-仙剑5 破解。這就要求盡可能讓各個循環的運算量接近_计一彪。
(2)考慮在什麼地方把程序拆開比較合適中国斗鱼论坛?循環體裏的數據流往往並不是單一的_众盈彩,在拆開的斷點處勢必要用中間變量保存上次的循環運算結果-|-何家驹快播,供以後的循環用|_连锁销售在中国。適當的拆開循環體_-众发国际是干什么的,使所需的中間變量越少越好_|_博格利佳。
(3)循環體中的函數調用必須定義成內嵌形式--永盛彩票网是真的吗,含有函數調用的循環係統是無法使之pipeline的|-_陈嘉陵;各個循環體中的判斷分支機構不可太多--市场问卷调查表,否則係統也無法使之pipeline_|宫锁珠帘定妆照,為此應近可能把可以確定下來的分支確定下來_|后来 歌词,並盡可能用內嵌指令__奇乐影院。

針對上麵這個例子|-兰州商学院教务管理系统,考慮__汉川新闻网:
(1)為讓各個循環的運算量大致相當___姜培琳 刘军,應把L_divide()和fnLog10()分到兩個循環中去||_注册送彩金各大平台,從循環體大小上考慮|-_中国斗鱼论坛,估計拆成兩個循環比較合適__众益彩苹果版如何下载。
(2)考慮在什麼地方把程序拆開比較合適_-诺基亚n78软件下载?在if (Ltmp2 == 0) Ltmp2 = 1;後拆開|-刺影辅助免费版,因為後麵用到的數據隻有Ltmp2_-|亿彩彩票是骗局揭秘,故隻需用一個數組保存每次循環的Ltmp2值即可__-30元好彩头出奖模式。
(3)循環體中的兩處函數調用L_divide()和fnLog10()都定義了其內嵌形式_|钻石刷q币,IL_divid()和IfnLog10()_-游彩网可靠吗。當把可以確定下來的分支作確定處理-__方舟降压仪怎么样,並盡可能用內嵌指令後-采缇,該循環體中所剩的分支結構已很少-王俊凯死亡照片曝光,循環體可以pipeline-_盈彩平台是真的吗。
優化前程序用2676 cycle|-2012时尚女装雪纺衫,優化後用400 cycle-|365高反水彩票平台。優化後兩個子循環的MII分別為14和6cycle-_金家墩客运站时刻表。


內存地址形式_||重庆陈思宇: 奔騰-||笔秀素材网,C6000都是32位計算機-_|尹国驹,字長32-阿思家,但內存地址都是按字節組織的 一個字4字節(查看內存時候各個字
時候:例如兩個連續字ox1000 ox1004) 寫彙編程序時候,下一個字也需要+4,但寫 C語言時候,int 型,+1就是加4但是,在Tiger SHARC中,雖然也是32位機,但內存是地址是按字組織的,查看內存時,連續的字地址相差1

//////////////////////////////////////////////////////////////////////////////////自己寫的一段性能很高的代碼///////////////////////////

 

 

#include <stdio.h>
#define INTRINSIC
short add(short var1, short var2)
{
	short var_out;
	int L_somme;
	L_somme = (int)var1 + var2;
	return(var_out);
}
 
int main()
{
	int i, result;
#ifdef INTRINSIC
	for (i = 0; i<1000; i++)
	{
		result = _sadd(100000, 20);
		result>0X00007fff ? result = 0x7fff : (result < 0x8000 ? result = 0x8000 : 0);
	}
#else
	for (i = 0; i < 1000; i++)
		add(10, 20);
#endif
	return 0;
}

延伸閱讀-_柯达经典广告:

Tag標簽-|小米4直播: 經驗   筆記  
  • 專題推薦

  • Directx11 遊戲編程入門教程
  • 專題主要學習DirectX的初級編程入門學習|联想a60游戏下载,對Directx11的入門及初學者有...... 詳細
  • Windows7係統入門 優化 技巧技術專題
  • Windows7係統專題 無論是升級操作係統|立冬立秋诗句、資料備份|-幸运魔剑士、加強資料的安全及管...... 詳細
About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯係方式
本站內容來自於互聯網,僅供用於網絡技術學習,學習中請遵循相關法律法規
pc蛋蛋爱购彩票一品彩票重庆时时彩运盛彩票pc蛋蛋

免责声明: 本站资料及图片来源互联网文章,本网不承担任何由内容信息所引起的争议和法律责任。所有作品版权归原创作者所有,与本站立场无关,如用户分享不慎侵犯了您的权益,请联系我们告知,我们将做删除处理!