我正在从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);
}
}
你有什么想法吗?
答案 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