[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
I'll try again: oct and arrays
From: |
Jesper Schmidt Hansen |
Subject: |
I'll try again: oct and arrays |
Date: |
Wed, 29 Dec 2010 14:34:21 +0100 |
Hi again,
Terribly sorry about my last submission - apparently I pushed a button
somewhere and send an incomplete message.
I have been wondering about this for some time now. It seems that if I
access array elements via the operator ( ) in an OCT file, the
function performs poorly compared to if I access the elements in a
simple double array directly with [ ]. For example, if I wish to sum
the elements in a two dimensional array I could do something like
this:
------------------------------------------------
DEFUN_DLD(octsum, argv, , "Some help text"){
octave_value_list retval;
// Checking inputs etc
Matrix A( argv(0).matrix_value() );
size_t nr = A.rows(); size_t nc = A.cols();
double sum = 0.0;
for ( size_t i=0; i<nr; i++ )
for ( size_t j=0; j<nc; j++ ) sum += A(i,j);
retval.append(octave_value(sum));
return retval;
}
---------------------------------------------------
I can code up the same function, but in a MEX file called mxsum. I
will leave out the function definition since the algorithm is so
straightforward.
Now, timing the two functions I get
>> A = rand(1000,1000); tic, octsum(A); toc, tic; mxsum(A); toc
Elapsed time is 0.0607549 seconds.
Elapsed time is 0.0266319 seconds.
I think the difference is due to the fact that there exists an
overhead using the () operator (not inlined by the compiler I guess),
which is not there when you access the variable elements directly. Is
this correct? If so, how to overcome this overhead without first
copying everything to a second simple double array?
Cheers Jesper
--
Jesper Schmidt Hansen, Ph.D. M.Sc.
- I'll try again: oct and arrays,
Jesper Schmidt Hansen <=