MATLAB Answers

Coder varsize unbounded second dimension

6 ビュー (過去 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