将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的都行!~~高手求救的主要内容,如果未能解决你的问题,请参考以下文章