34 lines
1.3 KiB
Text
34 lines
1.3 KiB
Text
|
|
To compile SuperLU:
|
|
|
|
Use the Visual Studio project located in the /prj folder.
|
|
|
|
IMPORTANT (THREAD-SAFETY):
|
|
|
|
A slight modification had to be applied to the original sources of the used version (4.1).
|
|
|
|
The edit concerns the presence of static variables, that make SuperLU *NOT* thread-safe.
|
|
There is a SuperLU version for parallel architectures (SMT), but it's obviously geared
|
|
toward internal thread management - which is not what we want.
|
|
|
|
The only edit we've done, located in "dgstrf.c", fixes a crash when allocating resources
|
|
for LU factorization:
|
|
|
|
In "void dgstrf (..)":
|
|
|
|
> /*static*/ GlobalLU_t Glu; /* persistent to facilitate multiple factors. */
|
|
|
|
/* DANIELE: tolto static, nocivo x multithread */
|
|
|
|
> memset(&Glu, 0, sizeof(GlobalLU_t)); // static inizializzava tutto a 0
|
|
|
|
There are other sparse static variables, which we've not had the time to double-check.
|
|
Everything seems to work.
|
|
|
|
In case it is necessary to further modify source files, remember fiy:
|
|
|
|
* Files NOT starting with "d" - ie "double" - are not interesting; they are intended
|
|
for single float and complex numbers, we're only sticking to doubles.
|
|
|
|
* We're mainly interested in LU factorization, meaning only dgstrf ramification should
|
|
be tracked.
|