将C语言循环部分优化,改成线性汇编或者C的都行!~~高手求救

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将C语言循环部分优化,改成线性汇编或者C的都行!~~高手求救相关的知识,希望对你有一定的参考价值。

用CCS编译
void geometryTrans()

int i,j;
int intCapX,intCapY;
for(i=0;i<numLines;i++) //行数

for(j=0;j<numPixels;j++) //像素数每行

intCapX = j-intXOffset;
intCapY = i-intYOffset;

// 判断是否在原图范围内
if((intCapX>=0) && (intCapX<numPixels))

if((i<numLines) && (intCapY>=0) && (intCapY<numLines))

// 传送亮度信号
*(Uint8 *)(disFrameBuf->frame.iFrm.y1 + i*numPixels + j) = *(Uint8 *)(capFrameBuf1->frame.iFrm.y1 + (i-intYOffset/2)*numPixels + intCapX);

else

*(Uint8 *)(disFrameBuf->frame.iFrm.y1 + i*numPixels + j) = 0xFF;


else

*(Uint8 *)(disFrameBuf->frame.iFrm.y1 + i*numPixels + j) = 0xFF;



要有耐心看......

问题:

用CCS翻译
void geometryTrans()

int i,j;
int intCapX,intCapY;
for(i=0;i<numLines;i++) //行数

for(j=0;j<numPixels;j++) //像素数每行

intCapX = j-intXOffset;
intCapY = i-intYOffset;

// 判断是否在原图范围内
if((intCapX>=0) && (intCapX<numPixels))

if((i<numLines) && (intCapY>=0) && (intCapY<numLines))

// 传送亮度信号
*(Uint8 *)(disFrameBuf->frame.iFrm.y1 + i*numPixels + j) = *(Uint8 *)(capFrameBuf1->frame.iFrm.y1 + (i-intYOffset/2)*numPixels + intCapX);

else

*(Uint8 *)(disFrameBuf->frame.iFrm.y1 + i*numPixels + j) = 0xFF;


else

*(Uint8 *)(disFrameBuf->frame.iFrm.y1 + i*numPixels + j) = 0xFF;



回答:

这个要看你使用什么编译器了。查看编译器的帮助文档,它会告诉你它支持那些指令集,并且做哪些可能的优化。

不同的编译器,是不一样的。

补充:GCC 不太清楚,你连VC++的版本都不说。汗,VC6是不支持SSE的,需要安装VC6SP5。
VS2005 和 VS2008 都支持 SSE。对 SSE/MMX 指令集优化得最好的,还是 Intel 的 c++ 编译器。

对并行和高性能计算,Fortran 的优势比较大。特别是 Fortran2003 的新特征,为并行计算做了很多专门的设定。Intel 也有 Fortran 的编译器。
参考技术A 这个要看你使用什么编译器了。查看编译器的帮助文档,它会告诉你它支持那些指令集,并且做哪些可能的优化。

不同的编译器,是不一样的。

补充:GCC 不太清楚,你连VC++的版本都不说。汗,VC6是不支持SSE的,需要安装VC6SP5。
VS2005 和 VS2008 都支持 SSE。对 SSE/MMX 指令集优化得最好的,还是 Intel 的 c++ 编译器。

对并行和高性能计算,Fortran 的优势比较大。特别是 Fortran2003 的新特征,为并行计算做了很多专门的设定。Intel 也有 Fortran 的编译器。

以上是关于将C语言循环部分优化,改成线性汇编或者C的都行!~~高手求救的主要内容,如果未能解决你的问题,请参考以下文章

JVM优化之循环展开(附有详细的汇编代码)

gcc asm

用c51语言把连续字节做比较,C51优化设计之循环语句

怎样能将汇编语言转换成c语言

汇编学习-分支与循环

使用 AND、OR、SHR 和 SHL 指令以及数组将循环从 x86 汇编转换为 C 语言