(完整版)DSP优化心得
dsp优化心得

iPone 的一句大家都耳熟能详的广告词:“一直被模仿,从未被超越” 。
笔者认为主要是因为他们掌握着核心的算法和机器的优化策略。
因为一般的硬件我们都买的回来,但是能否将该硬件发挥到极致,就会公司之间的差别,因为同样的硬件,如果软件执行的速度不同,那结果就会有很大的差别,所以说:真正的技术是买不来的。
所以,我们进行嵌入式开发的时候,一旦选定了DSP6000系列的芯片,就不能把它当成单片机来用,必须发挥dsp 与众不同,独一无二的性能。
也就是说如何调整c 语言才能够适应这么强悍的硬件就是我们考虑的重点内容,即我们应该按照哪种既定的原则去编写C 代码才能够让dsp 真正作为dsp 在工作,发挥到dsp 的优势。
dsp 的优势在于:速度!所以,dsp 的优化成为一门专业。
所以,我们一定要使自己在dsp 上编写的c 代码高效运行。
因为制约运行速度的因素是硬件和软件。
因为dsp 一旦选定,硬件也就确定了。
所以,我们首先要注意如何提升软件的效率。
对于软件来说,一般情况下有3 个优化等级。
第一:算法上优化。
第二:程序结构上的优化。
第三:汇编级的优化。
我们需要的是研究前两个等级的优化。
所以,在这篇文章中,我们需要研究的重点有两个:dsp 的硬件结构和在dsp 上如何优化c 代码。
dsp 的硬件结构关于dsp 硬件结构的特色有几个:哈佛结构,流水线结构,带宽和运算方式的高效等。
1.1.1 哈佛结构哈佛结构的本质属性是数据存储器(RAM存储数据的存储器)和程序存储器(存储指令)分开。
Cpu可以一边取指令,一边取数据。
这样会极大的提高处理的速度,因为以前是冯诺依曼结构,总线是分时复用的,这样会降低处理的速度。
而且,dsp6000系列是基于VLIW结构的,具体来讲就说CPU可以提取通过程序从程序存储器中一次提取256bit的指令,即CPU可以一次取8条指令放在处理中。
加上和8级流水线的配合,相当于8个传统的CPU一起工作。
【心得体会】dsp实验心得体会

【心得体会】dsp实验心得体会
在进行DSP实验的过程中,我深刻体会到了数字信号处理的重
要性和应用价值。
通过实验,我对信号处理的基本原理和方法有了
更深入的了解,也提高了自己的动手能力和实际操作能力。
首先,在实验中我学会了如何使用MATLAB等工具进行数字信号
处理,掌握了数字滤波、频谱分析、信号重构等基本技术。
这些技
术在实际工程中有着广泛的应用,比如音频处理、图像处理、通信
系统等领域,能够帮助我们更好地处理和分析信号数据。
其次,通过实验我也意识到了数字信号处理在现代科技中的重
要性。
随着科技的不断发展,数字信号处理已经成为了信息处理和
传输的基础,它的应用范围越来越广泛,对于提高信息处理的效率
和质量起着至关重要的作用。
最后,通过实验我还深刻体会到了团队合作的重要性。
在实验中,我们需要相互合作、共同讨论,才能更好地完成实验任务。
团
队合作不仅能够提高工作效率,还能够促进成员之间的交流和学习,是非常宝贵的一种能力。
总的来说,通过这次DSP实验,我对数字信号处理有了更深入的了解,也提高了自己的实际操作能力和团队合作能力,相信这些经验和收获会对我的未来学习和工作有着积极的影响。
希望能够在以后的学习和工作中不断提升自己,更好地应用数字信号处理的知识和技术。
【心得体会】dsp实验心得体会

【心得体会】dsp实验心得体会在进行dsp实验的过程中,我收获了很多宝贵的经验和启示。
首先,在实验前,我深入了解了dsp的基本原理和相关的知识,为实验的顺利进行打下了坚实的基础。
其次,在实验过程中,我注重细节和精确度,时刻保持专注和耐心。
这对于实验结果的准确性和可靠性起到了至关重要的作用。
在实验过程中,我还学会了如何合理安排时间和资源。
由于dsp实验需要大量的计算和数据处理,我学会了如何高效地利用计算机和相关软件工具。
我学会了如何合理分配时间,以确保实验的顺利进行,并在规定的时间内完成实验任务。
在实验的过程中,我也遇到了一些问题和挑战。
例如,某些实验步骤需要复杂的编程和算法设计,我需要仔细思考和分析,才能找到解决问题的方法。
同时,我还需要不断调整和改进实验方案,以确保实验的准确性和可行性。
通过这次dsp实验,我不仅学到了专业知识和技能,还培养了自己的分析和解决问题的能力。
我学会了如何从不同的角度思考和分析问题,并找到最合适的解决方案。
我还学会了如何与团队成员合作,共同完成实验任务。
通过反思和总结,我认识到在进行dsp实验时,需要注重细节和精确度。
只有保持专注和耐心,才能获得准确和可靠的实验结果。
同时,我还意识到在实验过程中,需要灵活调整实验方案,并不断改进和优化。
只有不断学习和提高自己,才能在dsp领域取得更好的成绩。
最后,我想给其他学习dsp的同学一些建议。
首先,要注重理论知识的学习,建立扎实的基础。
其次,要勇于尝试和实践,通过实验来巩固和应用所学知识。
同时,要善于思考和分析问题,不断寻找解决问题的方法和途径。
最重要的是,要保持学习的热情和持续的努力,只有这样,才能在dsp领域获得更好的成长和发展。
总而言之,通过这次dsp实验,我不仅学到了专业知识和技能,还培养了自己的分析和解决问题的能力。
我学会了如何从不同的角度思考和分析问题,并找到最合适的解决方案。
通过反思和总结,我认识到在进行dsp实验时,需要注重细节和精确度,并不断改进和优化实验方案。
dsp学习心得

dsp学习心得近年来,随着数字信号处理(Digital Signal Processing,简称DSP)技术的迅猛发展,该领域开始受到越来越多人的关注与追求。
我也是其中之一,通过一段时间的学习和实践,我对DSP有了一些初步的认识和体验,下面就来分享我的学习心得。
首先,我深刻认识到DSP在现代通信、音频处理、图像处理等领域中的广泛应用。
无论是手机通话时的语音信号处理,还是数字音频播放器中的音乐解码、均衡,都少不了DSP的身影。
此外,在医学图像处理、雷达信号处理等领域,DSP也发挥着重要的作用。
这使我意识到,如果能够熟练掌握DSP技术,对我未来的职业发展将会有极大的帮助。
其次,学习DSP需要具备扎实的数学基础。
众所周知,DSP是建立在数学基础之上的,尤其是离散数学、概率论、线性代数等方面的知识。
这对我来说确实是一项挑战,因为我在大学期间对数学方面的学习并不突出。
因此,我意识到,只有通过不断努力学习,才能够夯实数学基础,从而更好地掌握DSP相关知识。
另外,学习DSP需要进行大量的实践操作。
尽管理论知识十分重要,但只有通过实际操作,才能真正加深对DSP原理和算法的理解。
在学习的过程中,我利用开源的DSP开发平台,进行了一些简单的实验,如数字滤波、FFT(快速傅里叶变换)等。
通过实验,我体会到了理论知识在实际中的应用,同时也发现了实际操作中可能遇到的一些问题,并通过调试和修改不断提升自己的技能。
此外,积极参与学习交流对于DSP的学习也非常重要。
在学习的过程中,我积极参加线上和线下的学习班、讲座,还加入了一些与DSP 相关的技术交流社区。
通过与他人的交流,我不仅能够获取更多的学习资源,还能够结识一些志同道合的朋友,共同探讨和解决学习中的问题。
这对于我来说是非常宝贵的经验,也加深了我对DSP的理解和热爱。
总结起来,学习DSP需要全面提升自己的数学基础,并进行大量的实践操作,同时积极参与学习交流。
通过这些努力,我相信在不久的将来,我能够深入掌握DSP技术,为实际应用场景提供有效的解决方案,并创造出更多有意义的成果。
dsp学习心得

