Move setting up OMP from CKTsetup() to inp_readall().
Add a check for abvailable logical CPU cores, and use half of them as default.
This commit is contained in:
parent
a4d3b9dc5d
commit
c093f985e1
|
|
@ -58,6 +58,11 @@ Author: 1985 Wayne A. Christopher
|
||||||
/* gtri - end - 12/12/90 */
|
/* gtri - end - 12/12/90 */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_OMP
|
||||||
|
#include <omp.h>
|
||||||
|
#include "ngspice/cpextern.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/* SJB - Uncomment this line for debug tracing */
|
/* SJB - Uncomment this line for debug tracing */
|
||||||
/*#define TRACE*/
|
/*#define TRACE*/
|
||||||
|
|
||||||
|
|
@ -73,6 +78,10 @@ Author: 1985 Wayne A. Christopher
|
||||||
|
|
||||||
#define VALIDCHARS "!$%_#?@.[]&"
|
#define VALIDCHARS "!$%_#?@.[]&"
|
||||||
|
|
||||||
|
#ifdef USE_OMP
|
||||||
|
int nthreads = 4;
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct library {
|
static struct library {
|
||||||
char *realpath;
|
char *realpath;
|
||||||
char *habitat;
|
char *habitat;
|
||||||
|
|
@ -1088,6 +1097,21 @@ struct card *inp_readall(FILE *fp, const char *dir_name, const char* file_name,
|
||||||
struct card *tmp_ptr1;
|
struct card *tmp_ptr1;
|
||||||
struct names *subckt_w_params = new_names();
|
struct names *subckt_w_params = new_names();
|
||||||
|
|
||||||
|
/* set the number of threads used by ngspice via OpenMP */
|
||||||
|
#ifdef USE_OMP
|
||||||
|
if (!cp_getvar("num_threads", CP_NUM, &nthreads, 0)) {
|
||||||
|
nthreads = omp_get_num_procs();
|
||||||
|
fprintf(stdout, "\nNote: %d logical cores detected, ", nthreads);
|
||||||
|
nthreads = (int)(nthreads / 2);
|
||||||
|
fprintf(stdout, "max %d threads are used by ngspice.\n", nthreads);
|
||||||
|
// fprintf(stdout, " (May be overriden by 'set num_threads = xx in .spiceinit.)\n\n", nthreads);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fprintf(stdout, "\nNote: Number of threads used by ngspice set to %d.\n\n", nthreads);
|
||||||
|
|
||||||
|
omp_set_num_threads(nthreads);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* skip title line */
|
/* skip title line */
|
||||||
struct card *working = cc->nextcard;
|
struct card *working = cc->nextcard;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,6 @@ Author: 1985 Thomas L. Quarles
|
||||||
#include "ngspice/enh.h"
|
#include "ngspice/enh.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_OMP
|
|
||||||
#include <omp.h>
|
|
||||||
#include "ngspice/cpextern.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define CKALLOC(var,size,type) \
|
#define CKALLOC(var,size,type) \
|
||||||
if(size && ((var = TMALLOC(type, size)) == NULL)){\
|
if(size && ((var = TMALLOC(type, size)) == NULL)){\
|
||||||
return(E_NOMEM);\
|
return(E_NOMEM);\
|
||||||
|
|
@ -35,9 +30,7 @@ CKTsetup(CKTcircuit *ckt)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int error;
|
int error;
|
||||||
#ifdef USE_OMP
|
|
||||||
int nthreads = 2;
|
|
||||||
#endif
|
|
||||||
#ifdef XSPICE
|
#ifdef XSPICE
|
||||||
/* gtri - begin - Setup for adding rshunt option resistors */
|
/* gtri - begin - Setup for adding rshunt option resistors */
|
||||||
CKTnode *node;
|
CKTnode *node;
|
||||||
|
|
@ -86,16 +79,6 @@ CKTsetup(CKTcircuit *ckt)
|
||||||
|
|
||||||
matrix = ckt->CKTmatrix;
|
matrix = ckt->CKTmatrix;
|
||||||
|
|
||||||
#ifdef USE_OMP
|
|
||||||
if (!cp_getvar("num_threads", CP_NUM, &nthreads, 0))
|
|
||||||
nthreads = 2;
|
|
||||||
|
|
||||||
omp_set_num_threads(nthreads);
|
|
||||||
/* if (nthreads == 1)
|
|
||||||
printf("OpenMP: %d thread is requested in ngspice\n", nthreads);
|
|
||||||
else
|
|
||||||
printf("OpenMP: %d threads are requested in ngspice\n", nthreads);*/
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAS_PROGREP
|
#ifdef HAS_PROGREP
|
||||||
SetAnalyse("Device Setup", 0);
|
SetAnalyse("Device Setup", 0);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue