1,848
edits
(Changed defaults for versions 4.4 and newer) |
(Add a note to see also section.) |
||
(7 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{Note|The following only applies to systems that have 64-bit pointers (64bit architecture).}} | |||
Starting with Octave 4.4.0, 64-bit indexing is the default for targets with 64-bit pointers. You can override that default by specifying <code>--disable-64</code> when configuring Octave. | Starting with Octave 4.4.0, 64-bit indexing is the default for targets with 64-bit pointers. You can override that default by specifying <code>--disable-64</code> when configuring Octave. | ||
Line 13: | Line 13: | ||
* glpk | * glpk | ||
* Qhull | * Qhull | ||
Useful information and projects are listed below in the [[#See also|See also]] section. | |||
To determine the integer size of the BLAS library used by Octave, the following code can be executed: | |||
<syntaxhighlight lang="Octave"> | |||
clear all; | |||
N = 2^31; | |||
## The following line requires about 8 GB of RAM! | |||
a = b = ones (N, 1, "single"); | |||
c = a' * b | |||
</syntaxhighlight> | |||
If the BLAS library uses '''32-bit integers''', an error will be thrown: | |||
error: integer dimension or index out of range for Fortran INTEGER type | |||
Otherwise, if the BLAS library uses '''64-bit integers''', the result is: | |||
c = 2^31 = 2147483648 | |||
Note that the test case above usually requires twice the memory, if <code>a</code> and <code>b</code> are not assigned by <code>a = b = ...</code>. | |||
Note further, that the data type "single" has a precision of about 23 binary bits. | |||
In this particular example no rounding errors occur. | |||
===Versions prior to Octave 4.4=== | ===Versions prior to Octave 4.4=== | ||
On previous versions of Octave, the default is that the size of a single Octave array cannot | On previous versions of Octave, the default is that the size of a single Octave array cannot have more than approximately 2^31 elements, even on systems that use 64-bit pointers. This is because array indices were limited to 32-bit signed integers by default. Trying to create one will produce the following error: | ||
<pre> | <pre> | ||
Line 22: | Line 46: | ||
</pre> | </pre> | ||
You will obtain this error even if your system has enough RAM to create this array ( | You will obtain this error even if your system has enough RAM to create this array (3 GB in the above case). | ||
To use arrays with more than (approximately) <math>2^{31}</math> elements, Octave has to be configured with the option <code>--enable-64</code>. This option is experimental and you are (as always) encouraged to submit bug reports if you find a problem. | To use arrays with more than (approximately) <math>2^{31}</math> elements, Octave has to be configured with the option <code>--enable-64</code>. This option is experimental and you are (as always) encouraged to submit bug reports if you find a problem. | ||
With this option, Octave will use internally 64-bit integers for array dimensions and indexing. However, '''all numerical libraries''' used by Octave will need to use also 64-bit integers for array dimensions and indexing, and in most cases they need to be compiled from source. | With this option, Octave will use internally 64-bit integers for array dimensions and indexing. However, '''all numerical libraries''' used by Octave will need to use also 64-bit integers for array dimensions and indexing, and in most cases they need to be compiled from source. | ||
===See also=== | |||
* [https://octave.org/doc/interpreter/Compiling-Octave-with-64_002dbit-Indexing.html GNU Octave manual] -- Details on how to compile some of Octave's library dependencies for 64-bit indices. | |||
* [[MXE]] (M Cross Environment) which takes care to compile Octave's library dependencies for 64-bit indices. | |||
Two more lightweight solutions compared to [[MXE]] to compile Octave's library dependencies for 64-bit indices. | |||
* https://gitlab.com/mtmiller/octave-blas64-builder | |||
* https://github.com/octave-de/GNU-Octave-enable-64 | |||
[[Category:Building]] | [[Category:Building]] |