Chapter Contents
Chapter Contents
Previous
Previous
Next
Next
Further Notes

Memory and Workspace

You do not need to be concerned with the details of memory usage because memory allocation is done automatically. However, if you are interested, the following sections explain how it works.

There are two logical areas of memory, symbolspace and workspace. Symbolspace contains symbol table information and compiled statements. Workspace contains matrix data values. Workspace itself is divided into one or more extents.

At the start of a session, the symbolspace and the first extent of workspace are allocated automatically. More workspace is allocated as the need to store data values grows. The SYMSIZE= and WORKSIZE= options in the PROC IML statement give you control over the size of symbolspace and the size of each extent of workspace. If you do not specify these options, PROC IML uses host dependent defaults. For example, you can begin an IML session and set the SYMSIZE= and WORKSIZE= options with the statement

 proc iml symsize=n1 worksize=n2;

where n1 and n2 are specified in kilobytes.

If the symbolspace memory becomes exhausted, more memory is automatically acquired. The symbolspace is stable memory and is not compressible like workspace. Symbolspace is recycled whenever possible for reuse as the same type of object. For example, temporary symbols may be deleted after they are used in evaluating an expression. The symbolspace formerly used by these temporaries is added to a list of free symbol-table nodes. When allocating temporary variables to evaluate another expression, IML looks for symbol-table nodes in this list first before consuming unused symbolspace.

Workspace is compressible memory. Workspace extents fill up as more matrices are defined by operations. Holes in extents appear as you free matrices or as IML frees temporary intermediate results. When an extent fills up, compression reclaims the holes that have appeared in the extent. If compression does not reclaim enough memory for the current allocation, IML allocates a new extent. This procedure results in the existence of a list of extents, each of which contains a mixture of active memory and holes of unused memory. There is always a current extent, the one in which the last allocation was made.

For a new allocation, the search for free space begins in the current extent and proceeds around the extent list until finding enough memory or returning to the current extent. If the search returns to the current extent, IML begins a second transversal of the extent list, compressing each extent until either finding sufficient memory or returning to the current extent. If the second search returns to the current extent, IML opens a new extent and makes it the current one.

If the SAS System cannot provide enough memory to open a new extent with the full extent size, IML repeatedly reduces its request by 2K. In this case, the successfully opened extent will be smaller than the standard size.

If a single allocation is larger than the standard extent size, IML requests an allocation large enough to hold the matrix.

The WORKSIZE= and SYMSIZE= options offer tools for tuning memory usage. For data intensive applications involving a few large matrices, use a high WORKSIZE= value and a low SYMSIZE= value. For symbol intensive applications involving many matrices, perhaps through the use of many IML modules, use a high SYMSIZE= value.

You can use the SHOW SPACE command to display the current status of IML memory usage. This command also lists the total number of compressions done on all extents.

Setting the DETAILS option in the RESET command prints messages in the output file when IML compresses an extent, opens a new extent, allocates a large object, or acquires more symbolspace. These messages can be useful because these actions normally occur without the user's knowledge. The information can be used to tune WORKSIZE= and SYMSIZE= values for an application. However, the default WORKSIZE= and SYMSIZE= values should be appropriate in most applications.

Do not specify a very large value in the WORKSIZE= and SYMSIZE= options unless absolutely necessary. Many of the native functions and all of the DATA step functions used are dynamically loaded at execution time. If you use a large amount of the memory for symbolspace and workspace, there may not be enough remaining to load these functions, resulting in the error message

 Unable to load module module-name.

Should you run into this problem, issue a SHOW SPACE command to examine current usage. You may be able to adjust the SYMSIZE= or WORKSIZE= values.

The amount of memory your system can provide depends on the capacity of your computer and on the products installed. The following techniques for efficient memory use are recommended when memory is at a premium:

Chapter Contents
Chapter Contents
Previous
Previous
Next
Next
Top
Top

Copyright © 1999 by SAS Institute Inc., Cary, NC, USA. All rights reserved.