Re: [Rd] From .Fortran to .Call?

2020-12-31 Thread Koenker, Roger W
Erin,  I think rumors of the deprecation of .Fortran are greatly exaggerated, 
but I’d welcome some confirmation of this from
someone in R core.  There is quite a lot of .Fortran usage  in packages, and 
perhaps even in base R...

> On Dec 26, 2020, at 7:57 PM, Erin Hodgess  wrote:
> 
> Is .Fortran going to be deprecated, please?  I have gotten amazing speed up 
> with geostatistics processes using HPC type tools.
> 
> Thanks 
> 
> On Sat, Dec 26, 2020 at 9:48 AM Koenker, Roger W  
> wrote:
> I’ve recoded a version of one of my quantile regression fitting functions to 
> use .C64 from dotCall64 rather than .Fortran.
> For a moderately large problem with n = 500,000 and p = 5, and solving for  
> 1:49/50 quantiles the new version shows
> a 3% speedup, although for smaller problems it is actually slower that the 
> .Fortran version.  So, I’m (provisionally) 
> unimpressed by the claims that .Fortran has a big “overhead” performance 
> penalty.  Compared to the(more than) an order of
> magnitude (base 10) improvement that moving from R to fortran produces,  3% 
> isn’t really worth the (admittedly) minimal
> additional coding effort.
> 
> > On Dec 24, 2020, at 12:39 AM, Balasubramanian Narasimhan 
> >  wrote:
> > 
> > Also, just came to know about dotcall64::.C64() (on CRAN) which allows for 
> > Fortran to be called using .Call().
> > 
> > -Naras
> > 
> > On 12/23/20 8:34 AM, Balasubramanian Narasimhan wrote:
> >> I think it should be pretty easy to fix up SUtools to use the .Call 
> >> instead of .Fortran following along the lines of
> >> 
> >> https://urldefense.com/v3/__https://github.com/wrathematics/Romp__;!!DZ3fjg!r3_sswU4ZHCe3huoGUy2boX-Vr7aUS-RaExyeh_Rsv8gvGiABcqzvOOKZinG4kC7RtA$
> >>  
> >> I too deal with a lot of f77 and so I will most likely finish it before 
> >> the new year, if not earlier. (Would welcome testers besides myself.)
> >> 
> >> Incidentally, any idea of what the performance hit is, quantitatively? I 
> >> confess I never paid attention to it myself as most Fortran code I use 
> >> seems pretty fast, i.e. glmnet.
> >> 
> >> -Naras
> >> 
> >> 
> >> On 12/23/20 3:57 AM, Koenker, Roger W wrote:
> >>> Thanks to all and best wishes for a better 2021.
> >>> 
> >>> Unfortunately I remain somewhat confused:
> >>> 
> >>> o  Bill reveals an elegant way to get from my rudimentary 
> >>> registration setup to
> >>> one that would explicitly type the C interface functions,
> >>> 
> >>> o Ivan seems to suggest that there would be no performance gain from 
> >>> doing this.
> >>> 
> >>> o  Naras’s pcLasso package does use the explicit C typing, but then 
> >>> uses .Fortran
> >>> not .Call.
> >>> 
> >>> o  Avi uses .Call and cites the Romp package 
> >>> https://urldefense.com/v3/__https://github.com/wrathematics/Romp__;!!DZ3fjg!r3_sswU4ZHCe3huoGUy2boX-Vr7aUS-RaExyeh_Rsv8gvGiABcqzvOOKZinG4kC7RtA$
> >>>  where it is asserted that "there is a (nearly) deprecated interface 
> >>> .Fortran() which you
> >>> should not use due to its large performance overhead.”
> >>> 
> >>> As the proverbial naive R (ab)user I’m left wondering:
> >>> 
> >>> o  if I updated my quantreg_init.c file in accordance with Bill’s 
> >>> suggestion could I
> >>> then simply change my .Fortran calls to .Call?
> >>> 
> >>> o  and if so, do I need to include ALL the fortran subroutines in my 
> >>> src directory
> >>> or only the ones called from R?
> >>> 
> >>> o  and in either case could I really expect to see a significant 
> >>> performance gain?
> >>> 
> >>> Finally, perhaps I should stipulate that my fortran is strictly f77, so 
> >>> no modern features
> >>> are in play, indeed most of the code is originally written in ratfor, 
> >>> Brian Kernighan’s
> >>> dialect from ancient times at Bell Labs.
> >>> 
> >>> Again,  thanks to all for any advice,
> >>> Roger
> >>> 
> >>> 
>  On Dec 23, 2020, at 1:11 AM, Avraham Adler  
>  wrote:
>  
>  Hello, Ivan.
>  
>  I used .Call instead of .Fortran in the Delaporte package [1]. What
>  helped me out a lot was Drew Schmidt's Romp examples and descriptions
>  [2]. If you are more comfortable with the older Fortran interface,
>  Tomasz Kalinowski has a package which uses Fortran 2018 more
>  efficiently [3]. I haven't tried this last in practice, however.
>  
>  Hope that helps,
>  
>  Avi
>  
>  [1] 
>  https://urldefense.com/v3/__https://CRAN.R-project.org/package=Delaporte__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPITBN5NK8$
>  [2] 
>  https://urldefense.com/v3/__https://github.com/wrathematics/Romp__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPISF5aCYs$
>  [3] 
>  https://urldefense.com/v3/__https://github.com/t-kalinowski/RFI__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPIbwXmXqY$
>  
>  Tomasz Kalinowski
>  
>  
>  
>  On Tue, Dec 22, 2020 at 7:24 

Re: [Rd] From .Fortran to .Call?

2020-12-31 Thread Avraham Adler
I’ve tried recoding some of Delaporte to use the .Fortran interface and I
don’t know what I’m doing wrong but it either doesn’t work or crashes my R
instance completely.

Avi

On Sat, Dec 26, 2020 at 11:48 AM Koenker, Roger W 
wrote:

> I’ve recoded a version of one of my quantile regression fitting functions
> to use .C64 from dotCall64 rather than .Fortran.
> For a moderately large problem with n = 500,000 and p = 5, and solving
> for  1:49/50 quantiles the new version shows
> a 3% speedup, although for smaller problems it is actually slower that the
> .Fortran version.  So, I’m (provisionally)
> unimpressed by the claims that .Fortran has a big “overhead” performance
> penalty.  Compared to the(more than) an order of
> magnitude (base 10) improvement that moving from R to fortran produces,
> 3% isn’t really worth the (admittedly) minimal
> additional coding effort.
>
> > On Dec 24, 2020, at 12:39 AM, Balasubramanian Narasimhan <
> na...@stanford.edu> wrote:
> >
> > Also, just came to know about dotcall64::.C64() (on CRAN) which allows
> for Fortran to be called using .Call().
> >
> > -Naras
> >
> > On 12/23/20 8:34 AM, Balasubramanian Narasimhan wrote:
> >> I think it should be pretty easy to fix up SUtools to use the .Call
> instead of .Fortran following along the lines of
> >>
> >>
> https://urldefense.com/v3/__https://github.com/wrathematics/Romp__;!!DZ3fjg!r3_sswU4ZHCe3huoGUy2boX-Vr7aUS-RaExyeh_Rsv8gvGiABcqzvOOKZinG4kC7RtA$
> >> I too deal with a lot of f77 and so I will most likely finish it before
> the new year, if not earlier. (Would welcome testers besides myself.)
> >>
> >> Incidentally, any idea of what the performance hit is, quantitatively?
> I confess I never paid attention to it myself as most Fortran code I use
> seems pretty fast, i.e. glmnet.
> >>
> >> -Naras
> >>
> >>
> >> On 12/23/20 3:57 AM, Koenker, Roger W wrote:
> >>> Thanks to all and best wishes for a better 2021.
> >>>
> >>> Unfortunately I remain somewhat confused:
> >>>
> >>> o  Bill reveals an elegant way to get from my rudimentary
> registration setup to
> >>> one that would explicitly type the C interface functions,
> >>>
> >>> o Ivan seems to suggest that there would be no performance gain
> from doing this.
> >>>
> >>> o  Naras’s pcLasso package does use the explicit C typing, but
> then uses .Fortran
> >>> not .Call.
> >>>
> >>> o  Avi uses .Call and cites the Romp package
> https://urldefense.com/v3/__https://github.com/wrathematics/Romp__;!!DZ3fjg!r3_sswU4ZHCe3huoGUy2boX-Vr7aUS-RaExyeh_Rsv8gvGiABcqzvOOKZinG4kC7RtA$
>where it is asserted that "there is a (nearly) deprecated interface
> .Fortran() which you
> >>> should not use due to its large performance overhead.”
> >>>
> >>> As the proverbial naive R (ab)user I’m left wondering:
> >>>
> >>> o  if I updated my quantreg_init.c file in accordance with Bill’s
> suggestion could I
> >>> then simply change my .Fortran calls to .Call?
> >>>
> >>> o  and if so, do I need to include ALL the fortran subroutines in
> my src directory
> >>> or only the ones called from R?
> >>>
> >>> o  and in either case could I really expect to see a significant
> performance gain?
> >>>
> >>> Finally, perhaps I should stipulate that my fortran is strictly f77,
> so no modern features
> >>> are in play, indeed most of the code is originally written in ratfor,
> Brian Kernighan’s
> >>> dialect from ancient times at Bell Labs.
> >>>
> >>> Again,  thanks to all for any advice,
> >>> Roger
> >>>
> >>>
>  On Dec 23, 2020, at 1:11 AM, Avraham Adler 
> wrote:
> 
>  Hello, Ivan.
> 
>  I used .Call instead of .Fortran in the Delaporte package [1]. What
>  helped me out a lot was Drew Schmidt's Romp examples and descriptions
>  [2]. If you are more comfortable with the older Fortran interface,
>  Tomasz Kalinowski has a package which uses Fortran 2018 more
>  efficiently [3]. I haven't tried this last in practice, however.
> 
>  Hope that helps,
> 
>  Avi
> 
>  [1]
> https://urldefense.com/v3/__https://CRAN.R-project.org/package=Delaporte__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPITBN5NK8$
>  [2]
> https://urldefense.com/v3/__https://github.com/wrathematics/Romp__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPISF5aCYs$
>  [3]
> https://urldefense.com/v3/__https://github.com/t-kalinowski/RFI__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPIbwXmXqY$
> 
>  Tomasz Kalinowski
> 
> 
> 
>  On Tue, Dec 22, 2020 at 7:24 PM Balasubramanian Narasimhan
>   wrote:
> > To deal with such Fortran issues in several packages I deal with, I
> > wrote the SUtools package (
> https://urldefense.com/v3/__https://github.com/bnaras/SUtools__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPIJ5BbDwA$
> ) that you
> > can try.  The current version generates the registration assumi

Re: [Rd] From .Fortran to .Call?

2020-12-31 Thread Erin Hodgess
Is .Fortran going to be deprecated, please?  I have gotten amazing speed up
with geostatistics processes using HPC type tools.

Thanks

On Sat, Dec 26, 2020 at 9:48 AM Koenker, Roger W 
wrote:

> I’ve recoded a version of one of my quantile regression fitting functions
> to use .C64 from dotCall64 rather than .Fortran.
> For a moderately large problem with n = 500,000 and p = 5, and solving
> for  1:49/50 quantiles the new version shows
> a 3% speedup, although for smaller problems it is actually slower that the
> .Fortran version.  So, I’m (provisionally)
> unimpressed by the claims that .Fortran has a big “overhead” performance
> penalty.  Compared to the(more than) an order of
> magnitude (base 10) improvement that moving from R to fortran produces,
> 3% isn’t really worth the (admittedly) minimal
> additional coding effort.
>
> > On Dec 24, 2020, at 12:39 AM, Balasubramanian Narasimhan <
> na...@stanford.edu> wrote:
> >
> > Also, just came to know about dotcall64::.C64() (on CRAN) which allows
> for Fortran to be called using .Call().
> >
> > -Naras
> >
> > On 12/23/20 8:34 AM, Balasubramanian Narasimhan wrote:
> >> I think it should be pretty easy to fix up SUtools to use the .Call
> instead of .Fortran following along the lines of
> >>
> >>
> https://urldefense.com/v3/__https://github.com/wrathematics/Romp__;!!DZ3fjg!r3_sswU4ZHCe3huoGUy2boX-Vr7aUS-RaExyeh_Rsv8gvGiABcqzvOOKZinG4kC7RtA$
> >> I too deal with a lot of f77 and so I will most likely finish it before
> the new year, if not earlier. (Would welcome testers besides myself.)
> >>
> >> Incidentally, any idea of what the performance hit is, quantitatively?
> I confess I never paid attention to it myself as most Fortran code I use
> seems pretty fast, i.e. glmnet.
> >>
> >> -Naras
> >>
> >>
> >> On 12/23/20 3:57 AM, Koenker, Roger W wrote:
> >>> Thanks to all and best wishes for a better 2021.
> >>>
> >>> Unfortunately I remain somewhat confused:
> >>>
> >>> o  Bill reveals an elegant way to get from my rudimentary
> registration setup to
> >>> one that would explicitly type the C interface functions,
> >>>
> >>> o Ivan seems to suggest that there would be no performance gain
> from doing this.
> >>>
> >>> o  Naras’s pcLasso package does use the explicit C typing, but
> then uses .Fortran
> >>> not .Call.
> >>>
> >>> o  Avi uses .Call and cites the Romp package
> https://urldefense.com/v3/__https://github.com/wrathematics/Romp__;!!DZ3fjg!r3_sswU4ZHCe3huoGUy2boX-Vr7aUS-RaExyeh_Rsv8gvGiABcqzvOOKZinG4kC7RtA$
>where it is asserted that "there is a (nearly) deprecated interface
> .Fortran() which you
> >>> should not use due to its large performance overhead.”
> >>>
> >>> As the proverbial naive R (ab)user I’m left wondering:
> >>>
> >>> o  if I updated my quantreg_init.c file in accordance with Bill’s
> suggestion could I
> >>> then simply change my .Fortran calls to .Call?
> >>>
> >>> o  and if so, do I need to include ALL the fortran subroutines in
> my src directory
> >>> or only the ones called from R?
> >>>
> >>> o  and in either case could I really expect to see a significant
> performance gain?
> >>>
> >>> Finally, perhaps I should stipulate that my fortran is strictly f77,
> so no modern features
> >>> are in play, indeed most of the code is originally written in ratfor,
> Brian Kernighan’s
> >>> dialect from ancient times at Bell Labs.
> >>>
> >>> Again,  thanks to all for any advice,
> >>> Roger
> >>>
> >>>
>  On Dec 23, 2020, at 1:11 AM, Avraham Adler 
> wrote:
> 
>  Hello, Ivan.
> 
>  I used .Call instead of .Fortran in the Delaporte package [1]. What
>  helped me out a lot was Drew Schmidt's Romp examples and descriptions
>  [2]. If you are more comfortable with the older Fortran interface,
>  Tomasz Kalinowski has a package which uses Fortran 2018 more
>  efficiently [3]. I haven't tried this last in practice, however.
> 
>  Hope that helps,
> 
>  Avi
> 
>  [1]
> https://urldefense.com/v3/__https://CRAN.R-project.org/package=Delaporte__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPITBN5NK8$
>  [2]
> https://urldefense.com/v3/__https://github.com/wrathematics/Romp__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPISF5aCYs$
>  [3]
> https://urldefense.com/v3/__https://github.com/t-kalinowski/RFI__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPIbwXmXqY$
> 
>  Tomasz Kalinowski
> 
> 
> 
>  On Tue, Dec 22, 2020 at 7:24 PM Balasubramanian Narasimhan
>   wrote:
> > To deal with such Fortran issues in several packages I deal with, I
> > wrote the SUtools package (
> https://urldefense.com/v3/__https://github.com/bnaras/SUtools__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPIJ5BbDwA$
> ) that you
> > can try.  The current version generates the registration assuming
> > implicit Fortran naming conven

