Coder varsize unbounded second dimension

조회 수: 5 (최근 30일)
Maria
Maria 2020년 11월 25일
댓글: Maria 2020년 11월 25일
Hi,
I am reading on the Matlab help about coder.varsize. In particular, I read that
Declare Variable-Size Array with a Mix of Fixed and Variable Dimensions
Specify that A is an array whose first dimension has a fixed size of three and whose second dimension has a variable size with an upper bound of 20.
function fcn()
...
coder.varsize('A',[3 20], [0 1] );
...
end
I am not sure I understand how to fix the first dimension, but declaring the second dimension as "Inf", so no upperbound at all.
From what I understand here, I always need to give an upperbound, when I have a mix of fixed and variable dimensions. Is that correct, or there is a way to fix one dimension, and specify the second dimension as unbounded?

채택된 답변

Darshan Ramakant Bhat
Darshan Ramakant Bhat 2020년 11월 25일
I will try to explain with an example.
What does it mean by fixed dimesion ? Consider below example
function [x,y] = usevarsize(n)
%#codegen
x = 1;
%x = ones(2);
coder.varsize('x',[1 12],[0 1]);
y = size(x);
if n > 10
x = 1:n;
end
Here variable can have dimension as '1x:12'. It means 'x' can be 2, [3,4], [1,3,5] .... [1,2...12]. So x can be any 1-D array till lenght 12.
If you had declared 'x' as coder.varsize('x',[2 12],[0 1]); then 'x' can be any 2xm matrix, where m can vary from 1 to 12.
Verify this behavior using the mex :
codegen usevarsize -args {0} -report
>> usevarsize_mex(11)
ans =
1 2 3 4 5 6 7 8 9 10 11
>> usevarsize_mex(14)
Error using usevarsize (line 8)
Size overflow error on dimension 2: upper bound is 12, but actual size is 14.
Should you always specify upperbound for the second dimension when the first is fixed ?
Not necessarily. Consider below example
function [x,y] = usevarsize(n)
%#codegen
x = 1;
%x = ones(2);
coder.varsize('x',[1 inf],[0 1]);
y = size(x);
if n > 10
x = 1:n;
end
Here I am declaring the second dimension of 'x' as unbounded. So 'x' can be any length 1-D vector :
codegen usevarsize -args {0} -report
>> usevarsize_mex(24)
ans =
Columns 1 through 22
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Columns 23 through 24
23 24
What is the difference between specifying an upperbound & unbounded case
When the upperbound is not known (unbounded) then the generated code may not be very much performant since it may have to do heap memory allocations. When the upper bounds are known, data can be stack allocated, so the code will be more performant. Also the MATLAB Coder can do additional optimizations when the upperbounds are known.
Hope this will give you more clarity.
  댓글 수: 1
Maria
Maria 2020년 11월 25일
Perfect answer, I understood! I did not know I could use "inf" in the matlab code.
I will try using upperbounds whenever possible.
Thanks!!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

태그

제품


릴리스

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by