Matlab高效的代码生成

时间:2012-02-09 13:38:37

标签: c matlab matlab-deployment

我正在从Matlab编码器生成C代码。 我有如下功能

function C = foo( A, B ) %#codegen
    for j=1:100,
    C = C+A(j);
    end
end

生成的c中此函数的代码是

void foo(float A[100],B,float* C){
    for(j=0;j<100;j++){
    *C+=A[j];
    }
}

我希望代码高效并以下列方式生成:

void foo(float* A,B,float* C){
//here B is the length of the array
for(j=0;j<B;j++){
    *C+=*(A+j);
}
}

你有什么想法吗?

3 个答案:

答案 0 :(得分:3)

我不了解整个故事,但是为什么不改变你的matlab代码来实际使用B作为开始并告诉我们接下来会发生什么,比如

function C = foo( A, B ) %#codegen
    for j=1:B,
        C = C+A(j);
    end
end

答案 1 :(得分:0)

我的猜测是Matlab Coder期望矢量化代码:

再试一次:

function C = foo( A, B ) %#codegen
    C = sum(A(1:100));
end

答案 2 :(得分:0)

你可能需要优化你的Matlab代码,使其更像你想要的C. Matlab代码访问A中的100个元素;这就是生成的C正在复制的内容。如果你只想转到B那么你必须在Matlab中做到这一点。

% MATLAB
function C = foo( A, B ) %#codegen
  for j=1:B,
  C = C+A(j);
  end
end