Re: [Rd] From .Fortran to .Call?

2020-12-31 Thread Erin Hodgess
Will there be any interest in using Coarrays Fortran, please?

Thanks,
Erin

Erin Hodgess, PhD
mailto: erinm.hodg...@gmail.com


On Wed, Dec 23, 2020 at 10:29 AM Martin Maechler 
wrote:

> > Balasubramanian Narasimhan
> > on Wed, 23 Dec 2020 08:34:40 -0800 writes:
>
> > I think it should be pretty easy to fix up SUtools to use the .Call
> > instead of .Fortran following along the lines of
>
> > https://github.com/wrathematics/Romp
>
> > I too deal with a lot of f77 and so I will most likely finish it
> before
> > the new year, if not earlier. (Would welcome testers besides myself.)
>
> > Incidentally, any idea of what the performance hit is,
> quantitatively? I
> > confess I never paid attention to it myself as most Fortran code I
> use
> > seems pretty fast, i.e. glmnet.
>
> > -Naras
>
> well, glmnet's src/*.f  code seems closer to assembly than to
> even old fortran 77 style ..
> which would not change when calling it via .Call() ...
> ;-)
>
> The performance "hit" of using .Fortran is probably almost only
> from the fact .C() and .Fortran() now compulsorily *copy* their
> arguments, whereas with .Call() you are enabled to shoot
> yourself in both feet .. ;-)
>
> Martin
>
>
>
> > On 12/23/20 3:57 AM, Koenker, Roger W wrote:
> >> Thanks to all and best wishes for a better 2021.
> >>
> >> Unfortunately I remain somewhat confused:
> >>
> >> o  Bill reveals an elegant way to get from my rudimentary
> registration setup to
> >> one that would explicitly type the C interface functions,
> >>
> >> o Ivan seems to suggest that there would be no performance gain
> from doing this.
> >>
> >> o  Naras’s pcLasso package does use the explicit C typing, but then
> uses .Fortran
> >> not .Call.
> >>
> >> o  Avi uses .Call and cites the Romp package
> https://github.com/wrathematics/Romp
> >> where it is asserted that "there is a (nearly) deprecated interface
> .Fortran() which you
> >> should not use due to its large performance overhead.”
> >>
> >> As the proverbial naive R (ab)user I’m left wondering:
> >>
> >> o  if I updated my quantreg_init.c file in accordance with Bill’s
> suggestion could I
> >> then simply change my .Fortran calls to .Call?
> >>
> >> o  and if so, do I need to include ALL the fortran subroutines in
> my src directory
> >> or only the ones called from R?
> >>
> >> o  and in either case could I really expect to see a significant
> performance gain?
> >>
> >> Finally, perhaps I should stipulate that my fortran is strictly
> f77, so no modern features
> >> are in play, indeed most of the code is originally written in
> ratfor, Brian Kernighan’s
> >> dialect from ancient times at Bell Labs.
> >>
> >> Again,  thanks to all for any advice,
> >> Roger
> >>
> >>
> >>> On Dec 23, 2020, at 1:11 AM, Avraham Adler <
> avraham.ad...@gmail.com> wrote:
> >>>
> >>> Hello, Ivan.
> >>>
> >>> I used .Call instead of .Fortran in the Delaporte package [1]. What
> >>> helped me out a lot was Drew Schmidt's Romp examples and
> descriptions
> >>> [2]. If you are more comfortable with the older Fortran interface,
> >>> Tomasz Kalinowski has a package which uses Fortran 2018 more
> >>> efficiently [3]. I haven't tried this last in practice, however.
> >>>
> >>> Hope that helps,
> >>>
> >>> Avi
> >>>
> >>> [1]
> https://urldefense.com/v3/__https://CRAN.R-project.org/package=Delaporte__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPITBN5NK8$
> >>> [2]
> https://urldefense.com/v3/__https://github.com/wrathematics/Romp__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPISF5aCYs$
> >>> [3]
> https://urldefense.com/v3/__https://github.com/t-kalinowski/RFI__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPIbwXmXqY$
> >>>
> >>> Tomasz Kalinowski
> >>>
> >>>
> >>>
> >>> On Tue, Dec 22, 2020 at 7:24 PM Balasubramanian Narasimhan
> >>>  wrote:
>  To deal with such Fortran issues in several packages I deal with,
> I
>  wrote the SUtools package (
> https://urldefense.com/v3/__https://github.com/bnaras/SUtools__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPIJ5BbDwA$
> ) that you
>  can try.  The current version generates the registration assuming
>  implicit Fortran naming conventions though. (I've been meaning to
>  upgrade it to use the gfortran -fc-prototypes-external flag which
> should
>  be easy; I might just finish that during these holidays.)
> 
>  There's a vignette as well:
> 
> https://urldefense.com/v3/__https://bnaras.github.io/SUtools/articles/SUtools.html__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPITq9-Quc$
> 
>  -Naras
> 
> 
>  

Re: [Rd] From .Fortran to .Call?

2020-12-31 Thread Bill Dunlap
As for speed, I suspect much of the speedup when converting from .Fortran
to .Call will be due to checking the validity of the arguments (lengths,
types, ranges, etc.) in C code instead of in R code.  There can also be
less copying of the arguments and the returned objects will tend to be
smaller.

-Bill

On Wed, Dec 23, 2020 at 8:27 AM Bill Dunlap 
wrote:

>As the proverbial naive R (ab)user I’m left wondering:
>
> o  if I updated my quantreg_init.c file in accordance with Bill’s
> suggestion could I
> then simply change my .Fortran calls to .Call?
>
> No.  .Call(C_func, arg1, arg2) expects C_func's arguments to all be SEXP*
> (pointers to R objects), never the double* or the like that .Fortran
> expects.
>
> -Bill
>
> On Wed, Dec 23, 2020 at 3:58 AM Koenker, Roger W 
> wrote:
>
>> Thanks to all and best wishes for a better 2021.
>>
>> Unfortunately I remain somewhat confused:
>>
>> o  Bill reveals an elegant way to get from my rudimentary
>> registration setup to
>> one that would explicitly type the C interface functions,
>>
>> o Ivan seems to suggest that there would be no performance gain
>> from doing this.
>>
>> o  Naras’s pcLasso package does use the explicit C typing, but
>> then uses .Fortran
>> not .Call.
>>
>> o  Avi uses .Call and cites the Romp package
>> https://github.com/wrathematics/Romp
>> where it is asserted that "there is a (nearly) deprecated
>> interface .Fortran() which you
>> should not use due to its large performance overhead.”
>>
>> As the proverbial naive R (ab)user I’m left wondering:
>>
>> o  if I updated my quantreg_init.c file in accordance with Bill’s
>> suggestion could I
>> then simply change my .Fortran calls to .Call?
>>
>> o  and if so, do I need to include ALL the fortran subroutines in
>> my src directory
>> or only the ones called from R?
>>
>> o  and in either case could I really expect to see a significant
>> performance gain?
>>
>> Finally, perhaps I should stipulate that my fortran is strictly f77, so
>> no modern features
>> are in play, indeed most of the code is originally written in ratfor,
>> Brian Kernighan’s
>> dialect from ancient times at Bell Labs.
>>
>> Again,  thanks to all for any advice,
>> Roger
>>
>>
>> > On Dec 23, 2020, at 1:11 AM, Avraham Adler 
>> wrote:
>> >
>> > Hello, Ivan.
>> >
>> > I used .Call instead of .Fortran in the Delaporte package [1]. What
>> > helped me out a lot was Drew Schmidt's Romp examples and descriptions
>> > [2]. If you are more comfortable with the older Fortran interface,
>> > Tomasz Kalinowski has a package which uses Fortran 2018 more
>> > efficiently [3]. I haven't tried this last in practice, however.
>> >
>> > Hope that helps,
>> >
>> > Avi
>> >
>> > [1]
>> https://urldefense.com/v3/__https://CRAN.R-project.org/package=Delaporte__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPITBN5NK8$
>> > [2]
>> https://urldefense.com/v3/__https://github.com/wrathematics/Romp__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPISF5aCYs$
>> > [3]
>> https://urldefense.com/v3/__https://github.com/t-kalinowski/RFI__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPIbwXmXqY$
>> >
>> > Tomasz Kalinowski
>> >
>> >
>> >
>> > On Tue, Dec 22, 2020 at 7:24 PM Balasubramanian Narasimhan
>> >  wrote:
>> >>
>> >> To deal with such Fortran issues in several packages I deal with, I
>> >> wrote the SUtools package (
>> https://urldefense.com/v3/__https://github.com/bnaras/SUtools__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPIJ5BbDwA$
>> ) that you
>> >> can try.  The current version generates the registration assuming
>> >> implicit Fortran naming conventions though. (I've been meaning to
>> >> upgrade it to use the gfortran -fc-prototypes-external flag which
>> should
>> >> be easy; I might just finish that during these holidays.)
>> >>
>> >> There's a vignette as well:
>> >>
>> https://urldefense.com/v3/__https://bnaras.github.io/SUtools/articles/SUtools.html__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPITq9-Quc$
>> >>
>> >> -Naras
>> >>
>> >>
>> >> On 12/19/20 9:53 AM, Ivan Krylov wrote:
>> >>> On Sat, 19 Dec 2020 17:04:59 +
>> >>> "Koenker, Roger W"  wrote:
>> >>>
>>  There are comments in various places, including R-extensions §5.4
>>  suggesting that .Fortran is (nearly) deprecated and hinting that use
>>  of .Call is more efficient and now preferred for packages.
>> >>> My understanding of §5.4 and 5.5 is that explicit routine registration
>> >>> is what's important for efficiency, and your package already does that
>> >>> (i.e. calls R_registerRoutines()). The only two things left to add
>> >>> would be types (REALSXP/INTSXP/...) and styles (R_ARG_IN,
>> >>> R_ARG_OUT/...) of the arguments of each subroutine.
>> >>>
>> >>> Switching to .Call makes sense if you want to change the inter

