2012-02-09 126 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