Matlab эффективная генерация кода - PullRequest
3 голосов
/ 09 февраля 2012

Я генерирую C-код из 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);
}
}

У вас есть идея?

Ответы [ 3 ]

3 голосов
/ 09 февраля 2012

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

function C = foo( A, B ) %#codegen
    for j=1:B,
        C = C+A(j);
    end
end
0 голосов
/ 09 февраля 2012

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

% MATLAB
function C = foo( A, B ) %#codegen
  for j=1:B,
  C = C+A(j);
  end
end
0 голосов
/ 09 февраля 2012

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

Попробуйте еще раз:

function C = foo( A, B ) %#codegen
    C = sum(A(1:100));
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...