system.time provides inaccurate sys.child (PR#14210)

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

system.time provides inaccurate sys.child (PR#14210)

manuel.lopez-ibanez
Full_Name: Manuel López-Ibáñez
Version: R version 2.6.2 (2008-02-08)
OS: linux-gnu
Submission from: (NULL) (164.15.10.156)


This is only relevant for CPU intensive child processes. Otherwise, the problem
is not obvious.

Therefore, we need a CPU intensive program like this one:

/************************************/
/*** Compile with: gcc -o timer-test -O0 timer-test.c -lm */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double alpha, beta;
int size = 1000;

#define WORK_create_matrix(TYPEOFMATRIX)                \
                                                        \
TYPEOFMATRIX ** m_create_##TYPEOFMATRIX##_matrix (      \
int dim1, int dim2, int line, const char*file)          \
{                                                       \
    TYPEOFMATRIX **p;                                   \
    int i;                                              \
                                                        \
    p = malloc (sizeof(TYPEOFMATRIX) * dim1 * dim2      \
                + sizeof(TYPEOFMATRIX *) * dim1 );      \
    if (p == NULL) {                                    \
        fprintf(stderr, "cannot create " #TYPEOFMATRIX  \
                " matrix of size (%d x %d): "           \
                "see line %d of file %s\n",             \
                dim1, dim2, line, file);                \
        exit(1);                                        \
    }                                                   \
    for (i = 0; i < dim1; i++)                          \
        p[i] = (TYPEOFMATRIX *) (p + dim1) + i * dim2;  \
    return p;                                           \
}                                                      

WORK_create_matrix(int)
WORK_create_matrix(double)
#undef WORK_create_matrix
#define create_double_matrix(dim1,dim2)\
    m_create_double_matrix(dim1,dim2,__LINE__,__FILE__)


int main(int argc, char *argv[])
{
    double **matrix1 = create_double_matrix(size, size);
    double **matrix2 = create_double_matrix(size, size);
    int iterations = 0;
    int i,j;
    double iter_limit = 100;
    alpha = rand();
    beta = rand();

    while (iterations < iter_limit) {
        for (i = 0; i < size; i++) {
            for (j = 0; j < size; j++) {
                if (i == j) continue;
                matrix2[i][j] = pow(matrix1[i][j], alpha)
                    * pow(matrix2[j][i], beta);
                matrix1[j][i] = matrix2[i][j];
            }
        }
        iterations++;
    }

    printf("Iterations = %d\n", iterations);
    return 0;
}
/************************************/

Then in R evaluate:

> print.default (system.time (system(paste ("time", "bash -c './timer-test 100 >
/dev/null'"))))
10.77user 0.02system 0:10.81elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+4574minor)pagefaults 0swaps
 user.self   sys.self    elapsed user.child  sys.child
     0.000      0.000     10.818     10.777     10.777
attr(,"class")
[1] "proc_time"

Expected: the sys.child time should be 0.02.

> version
               _                          
platform       i486-pc-linux-gnu          
arch           i486                        
os             linux-gnu                  
system         i486, linux-gnu            
status                                    
major          2                          
minor          6.2                        
year           2008                        
month          02                          
day            08                          
svn rev        44383                      
language       R                          
version.string R version 2.6.2 (2008-02-08)

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

Re: system.time provides inaccurate sys.child (PR#14210)

Henrik Bengtsson
FYI,

you're much more likely to get a response/see actions on this if you
report issues using the most recent stable version (R v2.10.1) and/or
even the developers version (R v2.11.0).  You're current version is,
as you see, more than 2 years old.  It is likely that the threshold to
compare the code of your version with the latest one etc is to large
for someone to be bothered.

/Henrik

On Wed, Feb 10, 2010 at 2:45 PM,  <[hidden email]> wrote:

> Full_Name: Manuel López-Ibáñez
> Version: R version 2.6.2 (2008-02-08)
> OS: linux-gnu
> Submission from: (NULL) (164.15.10.156)
>
>
> This is only relevant for CPU intensive child processes. Otherwise, the problem
> is not obvious.
>
> Therefore, we need a CPU intensive program like this one:
>
> /************************************/
> /*** Compile with: gcc -o timer-test -O0 timer-test.c -lm */
> #include <stdio.h>
> #include <stdlib.h>
> #include <math.h>
>
> double alpha, beta;
> int size = 1000;
>
> #define WORK_create_matrix(TYPEOFMATRIX)                \
>                                                        \
> TYPEOFMATRIX ** m_create_##TYPEOFMATRIX##_matrix (      \
> int dim1, int dim2, int line, const char*file)          \
> {                                                       \
>    TYPEOFMATRIX **p;                                   \
>    int i;                                              \
>                                                        \
>    p = malloc (sizeof(TYPEOFMATRIX) * dim1 * dim2      \
>                + sizeof(TYPEOFMATRIX *) * dim1 );      \
>    if (p == NULL) {                                    \
>        fprintf(stderr, "cannot create " #TYPEOFMATRIX  \
>                " matrix of size (%d x %d): "           \
>                "see line %d of file %s\n",             \
>                dim1, dim2, line, file);                \
>        exit(1);                                        \
>    }                                                   \
>    for (i = 0; i < dim1; i++)                          \
>        p[i] = (TYPEOFMATRIX *) (p + dim1) + i * dim2;  \
>    return p;                                           \
> }
>
> WORK_create_matrix(int)
> WORK_create_matrix(double)
> #undef WORK_create_matrix
> #define create_double_matrix(dim1,dim2)\
>    m_create_double_matrix(dim1,dim2,__LINE__,__FILE__)
>
>
> int main(int argc, char *argv[])
> {
>    double **matrix1 = create_double_matrix(size, size);
>    double **matrix2 = create_double_matrix(size, size);
>    int iterations = 0;
>    int i,j;
>    double iter_limit = 100;
>    alpha = rand();
>    beta = rand();
>
>    while (iterations < iter_limit) {
>        for (i = 0; i < size; i++) {
>            for (j = 0; j < size; j++) {
>                if (i == j) continue;
>                matrix2[i][j] = pow(matrix1[i][j], alpha)
>                    * pow(matrix2[j][i], beta);
>                matrix1[j][i] = matrix2[i][j];
>            }
>        }
>        iterations++;
>    }
>
>    printf("Iterations = %d\n", iterations);
>    return 0;
> }
> /************************************/
>
> Then in R evaluate:
>
>> print.default (system.time (system(paste ("time", "bash -c './timer-test 100 >
> /dev/null'"))))
> 10.77user 0.02system 0:10.81elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
> 0inputs+0outputs (0major+4574minor)pagefaults 0swaps
>  user.self   sys.self    elapsed user.child  sys.child
>     0.000      0.000     10.818     10.777     10.777
> attr(,"class")
> [1] "proc_time"
>
> Expected: the sys.child time should be 0.02.
>
>> version
>               _
> platform       i486-pc-linux-gnu
> arch           i486
> os             linux-gnu
> system         i486, linux-gnu
> status
> major          2
> minor          6.2
> year           2008
> month          02
> day            08
> svn rev        44383
> language       R
> version.string R version 2.6.2 (2008-02-08)
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

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

Re: system.time provides inaccurate sys.child (PR#14210)

Peter Dalgaard
Henrik Bengtsson wrote:

> FYI,
>
> you're much more likely to get a response/see actions on this if you
> report issues using the most recent stable version (R v2.10.1) and/or
> even the developers version (R v2.11.0).  You're current version is,
> as you see, more than 2 years old.  It is likely that the threshold to
> compare the code of your version with the latest one etc is to large
> for someone to be bothered.
>
> /Henrik

It was fixed in r-devel same day, though. The message threading is just
a bit messed up.

--
    O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B
   c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
  (*) \(*) -- University of Copenhagen   Denmark      Ph:  (+45) 35327918
~~~~~~~~~~ - ([hidden email])              FAX: (+45) 35327907

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

Re: system.time provides inaccurate sys.child (PR#14210)

Peter Dalgaard
In reply to this post by manuel.lopez-ibanez
Henrik Bengtsson wrote:

> FYI,
>
> you're much more likely to get a response/see actions on this if you
> report issues using the most recent stable version (R v2.10.1) and/or
> even the developers version (R v2.11.0).  You're current version is,
> as you see, more than 2 years old.  It is likely that the threshold to
> compare the code of your version with the latest one etc is to large
> for someone to be bothered.
>
> /Henrik

It was fixed in r-devel same day, though. The message threading is just
a bit messed up.

--
    O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B
   c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
  (*) \(*) -- University of Copenhagen   Denmark      Ph:  (+45) 35327918
~~~~~~~~~~ - ([hidden email])              FAX: (+45) 35327907

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel