Nonblocking Call
The nonblocking call allows the user to
have some sort of NetSolve-parallelism.
The nonblocking version of netsl() is
netslnb(). Similarly, the nonblocking version of
FNETSL() is FNETSLNB().
The user calls it exactly as he would call netsl()
or FNETSL(). If the call to
netslnb() or FNETSLNB() is
successful, it returns a request handler
in the form of a (positive) integer. If it is not successful, it returns
an error code. Continuing with our example:
CALL FNETSLNB( 'DGESV()', REQUEST, N, 1, A, LDA, IPIV,
& B, LDB, INFO ) |
and in C :
request = netslnb('dgesv()',n,1,a,max,ipiv,b,max,&info); |
In case of an error, the request handler actually contains
the (negative) NetSolve error code.
The next step is to check the status of the request.
As in the Matlab interface, the user can choose to probe or
to wait for the request. Probing is done by calling
netslpr() or FNETSLPR()
which returns a NetSolve error code:
CALL FNETSLPR( REQUEST, INFO ) |
and in C :
Typical error codes returned are NetSolveNotReady and NetSolveOK
(see Chapter 27).
Waiting is done by using netslwt() or FNETSLWT(). This function blocks until
the computation is complete and the result is available.
Here is the Fortran77 call:
CALL FNETSLWT( REQUEST, INFO ) |
and the C call :
If the call is successful, the function/subroutine returns the error code
NetSolveOK and the result is in the user memory space.