loop compilation problem

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

loop compilation problem

Lukas Stadler
Hi!

We’ve seen a problem with the compiler in specific cases of matrix updates:

> { m <- matrix(1:4, 2) ; z <- 0; for(i in 1) { m[z <- z + 1,z <- z + 1] <- 99; } ; m }
     [,1] [,2]
[1,]    1    3
[2,]    2   99

Here, it modifies element [2,2], which is unexpected.
It behaves correct without the loop:

> { m <- matrix(1:4, 2) ; z <- 0; m[z <- z + 1,z <- z + 1] <- 99 ; m }
     [,1] [,2]
[1,]    1   99
[2,]    2    4

… and without the jit:

> enableJIT(0)
[1] 3
> { m <- matrix(1:4, 2) ; z <- 0; for(i in 1) { m[z <- z + 1,z <- z + 1] <- 99; } ; m }
     [,1] [,2]
[1,]    1   99
[2,]    2    4

I checked with "R Under development (unstable) (2017-08-23 r73116)”, and the problem is still there.

- Lukas
______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: loop compilation problem

luke-tierney
Thanks.

Here is a simplified version:

library(compiler)
zero <- 0
one <- 1
expr <- quote((z <- zero + one) + (z <- z + 1))
eval(compiler::compile(expr))

Sill fix shortly.

Best,

luke

On Thu, 24 Aug 2017, Lukas Stadler wrote:

> Hi!
>
> We’ve seen a problem with the compiler in specific cases of matrix updates:
>
>> { m <- matrix(1:4, 2) ; z <- 0; for(i in 1) { m[z <- z + 1,z <- z + 1] <- 99; } ; m }
>     [,1] [,2]
> [1,]    1    3
> [2,]    2   99
>
> Here, it modifies element [2,2], which is unexpected.
> It behaves correct without the loop:
>
>> { m <- matrix(1:4, 2) ; z <- 0; m[z <- z + 1,z <- z + 1] <- 99 ; m }
>     [,1] [,2]
> [1,]    1   99
> [2,]    2    4
>
> … and without the jit:
>
>> enableJIT(0)
> [1] 3
>> { m <- matrix(1:4, 2) ; z <- 0; for(i in 1) { m[z <- z + 1,z <- z + 1] <- 99; } ; m }
>     [,1] [,2]
> [1,]    1   99
> [2,]    2    4
>
> I checked with "R Under development (unstable) (2017-08-23 r73116)”, and the problem is still there.
>
> - Lukas
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

--
Luke Tierney
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa                  Phone:             319-335-3386
Department of Statistics and        Fax:               319-335-3017
    Actuarial Science
241 Schaeffer Hall                  email:   [hidden email]
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu
______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: loop compilation problem

luke-tierney
What is happening here is that the compiler makes a legitimate
optimization, but that runs into a long-standing issue, not related to
compilation, with certain assignment expressions in arguments. The
general issue will take some time to address; hopefully it will be
resolved in time for the next major release. In the interim, to avoid
the particular discrepancy reported here the compiler has been
adjusted to not optimize assignments within argument expressions.
This adjustment is in R-devel (r73161) and R-patched (r73162).

Best,

luke

On Thu, 24 Aug 2017, [hidden email] wrote:

> Thanks.
>
> Here is a simplified version:
>
> library(compiler)
> zero <- 0
> one <- 1
> expr <- quote((z <- zero + one) + (z <- z + 1))
> eval(compiler::compile(expr))
>
> Sill fix shortly.
>
> Best,
>
> luke
>
> On Thu, 24 Aug 2017, Lukas Stadler wrote:
>
>> Hi!
>>
>> We’ve seen a problem with the compiler in specific cases of matrix
> updates:
>>
>>> { m <- matrix(1:4, 2) ; z <- 0; for(i in 1) { m[z <- z + 1,z <- z + 1] <-
> 99; } ; m }
>>     [,1] [,2]
>> [1,]    1    3
>> [2,]    2   99
>>
>> Here, it modifies element [2,2], which is unexpected.
>> It behaves correct without the loop:
>>
>>> { m <- matrix(1:4, 2) ; z <- 0; m[z <- z + 1,z <- z + 1] <- 99 ; m }
>>     [,1] [,2]
>> [1,]    1   99
>> [2,]    2    4
>>
>> … and without the jit:
>>
>>> enableJIT(0)
>> [1] 3
>>> { m <- matrix(1:4, 2) ; z <- 0; for(i in 1) { m[z <- z + 1,z <- z + 1] <-
> 99; } ; m }
>>     [,1] [,2]
>> [1,]    1   99
>> [2,]    2    4
>>
>> I checked with "R Under development (unstable) (2017-08-23 r73116)”, and
> the problem is still there.
>>
>> - Lukas
>> ______________________________________________
>> [hidden email] mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>

--
Luke Tierney
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa                  Phone:             319-335-3386
Department of Statistics and        Fax:               319-335-3017
    Actuarial Science
241 Schaeffer Hall                  email:   [hidden email]
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu
______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel