I wouldn't bother profiling within DrRacket. I think that feature might still be for small student programs.

For doing performance tuning, you can do *some* of it within DrRacket (like comparing the timings of many iterations of two different implementations of a function), but then you have to go to the command line for better accuracy.

For profiling, I recommend using "profile-thunk" ("http://docs.racket-lang.org/profile/";) from the command-line Racket, not from DrRacket. Call "collect-garbage" 3 times before each use of "profile-thunk", to reduce GC confusing your instrumentation (and you might also wish to also call "collect-garbage" 3 times within the "profile-thunk", to better compare GC impact between different approaches). Use the "render" procedure from module "profile/render-text" to get a text report of the profiling data. If the report doesn't seem very useful (it should), then adjust the sampling rate, iterations, and such.

This profiler has helped save the day for some of my consulting clients, on multiple occasions.

Neil V.

Christopher wrote at 01/05/2014 12:35 PM:
Greetings, racketeers.

I have recently completed a port of most a large scripting language program I 
wrote (large by my standards, which is on the order of tens of thousands of 
lines of code) into pure Racket from some other scripting language, with the 
object of getting faster execution.

Now that enough of the port is finished to begin testing and verification, I'm 
not seeing the performance gains I expected. I have some suspicions about where 
some bottlenecks may be, but I'd like to have more data. To that end, I'd like 
to run some profiling on my code as it's running.

There appears to be some way to run profiling from DrRacket, but I can't 
discover the correct way to do this, for the things I'm trying bring forth 
strange errors when I try to run the program.

I try to turn on profiling from the Choose Language menu item under Dynamic 
Properties, but when I select debugging and profiling, then weird errors appear 
that didn't happen when I had just debugging selected.

For example, an identifier defined by a module imported with "require" is 
suddenly complained about as being undefined. An other thing that happens is this cryptic 
message:

link: module mismatch;
  possibly, bytecode file needs re-compile because dependencies changed
   importing module: 
"/Users/christopher/Programming/Racket/organ-relay-sim/packages/organ-relay-sim/myhdl/private/delay-join.rkt"
   exporting module: 
"/Users/christopher/Programming/Racket/organ-relay-sim/packages/organ-relay-sim/myhdl/private/generator.rkt"
   exporting phase level: 0
   internal explanation: variable not provided (directly or indirectly and at 
the expected position) in: stop-iteration1.1

That does not happen when just debugging is selected.

Any advice would be appreciated.

Thanks!

—Christopher

____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to