manuel.lopez-ibanez at ulb.ac.be
2010-Feb-10 13:45 UTC
[Rd] system.time provides inaccurate sys.child (PR#14210)
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)
Henrik Bengtsson
2010-Feb-21 09:40 UTC
[Rd] system.time provides inaccurate sys.child (PR#14210)
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, <manuel.lopez-ibanez at ulb.ac.be> 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) > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >
p.dalgaard at biostat.ku.dk
2010-Feb-21 10:25 UTC
[Rd] system.time provides inaccurate sys.child (PR#14210)
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. > > /HenrikIt 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 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907