Next Previous Contents

21. Profiling

21.1 Introduction

This chapter deals with the subject of writing efficient S-Lang code, and using the S-Lang profiler to isolate places in the code that could benefit from optimization.

The most important consideration in writing efficient code is the choice of algorithm. A poorly optimized good algorithm will almost always execute faster than a highly optimized poor algorithm. In choosing an algorithm, it is also important to choose the right data structures for its implementation. As a simple example, consider the task of counting words. Any algorithm would involve a some sort of table with word/number pairs. Such a table could be implemented using a variety of data structures, e.g., as a pair of arrays or lists representing the words and corresponding numbers, as an array of structures, etc. But in this case, the associative array is ideally suited to the task:

   a = Assoc_Type[Int_Type, 0];
   while (get_word (&word))
     a[word]++;

Note the concisness of the above code. It is important to appreciate the fact that S-Lang is an byte-compiled interpreter that executes statements much slower than that of a language that compiles to machine code. The roughly overhead of the processing of byte-codes by the interpreter may be used to justify the rule of thumb that the smaller the code is, the faster it will run.

When possible, always take advantage of S-Lang's powerful array facilities. For example, consider the act of clipping an array by setting all values greater than 10 to 10. Rather than coding this as

    n = length(a);
    for (i = 0; i < n; i++)
      if (a[i] > 10) a[i] = 10;
it should be written as
    a[where(a>10)] = 10;

Finally, do not overlook the specialized modules that are available for S-Lang.

21.2 Using the profiler

slprof is an executable slsh script that implements a standalone profiler for slsh scripts. The script is essentually a front-end for a set of interpreter hooks defined in a file called profile.sl, which may be used by any application embedding S-Lang. The use of the profiler will first be demonstrated in the context of slprof, and after that follows a discussion of how to use profile.sl for other S-Lang applications.

(To be completed...)


Next Previous Contents