Changed the default WORKSPACE value to 64MB.
authorJohn Darrington <john@marilyn.intra>
Sun, 27 Jul 2008 00:47:06 +0000 (08:47 +0800)
committerJohn Darrington <john@marilyn.intra>
Sun, 27 Jul 2008 00:47:06 +0000 (08:47 +0800)
Corrected documentation of WORKSPACE.
When --testing-mode is set, workspace can now be arbitrarily low.

doc/utilities.texi
src/data/settings.c
src/data/settings.h
src/language/utilities/set.q

index 314c435e37d1a1985202f4738ea5bf007815ad24..35ea20e2131d42cb4e660db4d29973a2a7408cea 100644 (file)
@@ -334,6 +334,7 @@ SET
         /MXERRS=max_errs
         /MXWARNS=max_warnings
         /PROMPT='prompt'
+        /WORKSPACE=workspace_size
 
 (program execution)
         /MEXPAND=@{ON,OFF@}
@@ -390,7 +391,6 @@ SET
         /SCRIPTTAB='c'
         /TB1=@{'xxx','xxxxxxxxxxx'@}
         /TBFONTS='string'
-        /WORKSPACE=workspace_size
         /XSORT=@{YES,NO@}
 @end display
 
@@ -554,6 +554,17 @@ RANDOM, which will obtain an initial seed from the current time of day.
 
 @item UNDEFINED
 Currently not used.
+
+@item WORKSPACE
+The maximum amount of memory that PSPP will use to store data being processed.
+If memory in excess of the workspace size is required, then PSPP will start
+to use temporary files to store the data.
+Setting a higher value will, in general, mean procedures will run faster, 
+but may cause other applications to run slower.
+On platforms without virtual memory management, setting a very large workspace
+may cause PSPP to abort.
+@cindex workspace
+@cindex memory, amount used to store cases
 @end table
 
 Data output subcommands affect the format of output data.  These
index 5b791dc2e130b832bec51d31c79353f5fd2a4dc6..a87e3eff800f78a552232125fbec7af7ebe67527 100644 (file)
@@ -125,7 +125,7 @@ static struct settings the_settings = {
     /* endcmd */
   '.',
     /* workspace */
-  4L * 1024 * 1024,
+  64L * 1024 * 1024,
     /* default_format */
   {FMT_F, 8, 2},
     /* testing_mode */
index 2de7e9009edff74dff34fc80f8bc6c9b55bf4931..e39a63a0fefc766546362d7e1bb412454539f10f 100644 (file)
@@ -105,13 +105,13 @@ void settings_set_endcmd (char);
 
 size_t settings_get_workspace (void);
 size_t settings_get_workspace_cases (size_t value_cnt);
-void settings_set_workspace ( size_t);
+void settings_set_workspace (size_t);
 
 const struct fmt_spec *settings_get_format (void);
 void settings_set_format ( const struct fmt_spec *);
 
 bool settings_get_testing_mode (void);
-void settings_set_testing_mode ( bool);
+void settings_set_testing_mode (bool);
 
 enum behavior_mode {
   ENHANCED,             /* Use improved PSPP behavior. */
index e058aa5958330e4924f415dd60713882b8767305..37388f9264162e2c346c4f7b7a3edc637aa8bcce 100644 (file)
@@ -115,7 +115,7 @@ int tgetnum (const char *);
      wib=wib:msbfirst/lsbfirst/vax/native;
      wrb=wrb:native/isl/isb/idl/idb/vf/vd/vg/zs/zl;
      width=custom;
-     workspace=integer "x>=1024" "%s must be at least 1 MB";
+     workspace=integer "x>0" "%s must be positive";
      xsort=xsort:yes/no.
 */
 
@@ -195,7 +195,12 @@ cmd_set (struct lexer *lexer, struct dataset *ds)
   if (cmd.sbc_wrb)
     settings_set_output_float_format (stc_to_float_format (cmd.wrb));
   if (cmd.sbc_workspace)
-    settings_set_workspace (cmd.n_workspace[0] * 1024L);
+    {
+      if ( cmd.n_workspace[0] < 1024 && ! settings_get_testing_mode ())
+       msg (SE, _("WORKSPACE must be at least 1MB"));
+      else
+       settings_set_workspace (cmd.n_workspace[0] * 1024L);
+    }
 
   if (cmd.sbc_block)
     msg (SW, _("%s is obsolete."), "BLOCK");