2012-02-09 103 views
3

我从Matlab编码器生成C代码。 我有一个函数,如下所示Matlab高效代码生成

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); 
} 
} 

你有什么想法吗?

+1

我相信你的MATLAB代码会返回错误,因为C变量没有定义。 – yuk 2012-02-09 16:13:31

+0

如何从Matlab生成C代码? – 2012-02-09 18:22:28

回答

3

我不明白整个故事,但你为什么不改变你的MATLAB代码实际使用B一开始告诉我们,然后会发生什么,就像

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

我的猜测是,Matlab的编码器预计量化代码:

再次试试这个:

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

在OP的例子中,'C'是标量......他似乎希望'C = sum(A(1:B));' – 2012-02-09 20:38:38

+0

@JonasHeidelberg,谢谢,更新。 – 2012-02-10 08:45:47

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