Efficient way to chain element-wise operations for code generation?

11 visualizaciones (últimos 30 días)
Gershom Agim
Gershom Agim el 5 de Feb. de 2019
Editada: Gershom Agim el 6 de Feb. de 2019
Hi, I have functions that chain elementwise array operations eg:
function y = Foo(X)
y = 20*log10(abs(X));
end
I want to use Matlab Coder to make C code out of this.
I inspect the C code generated.
It performs all the sub-expressions as their own separate loops like:
//Pseudocode:
for (loop over array){
Y = abs(X)
}
for (loop over array){
Y = log10(Y)
}
for (loop over array){
Y = 20.0f * Y
}
is there any way to fuse all these into 1 loop (as shown below) without manually editting the generated code:
for (loop over array){
Y = 20.0f * log10(abs(X))
}
I'm hoping for something like an elementwise functor mapped across an array like arrayfun, but I haven't been able to get anything working.

Respuestas (1)

Gershom Agim
Gershom Agim el 6 de Feb. de 2019
Editada: Gershom Agim el 6 de Feb. de 2019
My (really inelegant) solution to this is to create the result array outside the function, and pass that in as an argument, then explicitly write out the for-loops.
Eg:
function Y = Foo(X,Y)
% Assert sizes here so codegen knows
for i=1:size(X,1)
for j=1:size(X,2)
Y(i,j) = 20*log10(abs(X(i,j)));
end
end
end
Is there a better way of doing this?

Categorías

Más información sobre MATLAB Coder en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by