Re: Timing of statements inside a cell
- To: mathgroup at smc.vnet.net
- Subject: [mg50853] Re: [mg50841] Timing of statements inside a cell
- From: DrBob <drbob at bigfoot.com>
- Date: Fri, 24 Sep 2004 04:41:27 -0400 (EDT)
- References: <200409230927.FAA08079@smc.vnet.net>
- Reply-to: drbob at bigfoot.com
- Sender: owner-wri-mathgroup at wolfram.com
I haven't tested it, but something like this may help:
Clear[time]
Attributes[time]={HoldAll};
time[expr_,tag_]:=Module[{results=Timing[expr]},
Sow[First@results/Second,tag];
Last@results
]
Reap@While[
time[averagePrimerDistance<Mean[Rest@prposBin-Most@prposBin],"Mean"],
time[pr=random[currentTargetPartitioned],"random"];
time[prpos=Position[currentTargetPartitioned,pr],"Position"];
time[prposBin=Sort[Flatten[Append[prposBin,Flatten[prpos]]]],"Sort"]];
Notice that I rewrote the Mean distance test. Most is new in version 5.
There's a granularity issue with Timing that may give you zeroes for most statements. You'll need to total or average each series of Timing outputs.
I also removed unnecessary parentheses and semicolons.
Bobby
On Thu, 23 Sep 2004 05:27:24 -0400 (EDT), János <janos.lobb at yale.edu> wrote:
> Hi,
>
> I have a cell with some code in it containing many statements. Like:
>
> Cell starts here
> ...
> ...
> currentTargetPartitioned = Partition[currentTarget, primerLength, 1];
> prposBin = {{1}, {currentTargetLength}};
>
> (* Do as long as the Mean of
> the distance between
> neighbouring primers is bigger than averagePrimerDistance *)
> While[Mean[Flatten[Map[#[[2]] - #[[1]] &, Partition[prposBin, 2, 1]]] ]
> > \
> averagePrimerDistance, (
> pr = random[currentTargetPartitioned];
> prpos = Position[currentTargetPartitioned, pr];
> prposBin = Sort[Flatten[Append[prposBin, Flatten[prpos] ] ] ];
> )];
>
> (* Create a double strand
> from the currentTarget in such a way that the double starts
> from
> the first primer position and file it into collectedDnaBin *)
> prposBinDouble = Most[Map[{#, Last[prposBin]} &, prposBin] ];
> collectpr = Take[currentTarget, prposBinDouble[[2]] ];
> ...
> ...
> Cell ends here
>
> I would like to time every single statement as they are executing.
> Just adding //Timing after every statement or wrapping them with
> Timing[statement;] does not work.
> Any good hint ? /I am sure I am not the only one needing it :)/
>
> In general, what kind of profiling Mathematica allows to pinpoint the
> statements inside a single cell which spend the most time in the kernel
> ?
>
> If it cannot be done inside a cell, what is possible baring to break
> the cell into single statements cells ? What should I read ?
>
> Other question: In the While loop above I am collecting positions into
> a list
> prposBin = Sort[Flatten[Append[prposBin, Flatten[prpos] ] ] ];
> /Just realized that I should do the Sort outside of the loop :)/
> How can I do the collection with Sow and Reap to avoid Append ?
>
> Thanks ahead,
>
> János
> P.S.
> ----------------------------------------------
> Trying to argue with a politician is like lifting up the head of a
> corpse.
> (S. Lem: His Master Voice)
>
>
>
>
--
DrBob at bigfoot.com
www.eclecticdreams.net
- References:
- Timing of statements inside a cell
- From: János <janos.lobb@yale.edu>
- Timing of statements inside a cell