[ 
https://issues.apache.org/jira/browse/SYSTEMML-1467?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15958339#comment-15958339
 ] 

Matthias Boehm commented on SYSTEMML-1467:
------------------------------------------

ok the fix will be in master tomorrow morning, but just for completeness a 
workaround is to separate the seq via
{code}
seqS = seq(1, nrow(S)); 
if(1==1) {}
P = table(seqS, S, ncol(X), ncol(X));
{code}

> optimizer changes the output of table funciton
> ----------------------------------------------
>
>                 Key: SYSTEMML-1467
>                 URL: https://issues.apache.org/jira/browse/SYSTEMML-1467
>             Project: SystemML
>          Issue Type: Bug
>          Components: Runtime
>            Reporter: Imran Younus
>
> Following is small code snippet which is part of an r4ml dml script.
> {code}
> reorder_matrix = function(
>   matrix[double] X, # the input matrix, we have to account for extra beta0 
> for the intercept
>   matrix[double] B, # beta
>   matrix[double] S  # Selected
> ) return (matrix[double] Y) {
>   S = t(S);
>   whatever = ncol(X)
>   num_empty_B = ncol(X) - nrow(B);
>   if (num_empty_B < 0) {
>     stop("Error: unable to re-order the matrix. Reason: B more than matrix 
> X");
>   }
>   P = table(seq(1, nrow(S)), S, ncol(X), ncol(X));
>   #P = table(seq(1, nrow(S)), S, whatever, whatever);
>   Y = t(P) %*% B;
> }
> X = rand(rows=5000, cols=11, min=0, max=10, pdf="uniform")
> Beta = matrix("-0.048 -1.918 0.000 0.024 0.000 0.005 -0.001 1.842 0.216 0.483 
> 0.361", rows=11, cols=1)
> Selected = matrix("11.000 8.000 2.000 4.000 1.000 6.000 10.000 7.000 9.000", 
> rows=1, cols=9)
> B = reorder_matrix(X, Beta, Selected)
> print(toString(B))
> {code}
> So this works without any problem. Matrix {{P}} is {{11x11}}, with last two 
> rows filled with zeros. BTW, I'm running it in standalone mode.
> Now, if I change line 14 to this:
> {code}
> P = table(seq(1, nrow(S)), S, whatever, whatever);
> {code}
> then nothing should change because {{whatever = ncol(X)}}. But, this breaks 
> because now the shape of {{P}} changes. The last two rows are removed because 
> these are all zeros.
> Here is the explain for this case:
> {code}
> 17/04/05 17:38:40 INFO api.DMLScript: EXPLAIN (RUNTIME):
> # Memory Budget local/remote = 5496MB/140MB/140MB
> # Degree of Parallelism (vcores) local/remote = 8/1/1
> PROGRAM ( size CP/MR = 0/0 )
> --MAIN PROGRAM
> ----GENERIC (lines 20-24) [recompile=false]
> ------CP createvar _mVar0 scratch_space//_p26900_127.0.1.1//_t0/temp0 true 
> MATRIX binaryblock 11 1 1000 1000 -1 copy
> ------CP sinit 11 1 1000 1000 -0.048 -1.918 0.000 0.024 0.000 0.005 -0.001 
> 1.842 0.216 0.483 0.361 _mVar0.MATRIX.DOUBLE
> ------CP createvar _mVar1 scratch_space//_p26900_127.0.1.1//_t0/temp1 true 
> MATRIX binaryblock 9 1 1000 1000 -1 copy
> ------CP sinit 9 1 1000 1000 11.000 8.000 2.000 4.000 1.000 6.000 10.000 
> 7.000 9.000 _mVar1.MATRIX.DOUBLE
> ------CP createvar _mVar2 scratch_space//_p26900_127.0.1.1//_t0/temp2 true 
> MATRIX binarycell 1 11 -1 -1 -1 copy
> ------CP r' _mVar0.MATRIX.DOUBLE _mVar2.MATRIX.DOUBLE 8
> ------CP rmvar _mVar0
> ------CP createvar _mVar3 scratch_space//_p26900_127.0.1.1//_t0/temp3 true 
> MATRIX binarycell 9 11 -1 -1 -1 copy
> ------CP rexpand cast=true max=11 ignore=false dir=cols target=_mVar1 
> _mVar3.MATRIX.DOUBLE
> ------CP rmvar _mVar1
> ------CP createvar _mVar4 scratch_space//_p26900_127.0.1.1//_t0/temp4 true 
> MATRIX binarycell 1 11 -1 -1 -1 copy
> ------CP ba+* _mVar2.MATRIX.DOUBLE _mVar3.MATRIX.DOUBLE _mVar4.MATRIX.DOUBLE 8
> ------CP rmvar _mVar2
> ------CP rmvar _mVar3
> ------CP createvar _mVar5 scratch_space//_p26900_127.0.1.1//_t0/temp5 true 
> MATRIX binarycell 11 1 -1 -1 -1 copy
> ------CP r' _mVar4.MATRIX.DOUBLE _mVar5.MATRIX.DOUBLE 8
> ------CP rmvar _mVar4
> ------CP toString target=_mVar5 _Var6.SCALAR.STRING
> ------CP rmvar _mVar5
> ------CP print _Var6.SCALAR.STRING.false _Var7.SCALAR.STRING
> ------CP rmvar _Var6
> ------CP rmvar _Var7
> {code}
> Now, lets revert back the definition of {{P}} to
> {code}
> P = table(seq(1, nrow(S)), S, ncol(X), ncol(X));
> {code}
> If I comment out the {{if}} statement, then it breaks again because of the 
> same reason.
> Off course, this is the "optimization" at work here. If I set the 
> {{opetlevel}} to 0 or 1 in {{SystemML-config.xml}}, then it doesn't break.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to