Solving Large Models (the 64 bit Functions)
The size of the models that can be loaded into the optimizer using the standard optimizer functions is limited by the largest number that can be held in a 32–bit integer. This means that it is not possible to load any problem with more than 2147483648 matrix elements with the standard optimizer functions. On 64–bit machines, it is possible to use the optimizer 64–bit functions to load problems with a larger number of elements (these functions have 64 appended to the standard optimizer function names). For example, it is possible to load a problem with a large number of elements with the XPRSloadlp64 function. The only difference between XPRSloadlp64 and XPRSloadlp is that the mstart array containing the starting points of the elements in each column that is passed to XPRSloadlp64 is a pointer to an array of 64–bit integers. Typically, the declaration and allocation of space for the 64–bit mstart array would be as follows:
XPRSint64 *mstart = malloc( ncol * sizeof( *mstart) );
The starting points of the elements in mstart can then exceed the largest 32–bit integer.
Wherever there is a need to pass a large array to an optimizer subroutine there is a corresponding 64–bit function. Once a large model has been loaded into the optimizer then all the standard optimizer functions (such as XPRSlpoptimize) can be used.
Note that although the 64–bit functions allow very large models to be loaded, there is no guarantee that such large problems can be solved in a reasonable time. Also if the machine doesn't have sufficient memory, the matrix will be constantly swapped in and out of memory which can slow the solution process considerably.