2012-02-09 5 views
3

Я генерирую код C из Matlab-кодера. У меня есть функция следующимMatlab эффективная генерация кода

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

код для этой функции в с вырабатываемой

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

+0

Как вы создаете код C из Matlab? –

ответ

3

Я не понимаю всю эту историю, но почему бы вам не изменить код MatLab на самом деле использовать B для начала и сказать нам, что происходит потом, как

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

Я предполагаю, что Matlab Coder ожидает векторизованы код:

Попробуйте еще раз на это один:

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

В примере OP 'C' является скалярным ... кажется, он хочет' C = sum (A (1: B)); ' –

+0

@JonasHeidelberg, спасибо, обновлено. –

0

вы, вероятно, нужно оптимизировать код Matlab, чтобы больше походить на то, что вы хотите в C. Код Matlab имеет доступ к 100 элементам в A; а именно то, что сгенерированное С реплицируется. Если вы хотите, чтобы он переходил только на B, вам нужно было сделать это в Matlab.

% MATLAB 
function C = foo(A, B) %#codegen 
    for j=1:B, 
    C = C+A(j); 
    end 
end 
Смежные вопросы