dsp学习心得在我大学期间,我选择了数字信号处理(DSP)作为我的专业方向。
这是一门非常有挑战性、专业化的学科,需要深入理解信号处理的理论与算法,并能够应用于实际工程中。
在学习过程中,我经历了许多挫折,但也从中获得了许多宝贵的经验和心得。
下面,我将分享一些我在DSP学习中的心得体会。
1. 基础知识的重要性在学习DSP之前,掌握基础的数学知识是十分重要的。
线性代数、微积分、概率论等知识将为后续的学习打下坚实的基础。
在很多时候,我们需要用到积分、微分、矩阵变换等数学概念,以便能够理解和推导出各种信号处理算法。
因此,学生们在学习DSP之前,最好能够对这些数学知识有一个扎实的理解。
2. 算法的掌握与应用在DSP学习中,算法的掌握是至关重要的。
最常见的算法包括傅里叶变换、滤波算法、离散余弦变换等。
这些算法的理解程度将决定你在信号处理领域的应用能力。
因此,我花费了大量的时间和精力来学习和理解这些算法。
我通过阅读教材、参加课程并完成相关的实践项目来不断加深对算法的理解。
同时,我发现了一些学习方法,如参加学习小组、参加学术研讨会等,这些方法可以帮助我更好地理解和应用算法。
3. 实践的重要性实践是学习DSP的重要环节。
只有亲自动手实践,才能真正掌握所学的理论知识。
在我的学习过程中,我利用MATLAB等工具进行实验,以便更好地理解并验证所学的算法。
我通过编写代码、调试程序、观察输出结果等方式进行实践,不断改进和完善我的学习成果。
通过实践,我不仅加深了对信号处理算法的理解,还锻炼了我的编程和问题解决能力。
4. 多角度的思考在学习DSP的过程中,我发现多角度思考问题是十分重要的。
在实际应用中,我们会面对各种各样的问题和挑战,需要能够从不同的角度进行思考和解决。
我努力培养了创造性思维和综合性思考的能力,利用各种方法和技术来解决各类问题。
在多角度思考的过程中,我发现很多问题可以得到更好的解决方案,也为自己在学术研究和工程实践中积累了宝贵的经验。
DSP 优化心得解析

C6XX优化经验总结一、c6x的编译的常用选项(一)c6x的编译程序为“cl6x.exe”使用的方法Cl6x [options] [filenames]Cl6x:编译程序Options:编译选项Filenames: C或汇编源文件说明:编译选项是一个字母或者两个字母,对大小写不敏感。
编译选项的前面需要有一个“-”符号。
一个字母的选项可以合并在一起。
比如“-sgq”与“-s -g -q”相同。
两个字母的选项如果第一个字母相同也可以合并在一起。
比如“-mgt”与“-mg -mt”相同。
(二)有关优化的选项-mt:表示在程序中没有使用alaising技术,这使得编译器可以进行比较好的优化。
-o3:对文件级别进行最强的优化,一般在编译时应该使用这个选项。
但是在个别情况下使用这个选项优化程序可能会出现错误(-o2有相同现象,-o0和-o1不会出现错误)。
可能是在优化循环,组织流水线的时候发生错误。
如果有这种现象出现可以同时使用-g选项,程序优化就不会出现错误,但是优化效果会下降。
另外可以调整程序的表达方式,可能会避免编译器发生错误。
-pm:在程序级别进行优化。
可以将所以文件联合在一起进行优化,主要有去掉没有被调用的函数、总是常数的变量以及没有使用的函数返回值。
建议由程序员自己进行这种优化工作。
使用这个选项在win98下编译可能会出现找不到编译程序的情况。
-ms0:不使用冗余循环进行优化,减小程序的大小。
一般情况下这个选项对程序大小的优化作用不明显。
-mh[n]:去掉流水线的epilog,减小程序的大小。
这个选项的作用比较明显。
但是有可能出现读取地址超出有效范围的问题,所以要在数据段的开始和结尾处增加一些pading,或者在分配内存时保证数组的前面和后面一段范围内都是有效的地址。
可选的参数n给出这种pading的长度字节数。
(三)保留编译和优化信息的选项-k:保留优化后生成汇编语言文件。
-s:汇编语言文件中加入优化信息,如果没有则加入C语言源程序作为注释。
DSP实验学习心得(word文档良心出品)

DSP实验学习心得论DSP发展前景DSP 即为数字信号处理器(Digital Signal Processing),是在模拟信号变换成数字信号以后进行高速实时处理的专用处理器。
它的工作原理是将现实世界的模拟信号转换成数字信号,再用数学方法处理此信号,得到相应的结果。
自从数字信号处理器(Digital Signal Processor)问世以来,由于它具有高速、灵活、可编程、低功耗和便于接口等特点,已在图形、图像处理,语音、语言处理,通用信号处理,测量分析,通信等领域发挥越来越重要的作用。
随着成本的降低,控制界已对此产生浓厚兴趣,已在不少场合得到成功应用。
DSP 数字信号处理器DSP 芯片采用了数据总线和程序总线分离的哈佛结构及改进的哈佛结构,较传统处理器的冯?诺依曼结构具有更高的指令执行速度。
其处理速度比最快的CPU 快10-50 倍。
在当今数字化时代背景下,DSP 已成为通信、计算机、消费类电子产品等领域的基础器件,被誉为信息社会革命的“旗手”。
最初的DSP 器件只是被设计成用以完成复杂数字信号处理的算法。
DSP 器件紧随着数字信号理论的发展而不断发展。
DSP发展最快,现在的DSP 属于第五代产品,它与第四代相比,系统集成度更高,将DSP 芯核及外围组件综合集成在单一芯片上。
这种集成度极高的DSP 芯片不仅在通信、计算机领域大显身手,而且逐渐渗透到人们日常消费领域,前景十分可观。
近年来,随着通信技术的飞速发展,DSP已经成为信号与信息处理领域里一门十分重要的新兴学科,它代表着当今无线系统的主流发展方向。
现在,通信领域中许多产品都与DSP 密切联系,例如,Modem、数据加密、扩频通信、可视电话等。
而寻找DSP 芯片来实现算法最开始的目标是在可以接受的时间内对算法做仿真,随后是将波形存储起来,然后再加以处理。
在短短的十多年时间,DSP芯片已经在信号处理、通信、雷达等许多领域得到广泛的应用。
目前, DSP 芯片的价格也越来越低,性能价格比日益提高,具有巨大的应用潜力。
【心得体会】dsp实验心得体会

【心得体会】dsp实验心得体会
在进行DSP实验的过程中,我深刻体会到了理论知识与实际操
作的结合是非常重要的。
通过实验,我不仅加深了对数字信号处理
理论知识的理解,还学会了如何将这些理论知识应用到实际的项目
中去。
在实验中,我发现了理论知识和实际操作之间的差距。
有时候,理论上的方法并不能完全解决实际问题,需要我们根据实际情况进
行调整和改进。
这让我意识到了理论知识只是一个基础,真正的能
力还需要通过实践来培养和提高。
另外,通过实验,我也学会了团队合作的重要性。
在实验中,
我们需要与同伴共同讨论、合作,才能更好地完成实验任务。
团队
合作不仅可以提高工作效率,还可以让我们从不同的角度去思考问题,拓宽自己的视野。
总的来说,通过DSP实验,我不仅学到了理论知识,还学会了
如何将理论知识应用到实际项目中去,以及团队合作的重要性。
这
些都是我在未来工作和学习中会继续努力的方向。
希望通过不断的
实践和学习,我可以不断提高自己的能力,为将来的发展打下坚实的基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C6XX优化经验总结一、c6x的编译的常用选项(一)c6x的编译程序为“cl6x.exe”使用的方法Cl6x [options] [filenames]Cl6x:编译程序Options:编译选项Filenames: C或汇编源文件说明:编译选项是一个字母或者两个字母,对大小写不敏感。
编译选项的前面需要有一个“-”符号。
一个字母的选项可以合并在一起。
比如“-sgq”与“-s -g -q”相同。
两个字母的选项如果第一个字母相同也可以合并在一起。
比如“-mgt”与“-mg -mt”相同。
(二)有关优化的选项-mt:表示在程序中没有使用alaising技术,这使得编译器可以进行比较好的优化。
-o3:对文件级别进行最强的优化,一般在编译时应该使用这个选项。
但是在个别情况下使用这个选项优化程序可能会出现错误(-o2有相同现象,-o0和-o1不会出现错误)。
可能是在优化循环,组织流水线的时候发生错误。
如果有这种现象出现可以同时使用-g选项,程序优化就不会出现错误,但是优化效果会下降。
另外可以调整程序的表达方式,可能会避免编译器发生错误。
-pm:在程序级别进行优化。
可以将所以文件联合在一起进行优化,主要有去掉没有被调用的函数、总是常数的变量以及没有使用的函数返回值。
建议由程序员自己进行这种优化工作。
使用这个选项在win98下编译可能会出现找不到编译程序的情况。
-ms0:不使用冗余循环进行优化,减小程序的大小。
一般情况下这个选项对程序大小的优化作用不明显。
-mh[n]:去掉流水线的epilog,减小程序的大小。
这个选项的作用比较明显。
但是有可能出现读取地址超出有效范围的问题,所以要在数据段的开始和结尾处增加一些pading,或者在分配内存时保证数组的前面和后面一段范围内都是有效的地址。
可选的参数n给出这种pading的长度字节数。
(三)保留编译和优化信息的选项-k:保留优化后生成汇编语言文件。
-s:汇编语言文件中加入优化信息,如果没有则加入C语言源程序作为注释。
-mw:在汇编语言文件加入软件流水线信息。
(四)有关调试和剖析的选项-g:允许符号调试,在“out”文件中包含符号信息和行号信息,可以在c语言级别进行调试和剖析。
使用联合使用-g、-mt和-o3可以保证能够进行符号调试的情况下最大限度的优化。
-mg:允许profile优化后的程序。
在“out”文件中包含符号信息和很少的行号信息。
允许在c语言的函数基本进行剖析。
如果联合使用这两个选项,-g选项可能被忽略,结果与只用-mg相同。
(五)其它类型-mln:生成大内存模式的程序。
-ml0:缺省情况下将集合变量(数组和结构)作为far型。
-ml1:缺省情况下将全部函数作为far型-ml2:等于-ml0加-ml1-ml3:缺省情况下将全部数据和函数作为far型(六)建议使用的编译方式Cl6x -gk -mt -o3 -mw -ss “filename”方式1用于程序的调试,这种方式具有比较强的优化能力,并且支持符号调试。
在编译的过程中不会发生错误。
由于生成的“out”文件中包含了符号信息和行号信息,所以比较大。
Cl6x -k -mgt -o3 -mw -ss “filename”方式2用于程序的剖析(profile),这种方式的优化能力几乎最强(绝大多数情况下与方式3相同),并且支持对程序进行profile。
文件中只包含了符号信息和很少的行号信息,所以“out”文件比较小。
Cl6x -k -mt -o3 -mw -ss “filename”方式3用于最终的发行版本程序,可以对程序进行最强的优化,并且去掉了全部的符号和行号信息,所以“out”文件比较小。
由多个文件组成的程序应该编写makefile,将编译参数放在该文件中,并在其中说明使用的编译器的版本号。
(七)连接参数-heap:指定堆的大小-stack:指定栈的大小连接的各种选项应该统一放在“cmd”文件中二、双重循环和多重循环的优化总结双重循环多重循环看起来比较复杂,但实际上多重循环优化方法比较简单,就在于一个字:“拆”,一旦完成这一步之后,多重循环就成为单层循环,优化就可以按照普通的单层循环来做了。
多重循环的特点是在优化器优化时只在最内层循环中形成一个pipeline,这样循环语句就不能充分利用C6的软件流水线,而且对于内部循环的次数较少的情况,消耗在prolog和eplog上的cycle数也是不可忽视的。
针对这种状况可以考虑将多重循环拆开形成一个单层循环,可以拆外层循环也可以拆内层循环,一般视具体情况而定。
这样就可以充分利用优化器构成的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内使用两个乘法器,所以还可以充分利用另外的一个乘法器。
因此考虑将内层循环拆开来执行,如下: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内部的资源,提高了运行效率。
又如下例: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]);y32[i] = s;s = L_abs(s);if (L_sub(s, max) > (Word32) 0)max = s;}tot = L_add(tot, L_shr(max, 1));}在这个多层循环中一共有三层循环,而最内层的循环的运算量很小,只有一次乘累加操作,而我们知道C6中一个packet中可以做两个乘累加运算,所以为了增加内部循环的运算,减少外部循环的层数,我们可以将第一层循环的操作拆开,其负责的运算加入到内部循环中,也就是在内层循环中一次做四次的乘累加运算,这样将多次操作形成pipeline,提高了运行效率,优化后的C代码如下:tot = 4;max0=0;max1=0;max2=0;max3=0;for (i = 0; i <44; i += STEP) //STEP=4, 11 times cirs{//codefor (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])));}}//codeCCS的优化:三、16位变为32位操作,使用intrinsic函数,用const等。
1、源代码: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)high2 */aReg += (double)(0xffff & L_var1) * ((double)L_shr(L_var2,16)) * 2.0; /* (unsigned)low2 * (signed)high1 */aReg += (double)(0xffff & L_var2) * ((double)L_shr(L_var1,16)) * 2.0; /* >> 16 */aReg = (aReg / 65536);aReg = floor(aReg);/* (signed)high1 * (signed)high2 */aReg += (double)(L_shr(L_var1,16)) * (double)(L_shr(L_var2,16)) * 2.0; /* saturate result.. */lvar = L_saturate(aReg);return(lvar);}2、改编后的代码: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、优化方法说明:C6000编译器提供的intrinsic 可快速优化C代码,intrinsic用前下划线表示同调用函数一样可以调用它,即直接内联为C6000的函数。