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

10 views (last 30 days)
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.

Answers (1)

Gershom Agim
Gershom Agim on 6 Feb 2019
Edited: Gershom Agim on 6 Feb 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?

Categories

Find more on MATLAB Coder in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!