[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: trying to optimize my octave program
From: |
Tim Rueth |
Subject: |
RE: trying to optimize my octave program |
Date: |
Fri, 19 Mar 2010 08:59:46 -0700 |
> I modified your example code so that it runs and made a
> stupid analyze.m that does nothing--anyway I don't think I
> broke it. I ran it to see how much overhead this structure is
> causing on my system.
>
> octave:1> testfor
> Elapsed time is 2.75838 seconds.
>
> If analyze.m only takes 0.01sec then 6*21*8*3*3*3*3
> iterations should be about 18 min? I would say the for loop
> structure overhead is negligible compared to whatever is
> happening inside analyze.m. Does
> analyze() slow down eventually (are the vectors growing)?
> Maybe it starts at 0.01sec at the beginning and gets slower?
> Is this example code much slower on your machine (I don't
> have much experience with the Windows port)?
Your testfor script took 5.5 sec on my computer (Vista, 2.17GHz, 4GB). May
be time for an upgrade.
My function analyze() takes about 4.5 sec because it runs yet another
for-loop inside with 4288 iterations. The code within this for-loop takes
about 0.001 sec for each iteration (4288*0.001 = 4.3 sec). There are only a
couple of very small vectors that grow and wouldn't contribute any
noticeable slow-down.
> Just speculating again, but I suspect that these four loops
> are prime candidates for replacement by vectorization.
> Perhaps analyze() can be modified to handle c_thd, r_thd,
> t_thd, b_thd as matrix/vector forms of these variables.
> ndgrid may help with this:
>
> [c_thd, r_thd, t_thd, b_thd ] = ndgrid(
> [c_thd_min:c_thd_st:c_thd_max] ,
> [r_thd_min:r_thd_st:r_thd_max] , [
> t_thd_min:t_thd_st:t_thd_max] , [ b_thd_min:b_thd_st:b_thd_max] )
I see what you're suggesting here...basically "parallel-process" these 4
for-loops right inside analyze() by creating a 4-D matrix, and pass this 4-D
matrix right through analyze()'s for-loop once. Brilliant, as long as this
matrix and the matrices that I'm operating on (now in parallel) don't cause
memory problems. If ndgrid makes a 4-D matrix which has, say, 256 elements
(4 in each dim), then I'll be creating 256 copies of several vectors inside
analyze(), each which has a length of 4288. I started implementing this but
hit two snags:
1) How can I initialize a multidimensional array with, say "foo" in each
element, without a for loop? Exactly like zeros(...) but filling each
element with "foo" instead of 0.
2) How do I do element-wise comparisons and conditional string assignments
on matrices without stepping through them? For example, let's say I have
two 4-D matrices, a_mat and b_mat with numeric values. I'd like to create a
new 4-D string matrix, c_mat, where
for each i in a_mat
if a_mat(i) < b_mat(i)
c_mat(i) = "foo";
cntr++;
endif
endfor
Would be awesome to be able to do this at the matrix level (no for-loops).
Thanks!
- Re: trying to optimize my octave program, (continued)
- Re: trying to optimize my octave program, Jordi Gutiérrez Hermoso, 2010/03/17
- Re: trying to optimize my octave program, Jaroslav Hajek, 2010/03/18
- RE: trying to optimize my octave program, Tim Rueth, 2010/03/18
- Re: trying to optimize my octave program, Judd Storrs, 2010/03/18
- Re: trying to optimize my octave program, Judd Storrs, 2010/03/18
- RE: trying to optimize my octave program,
Tim Rueth <=
- Re: trying to optimize my octave program, Judd Storrs, 2010/03/19
- RE: trying to optimize my octave program, Tim Rueth, 2010/03/21
- Re: trying to optimize my octave program, Jaroslav Hajek, 2010/03/19
- Re: trying to optimize my octave program, Jaroslav Hajek, 2010/03/19
- RE: trying to optimize my octave program, Tim Rueth, 2010/03/19