Re: [Rd] From .Fortran to .Call?

2020-12-31 Thread Bill Dunlap
   As the proverbial naive R (ab)user I’m left wondering:

o  if I updated my quantreg_init.c file in accordance with Bill’s
suggestion could I
then simply change my .Fortran calls to .Call?

No.  .Call(C_func, arg1, arg2) expects C_func's arguments to all be SEXP*
(pointers to R objects), never the double* or the like that .Fortran
expects.

-Bill

On Wed, Dec 23, 2020 at 3:58 AM Koenker, Roger W 
wrote:

> Thanks to all and best wishes for a better 2021.
>
> Unfortunately I remain somewhat confused:
>
> o  Bill reveals an elegant way to get from my rudimentary
> registration setup to
> one that would explicitly type the C interface functions,
>
> o Ivan seems to suggest that there would be no performance gain
> from doing this.
>
> o  Naras’s pcLasso package does use the explicit C typing, but
> then uses .Fortran
> not .Call.
>
> o  Avi uses .Call and cites the Romp package
> https://github.com/wrathematics/Romp
> where it is asserted that "there is a (nearly) deprecated
> interface .Fortran() which you
> should not use due to its large performance overhead.”
>
> As the proverbial naive R (ab)user I’m left wondering:
>
> o  if I updated my quantreg_init.c file in accordance with Bill’s
> suggestion could I
> then simply change my .Fortran calls to .Call?
>
> o  and if so, do I need to include ALL the fortran subroutines in
> my src directory
> or only the ones called from R?
>
> o  and in either case could I really expect to see a significant
> performance gain?
>
> Finally, perhaps I should stipulate that my fortran is strictly f77, so no
> modern features
> are in play, indeed most of the code is originally written in ratfor,
> Brian Kernighan’s
> dialect from ancient times at Bell Labs.
>
> Again,  thanks to all for any advice,
> Roger
>
>
> > On Dec 23, 2020, at 1:11 AM, Avraham Adler 
> wrote:
> >
> > Hello, Ivan.
> >
> > I used .Call instead of .Fortran in the Delaporte package [1]. What
> > helped me out a lot was Drew Schmidt's Romp examples and descriptions
> > [2]. If you are more comfortable with the older Fortran interface,
> > Tomasz Kalinowski has a package which uses Fortran 2018 more
> > efficiently [3]. I haven't tried this last in practice, however.
> >
> > Hope that helps,
> >
> > Avi
> >
> > [1]
> https://urldefense.com/v3/__https://CRAN.R-project.org/package=Delaporte__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPITBN5NK8$
> > [2]
> https://urldefense.com/v3/__https://github.com/wrathematics/Romp__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPISF5aCYs$
> > [3]
> https://urldefense.com/v3/__https://github.com/t-kalinowski/RFI__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPIbwXmXqY$
> >
> > Tomasz Kalinowski
> >
> >
> >
> > On Tue, Dec 22, 2020 at 7:24 PM Balasubramanian Narasimhan
> >  wrote:
> >>
> >> To deal with such Fortran issues in several packages I deal with, I
> >> wrote the SUtools package (
> https://urldefense.com/v3/__https://github.com/bnaras/SUtools__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPIJ5BbDwA$
> ) that you
> >> can try.  The current version generates the registration assuming
> >> implicit Fortran naming conventions though. (I've been meaning to
> >> upgrade it to use the gfortran -fc-prototypes-external flag which should
> >> be easy; I might just finish that during these holidays.)
> >>
> >> There's a vignette as well:
> >>
> https://urldefense.com/v3/__https://bnaras.github.io/SUtools/articles/SUtools.html__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPITq9-Quc$
> >>
> >> -Naras
> >>
> >>
> >> On 12/19/20 9:53 AM, Ivan Krylov wrote:
> >>> On Sat, 19 Dec 2020 17:04:59 +
> >>> "Koenker, Roger W"  wrote:
> >>>
>  There are comments in various places, including R-extensions §5.4
>  suggesting that .Fortran is (nearly) deprecated and hinting that use
>  of .Call is more efficient and now preferred for packages.
> >>> My understanding of §5.4 and 5.5 is that explicit routine registration
> >>> is what's important for efficiency, and your package already does that
> >>> (i.e. calls R_registerRoutines()). The only two things left to add
> >>> would be types (REALSXP/INTSXP/...) and styles (R_ARG_IN,
> >>> R_ARG_OUT/...) of the arguments of each subroutine.
> >>>
> >>> Switching to .Call makes sense if you want to change the interface of
> >>> your native subroutines to accept arbitrary heavily structured SEXPs
> >>> (and switching to .External could be useful if you wanted to play with
> >>> evaluation of the arguments).
> >>>
> >>
> >> __
> >> R-devel@r-project.org mailing list
> >>
> https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-devel__;!!DZ3fjg!s1-ihrZ9DPUtXpxdIpJPA1VedpZFt12Ahmn4CycOmile_uSahFZnJPn_5KPIr_nqkqg$
>
> ___

[Rd] In function isum in summary.c, k should be R_xlen_t

2020-12-31 Thread Suharto Anggono Suharto Anggono via R-devel


In summary.c, in function 'isum', the loop is 'ITERATE_BY_REGION' that contains 
'for' loop
for (int k = 0; k < nbatch; k++)
It is since SVN revision 73445, in released R since version 3.5.0.
Previously, the loop is
for (R_xlen_t i = 0; i < n; i++)

Inside 'ITERATE_BY_REGION', the type of the index, 'k', should still be 
'R_xlen_t' as previously. If 'sx' is a regular vector (not ALTREP), data 
pointer is taken and 'nbatch' is the length of the vector, like without 
'ITERATE_BY_REGION'. With 64-bit R, it is possible that the vector is a long 
vector. In that case, correct iteration should reach index outside the range of 
'int'.

However, I haven't found an example in 64-bit R of wrong behavior of
sum(x)
for 'x' with storage mode "integer" and length 2^31 or more.

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] In function isum in summary.c, k should be R_xlen_t

2020-12-31 Thread Jan Gorecki
Don't know this piece well but I am guessing that you haven't found an
example because the iterator is going up to the length of a vector
anymore but only to the number of batches, which is unlikely to be
more than 2^31.

On Tue, Dec 22, 2020 at 12:30 PM Suharto Anggono Suharto Anggono via
R-devel  wrote:
>
>
> In summary.c, in function 'isum', the loop is 'ITERATE_BY_REGION' that 
> contains 'for' loop
> for (int k = 0; k < nbatch; k++)
> It is since SVN revision 73445, in released R since version 3.5.0.
> Previously, the loop is
> for (R_xlen_t i = 0; i < n; i++)
>
> Inside 'ITERATE_BY_REGION', the type of the index, 'k', should still be 
> 'R_xlen_t' as previously. If 'sx' is a regular vector (not ALTREP), data 
> pointer is taken and 'nbatch' is the length of the vector, like without 
> 'ITERATE_BY_REGION'. With 64-bit R, it is possible that the vector is a long 
> vector. In that case, correct iteration should reach index outside the range 
> of 'int'.
>
> However, I haven't found an example in 64-bit R of wrong behavior of
> sum(x)
> for 'x' with storage mode "integer" and length 2^31 or more.
>
> __
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel