OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
mumps_io_thread.c File Reference
#include "mumps_io_basic.h"
#include "mumps_io_err.h"
#include "mumps_io_thread.h"
#include "mumps_c_types.h"

Go to the source code of this file.

Functions

void * mumps_async_thread_function_with_sem (void *arg)
MUMPS_INT mumps_test_request_th (MUMPS_INT *request_id, MUMPS_INT *flag)
MUMPS_INT mumps_wait_req_sem_th (MUMPS_INT *request_id)
MUMPS_INT mumps_wait_request_th (MUMPS_INT *request_id)
MUMPS_INT mumps_is_there_finished_request_th (MUMPS_INT *flag)
MUMPS_INT mumps_clean_finished_queue_th ()
MUMPS_INT mumps_clean_request_th (MUMPS_INT *request_id)
MUMPS_INT mumps_low_level_init_ooc_c_th (MUMPS_INT *async, MUMPS_INT *ierr)
MUMPS_INT mumps_async_write_th (const MUMPS_INT *strat_IO, void *address_block, long long block_size, MUMPS_INT *inode, MUMPS_INT *request_arg, MUMPS_INT *type, long long vaddr, MUMPS_INT *ierr)
MUMPS_INT mumps_async_read_th (const MUMPS_INT *strat_IO, void *address_block, long long block_size, MUMPS_INT *inode, MUMPS_INT *request_arg, MUMPS_INT *type, long long vaddr, MUMPS_INT *ierr)
MUMPS_INT mumps_clean_io_data_c_th (MUMPS_INT *myid)
MUMPS_INT mumps_get_sem (void *arg, MUMPS_INT *value)
MUMPS_INT mumps_wait_sem (void *arg, pthread_cond_t *cond)
MUMPS_INT mumps_post_sem (void *arg, pthread_cond_t *cond)

Variables

MUMPS_INT io_flag_stop
MUMPS_INT current_req_num
pthread_t io_thread
pthread_t main_thread
pthread_mutex_t io_mutex
pthread_cond_t cond_io
pthread_cond_t cond_nb_free_finished_requests
pthread_cond_t cond_nb_free_active_requests
pthread_cond_t cond_stop
pthread_mutex_t io_mutex_cond
MUMPS_INT int_sem_io
MUMPS_INT int_sem_nb_free_finished_requests
MUMPS_INT int_sem_nb_free_active_requests
MUMPS_INT int_sem_stop
MUMPS_INT with_sem
struct request_ioio_queue
MUMPS_INT first_active
MUMPS_INT last_active
MUMPS_INT nb_active
MUMPS_INTfinished_requests_inode
MUMPS_INTfinished_requests_id
MUMPS_INT first_finished_requests
MUMPS_INT last_finished_requests
MUMPS_INT nb_finished_requests
MUMPS_INT smallest_request_id
MUMPS_INT mumps_owns_mutex
MUMPS_INT test_request_called_from_mumps
double inactive_time_io_thread
MUMPS_INT time_flag_io_thread
struct timeval origin_time_io_thread

Function Documentation

◆ mumps_async_read_th()

MUMPS_INT mumps_async_read_th ( const MUMPS_INT * strat_IO,
void * address_block,
long long block_size,
MUMPS_INT * inode,
MUMPS_INT * request_arg,
MUMPS_INT * type,
long long vaddr,
MUMPS_INT * ierr )

Definition at line 419 of file mumps_io_thread.c.

426 {
427 MUMPS_INT cur_req;
429 if(*ierr!=0){
430 return *ierr;
431 }
432 if(with_sem){
434 /* end of the block*/
435 if(with_sem==2){
437 }
438 /* sem_wait(&sem_nb_free_active_requests); */
439 pthread_mutex_lock(&io_mutex);
440 }
441 if(nb_active<MAX_IO){
442 if(nb_active==0){
444 }else{
446 /* if(last_active<MAX_IO-1){
447 cur_req=last_active+1;
448 last_active++;
449 }else{
450 cur_req=0;
451 last_active=0;
452 }*/
453 }
454 cur_req=last_active;
455 nb_active++;
456 io_queue[cur_req].inode=*inode;
457 io_queue[cur_req].req_num=current_req_num;
458 io_queue[cur_req].addr=address_block;
459 io_queue[cur_req].size=block_size;
460 io_queue[cur_req].vaddr=vaddr;
461 io_queue[cur_req].io_type=1;
462 io_queue[cur_req].file_type=*type;
463 if(with_sem==2){
464 io_queue[cur_req].int_local_cond=0;
465 }
466 *request_arg=current_req_num;
468 }else{
469 *ierr = -91;
470 return mumps_io_error(*ierr,"Internal error in OOC Management layer (mumps_async_read_th)\n");
471 }
472 if(with_sem){
473 /* sem_post(&sem_io); */
474 if(with_sem==2){
476 }
477 }
478 pthread_mutex_unlock(&io_mutex);
479 return 0;
480}
#define MUMPS_INT
MUMPS_INT mumps_check_error_th()
MUMPS_INT mumps_io_error(MUMPS_INT mumps_errno, const char *desc)
MUMPS_INT with_sem
MUMPS_INT int_sem_io
MUMPS_INT nb_active
MUMPS_INT mumps_clean_finished_queue_th()
pthread_cond_t cond_nb_free_active_requests
MUMPS_INT int_sem_nb_free_active_requests
MUMPS_INT mumps_post_sem(void *arg, pthread_cond_t *cond)
MUMPS_INT first_active
struct request_io * io_queue
pthread_cond_t cond_io
MUMPS_INT current_req_num
MUMPS_INT last_active
MUMPS_INT mumps_wait_sem(void *arg, pthread_cond_t *cond)
pthread_mutex_t io_mutex
#define MAX_IO

◆ mumps_async_thread_function_with_sem()

void * mumps_async_thread_function_with_sem ( void * arg)

Main function of the io thread when semaphores are used.

Definition at line 42 of file mumps_io_thread.c.

42 {
43 struct request_io *current_io_request;
44 MUMPS_INT ierr,_sem_stop;
45 struct timeval start_time,end_time;
46 MUMPS_INT ret_code;
47 for (;;){
48 gettimeofday(&start_time,NULL);
49 if(with_sem==2){
51 }
52 /* sem_wait(&sem_io); */
53 gettimeofday(&end_time,NULL);
55 inactive_time_io_thread=inactive_time_io_thread+((double)end_time.tv_sec+((double)end_time.tv_usec/1000000))-((double)start_time.tv_sec+((double)start_time.tv_usec/1000000));
56 }else{
57 inactive_time_io_thread=((double)end_time.tv_sec+((double)end_time.tv_usec/1000000))-((double)origin_time_io_thread.tv_sec+((double)origin_time_io_thread.tv_usec/1000000));
58 }
61 }
62 /* Check if the main thread ordered to stop this slave thread */
63 /* sem_getvalue(&sem_stop,&_sem_stop); */
64 if(with_sem==2){
65 mumps_get_sem(&int_sem_stop,&_sem_stop);
66 }
67 if(_sem_stop==IO_FLAG_STOP){
68 /* The thread must stop */
69 break; /* Breaks the while loop. */
70 }
71 current_io_request=&io_queue[first_active];
72 switch(current_io_request->io_type)
73 {
74 case IO_WRITE:
75 ret_code=mumps_io_do_write_block(current_io_request->addr,
76 current_io_request->size,
77 &(current_io_request->file_type),
78 current_io_request->vaddr,
79 &ierr);
80 if(ret_code<0){
81 goto end;
82 }
83 break;
84 case IO_READ:
85 ret_code=mumps_io_do_read_block(current_io_request->addr,
86 current_io_request->size,
87 &(current_io_request->file_type),
88 current_io_request->vaddr,
89 &ierr);
90 if(ret_code<0){
91 goto end;
92 }
93 break;
94 default:
95 printf("Error : Mumps_IO : Operation %d is neither READ nor WRITE\n",current_io_request->io_type);
96 exit (-3);
97 }
98 /* Notify that the IO was performed */
99 /* Wait that finished_requests queue could register
100 the notification */
101 if(with_sem==2){
103 }
104 pthread_mutex_lock(&io_mutex);
105 /* Updates active queue bounds */
106 /* Register the notification in finished_requests queue
107 and updates its bounds. */
112 /* Realeases the lock : ***UNLOCK*** */
113 nb_active--;
114 if(first_active<MAX_IO-1){
115 first_active++;
116 }
117 else{
118 first_active=0;
119 }
120 if(with_sem==2){
121 mumps_post_sem(&(current_io_request->int_local_cond),&(current_io_request->local_cond));
122 }
123 pthread_mutex_unlock(&io_mutex);
124 /* Finally increases the number of free active requests.*/
125 /* sem_post(&sem_nb_free_active_requests); */
127 }
128 end:
129 /* The main thread ordered the end of the IO thread (it changed sem_stop).
130 We exit. */
131 pthread_exit(NULL);
132/* FIXME Not reached */
133/* return NULL; */
134}
end[inform, rinform, sol, inst, schur, redrhs, pivnul_list, sym_perm, uns_perm, icntl, cntl, colsca_out, rowsca_out, keep_out, dkeep_out]
Definition dmumps.m:40
MUMPS_INT mumps_io_do_read_block(void *address_block, long long block_size, MUMPS_INT *type_arg, long long vaddr, MUMPS_INT *ierr)
MUMPS_INT mumps_io_do_write_block(void *address_block, long long block_size, MUMPS_INT *type_arg, long long vaddr, MUMPS_INT *ierr)
#define IO_READ
#define IO_WRITE
struct timeval origin_time_io_thread
double inactive_time_io_thread
pthread_cond_t cond_nb_free_finished_requests
MUMPS_INT int_sem_nb_free_finished_requests
MUMPS_INT nb_finished_requests
MUMPS_INT last_finished_requests
MUMPS_INT * finished_requests_id
MUMPS_INT * finished_requests_inode
MUMPS_INT int_sem_stop
MUMPS_INT time_flag_io_thread
MUMPS_INT mumps_get_sem(void *arg, MUMPS_INT *value)
#define MAX_FINISH_REQ
#define IO_FLAG_STOP
pthread_cond_t local_cond
MUMPS_INT file_type
MUMPS_INT inode
long long size
MUMPS_INT io_type
MUMPS_INT int_local_cond
MUMPS_INT req_num
long long vaddr

◆ mumps_async_write_th()

MUMPS_INT mumps_async_write_th ( const MUMPS_INT * strat_IO,
void * address_block,
long long block_size,
MUMPS_INT * inode,
MUMPS_INT * request_arg,
MUMPS_INT * type,
long long vaddr,
MUMPS_INT * ierr )

Definition at line 363 of file mumps_io_thread.c.

370 {
371 MUMPS_INT cur_req;
373 if(*ierr!=0){
374 return *ierr;
375 }
376 if(with_sem){
378 if(with_sem==2){
380 }
381 /* sem_wait(&sem_nb_free_active_requests); */
382 pthread_mutex_lock(&io_mutex);
383 }
384 if(nb_active<=MAX_IO){
385 if(nb_active==0){
387 }
388 else{
390 }
391 cur_req=last_active;
392 nb_active++;
393 io_queue[cur_req].inode=*inode;
394 io_queue[cur_req].req_num=current_req_num;
395 io_queue[cur_req].addr=address_block;
396 io_queue[cur_req].size=block_size;
397 io_queue[cur_req].vaddr=vaddr;
398 io_queue[cur_req].io_type=0;
399 io_queue[cur_req].file_type=*type;
400 if(with_sem==2){
401 io_queue[cur_req].int_local_cond=0;
402 }
403 *request_arg=current_req_num;
405 }else{
406 *ierr = -91;
407 return mumps_io_error(*ierr,"Internal error in OOC Management layer (mumps_async_write_th)\n");
408 /* exit(-3);*/
409 }
410 pthread_mutex_unlock(&io_mutex);
411 if(with_sem){
412 /* sem_post(&sem_io); */
413 if(with_sem==2){
415 }
416 }
417 return 0;
418}

◆ mumps_clean_finished_queue_th()

MUMPS_INT mumps_clean_finished_queue_th ( )

Definition at line 240 of file mumps_io_thread.c.

240 {
241 /* Cleans the finished request queue. On exit, the queue is empty.*/
242 MUMPS_INT local_flag;
243 MUMPS_INT cur_req;
244 MUMPS_INT loc_owned_mutex=0,ierr;
245 if(!mumps_owns_mutex){
246 pthread_mutex_lock(&io_mutex);
248 loc_owned_mutex=1;
249 }
250 /* this block of code is designed for avoiding deadlocks between
251 the two threads*/
253 while(local_flag){
255 if(ierr!=0){
256 return ierr;
257 }
259 }
260 if((!mumps_owns_mutex)||(loc_owned_mutex)){
261 pthread_mutex_unlock(&io_mutex);
263 }
264 return 0;
265}
MUMPS_INT mumps_owns_mutex
MUMPS_INT mumps_is_there_finished_request_th(MUMPS_INT *flag)
MUMPS_INT mumps_clean_request_th(MUMPS_INT *request_id)

◆ mumps_clean_io_data_c_th()

MUMPS_INT mumps_clean_io_data_c_th ( MUMPS_INT * myid)

Definition at line 481 of file mumps_io_thread.c.

481 {
482 MUMPS_INT i;
483 /* cleans the thread/io management data*/
485 /*we can use either signals or mutexes for this step */
486 if(with_sem){
487 if(with_sem==2){
490 }
491 }else{
492 pthread_mutex_lock(&io_mutex);
493 io_flag_stop=1;
494 pthread_mutex_unlock(&io_mutex);
495 }
496 pthread_join(io_thread,NULL);
497 pthread_mutex_destroy(&io_mutex);
499#ifdef WITH_PFUNC
500 mumps_io_destroy_pointers_lock();
501#endif
502 if(with_sem){
503 if(with_sem==2){
504 pthread_cond_destroy(&cond_stop);
505 pthread_cond_destroy(&cond_io);
506 pthread_cond_destroy(&cond_nb_free_active_requests);
507 pthread_cond_destroy(&cond_nb_free_finished_requests);
508 pthread_mutex_destroy(&io_mutex_cond);
509 }
510 }
511 }
512 if(with_sem==2){
513 for(i=0;i<MAX_IO;i++){
514 pthread_cond_destroy(&(io_queue[i].local_cond));
515 }
516 }
517 free(io_queue);
520 return 0;
521}
MUMPS_INT mumps_io_flag_async
MUMPS_INT mumps_io_destroy_err_lock()
pthread_t io_thread
pthread_mutex_t io_mutex_cond
pthread_cond_t cond_stop
MUMPS_INT io_flag_stop

◆ mumps_clean_request_th()

MUMPS_INT mumps_clean_request_th ( MUMPS_INT * request_id)

Definition at line 266 of file mumps_io_thread.c.

266 {
269 if(ierr!=0){
270 return ierr;
271 }
272 if(!mumps_owns_mutex)pthread_mutex_lock(&io_mutex);
275 return mumps_io_error(-91,"Internal error in OOC Management layer (mumps_clean_request_th)\n");
276 }
280 /*we treat the io requests in their arrival order => we just have to
281 increase smallest_request_id*/
283 if(!mumps_owns_mutex) pthread_mutex_unlock(&io_mutex);
284 if(with_sem) {
285 if(with_sem==2){
287 }
288 }
289 return 0;
290}
MUMPS_INT first_finished_requests
MUMPS_INT smallest_request_id

◆ mumps_get_sem()

MUMPS_INT mumps_get_sem ( void * arg,
MUMPS_INT * value )

Definition at line 522 of file mumps_io_thread.c.

522 {
523 switch(with_sem){
524 case 2:
525 pthread_mutex_lock(&io_mutex_cond);
526 *value=*((MUMPS_INT *)arg);
527 pthread_mutex_unlock(&io_mutex_cond);
528 break;
529 default:
530 return mumps_io_error(-91,"Internal error in OOC Management layer (mumps__get_sem)\n");
531 }
532 return 0;
533}

◆ mumps_is_there_finished_request_th()

MUMPS_INT mumps_is_there_finished_request_th ( MUMPS_INT * flag)

Definition at line 229 of file mumps_io_thread.c.

229 {
230 if(!mumps_owns_mutex) pthread_mutex_lock(&io_mutex);
232 *flag=0;
233 }else{
234 *flag=1;
235 /* printf("finished : %d\n",nb_finished_requests); */
236 }
237 if(!mumps_owns_mutex) pthread_mutex_unlock(&io_mutex);
238 return 0;
239}
*fortran !University of Stuttgart All rights reserved Inc All rights reserved ! $COPYRIGHT$ !Additional copyrights may follow ! $HEADER$ !WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING !Do ***not ***copy this file to the directory where your Fortran !fortran application is compiled unless it is absolutely necessary !Most !modern Fortran compilers now support the I command line flag
Definition mpif.h:26

◆ mumps_low_level_init_ooc_c_th()

MUMPS_INT mumps_low_level_init_ooc_c_th ( MUMPS_INT * async,
MUMPS_INT * ierr )

Definition at line 291 of file mumps_io_thread.c.

291 {
292 MUMPS_INT i, ret_code;
293 char buf[128];
294 /* Computes the number of files needed. Uses ceil value. */
295 *ierr=0;
297 with_sem=2;
298 first_active=0;
299 last_active=0;
300 nb_active=0;
308 gettimeofday(&origin_time_io_thread,NULL);
309 /* mumps_io_flag_async=*async; */
310 if(*async!=IO_ASYNC_TH){
311 *ierr = -91;
312 sprintf(buf,"Internal error: mumps_low_level_init_ooc_c_th should not to be called with strat_IO=%d\n",*async);
313 return mumps_io_error(*ierr,buf);
314 }
315 if(*async){
316 pthread_mutex_init(&io_mutex,NULL);
318#ifdef WITH_PFUNC
319 mumps_io_init_pointers_lock();
320#endif
321 io_queue=(struct request_io *)malloc(MAX_IO*sizeof(struct request_io));
322 if(with_sem==2){
323 for(i=0;i<MAX_IO;i++){
324 pthread_cond_init(&(io_queue[i].local_cond),NULL);
325 io_queue[i].int_local_cond=0;
326 }
327 }
328 finished_requests_id=(MUMPS_INT *)malloc(MAX_IO*2*sizeof(MUMPS_INT));
330 for(i=0;i<MAX_IO*2;i++){
331 finished_requests_id[i]=-9999;
333 }
334 ret_code=0;
335 if(with_sem){
336 switch(with_sem){
337 case 2:
338 int_sem_io=0;
339 int_sem_stop=0;
342 pthread_cond_init(&cond_stop,NULL);
343 pthread_cond_init(&cond_io,NULL);
344 pthread_cond_init(&cond_nb_free_active_requests,NULL);
345 pthread_cond_init(&cond_nb_free_finished_requests,NULL);
346 pthread_mutex_init(&io_mutex_cond,NULL);
347 break;
348 default:
349 *ierr = -92;
350 sprintf(buf,"Internal error: mumps_low_level_init_ooc_c_th should not to be called with strat_IO=%d\n",*async);
351 return mumps_io_error(*ierr,buf);
352 }
353 ret_code=pthread_create(&io_thread,NULL,mumps_async_thread_function_with_sem,NULL);
354 }
355 if(ret_code!=0){
356 errno = ret_code;
357 return mumps_io_sys_error(-92,"Unable to create I/O thread");
358 }
359 main_thread=pthread_self();
360 }
361 return 0;
362}
#define IO_ASYNC_TH
MUMPS_INT mumps_io_init_err_lock()
MUMPS_INT mumps_io_sys_error(MUMPS_INT mumps_errno, const char *desc)
pthread_t main_thread
void * mumps_async_thread_function_with_sem(void *arg)

◆ mumps_post_sem()

MUMPS_INT mumps_post_sem ( void * arg,
pthread_cond_t * cond )

Definition at line 551 of file mumps_io_thread.c.

551 {
552 MUMPS_INT *tmp_pointer;
553 switch(with_sem){
554 case 2:
555 pthread_mutex_lock(&io_mutex_cond);
556 tmp_pointer=(MUMPS_INT *)arg;
557 (*tmp_pointer)++;
558 if(*tmp_pointer==1){
559 pthread_cond_broadcast(cond);
560 }
561 pthread_mutex_unlock(&io_mutex_cond);
562 break;
563 default:
564 return mumps_io_error(-91,"Internal error in OOC Management layer (mumps_post_sem)\n");
565 }
566 return 0;
567}

◆ mumps_test_request_th()

MUMPS_INT mumps_test_request_th ( MUMPS_INT * request_id,
MUMPS_INT * flag )

Definition at line 135 of file mumps_io_thread.c.

135 {
136 /* Tests if the request "request_id" has finished. It sets the flag */
137 /* argument to 1 if the request has finished (0 otherwise) */
138 MUMPS_INT request_pos;
139 MUMPS_INT i;
141 if(i!=0){
142 return i;
143 }
144 pthread_mutex_lock(&io_mutex);
145 /* printf("entering test !!! \n"); */
146 if(*request_id < smallest_request_id){
147 *flag=1;
148 /* exit (-2); */
149 }else{
151 *flag=0;
152 }else{
154 if(*request_id > finished_requests_id[request_pos]){
155 /*the request has not been treated yet since it is not in
156 the list of treated requests*/
157 i=0;
158 /*this loop is only for checking (no special treatment is done*/
159 while(i<nb_active){
160 request_pos=(first_active+i)%(MAX_IO);
161 if(io_queue[request_pos].req_num==*request_id){
162 break;
163 }
164 i++;
165 }
166 if(i==nb_active){
167 return mumps_io_error(-91,"Internal error in OOC Management layer (mumps_test_request_th (1))\n");
168 }
169 *flag=0;
170 }else{
171 /*the request has been treated yet since it is the list of
172 treated requests*/
173 i=0;
174 while(i<nb_finished_requests){
175 request_pos=(first_finished_requests+i)%(MAX_IO*2);
176 if(finished_requests_id[request_pos]==*request_id){
177 break;
178 }
179 i++;
180 }
182 return mumps_io_error(-91,"Internal error in OOC Management layer (mumps_test_request_th (2))\n");
183 }
184 *flag=1;
185 }
186 }
187 }
188 /* printf("je vais essayer de nettoyer %d\n",nb_finished_requests);
189 pthread_mutex_unlock(&io_mutex);
190 sleep (10); */
192 /* printf("ici nb_finished_requests=%d\n",nb_finished_requests);*/
195 pthread_mutex_unlock(&io_mutex);
196 return 0;
197}

◆ mumps_wait_req_sem_th()

MUMPS_INT mumps_wait_req_sem_th ( MUMPS_INT * request_id)

Definition at line 198 of file mumps_io_thread.c.

198 {
199 MUMPS_INT i,j;
200 j=first_active;
201 for(i=0;i<nb_active;i++){
202 if(io_queue[j].req_num==*request_id) break;
203 j=(j+1)%MAX_IO;
204 }
205 if(i<nb_active){
206 mumps_wait_sem(&(io_queue[j].int_local_cond),&(io_queue[j].local_cond));
207 }
208 return 0;
209}

◆ mumps_wait_request_th()

MUMPS_INT mumps_wait_request_th ( MUMPS_INT * request_id)

Definition at line 210 of file mumps_io_thread.c.

210 {
211 /* waits for the termination of the request "request_id" */
213 if(with_sem!=2){
214 while(!flag){
215 ierr=mumps_test_request_th(request_id,&flag);
216 if(ierr!=0)return ierr;
217 }
218 }else{
219 ierr=mumps_test_request_th(request_id,&flag);
220 if(ierr!=0)return ierr;
221 if(!flag){
222 mumps_wait_req_sem_th(request_id);
223 ierr=mumps_test_request_th(request_id,&flag);
224 if(ierr!=0)return ierr;
225 }
226 }
227 return 0;
228}
MUMPS_INT mumps_test_request_th(MUMPS_INT *request_id, MUMPS_INT *flag)
MUMPS_INT mumps_wait_req_sem_th(MUMPS_INT *request_id)

◆ mumps_wait_sem()

MUMPS_INT mumps_wait_sem ( void * arg,
pthread_cond_t * cond )

Definition at line 534 of file mumps_io_thread.c.

534 {
535 MUMPS_INT *tmp_pointer;
536 switch(with_sem){
537 case 2:
538 pthread_mutex_lock(&io_mutex_cond);
539 tmp_pointer=(MUMPS_INT *)arg;
540 while(*tmp_pointer==0){
541 pthread_cond_wait(cond, &io_mutex_cond);
542 }
543 (*tmp_pointer)--;
544 pthread_mutex_unlock(&io_mutex_cond);
545 break;
546 default:
547 return mumps_io_error(-91,"Internal error in OOC Management layer (mumps_wait_sem)\n");
548 }
549 return 0;
550}

Variable Documentation

◆ cond_io

pthread_cond_t cond_io

Definition at line 25 of file mumps_io_thread.c.

◆ cond_nb_free_active_requests

pthread_cond_t cond_nb_free_active_requests

Definition at line 25 of file mumps_io_thread.c.

◆ cond_nb_free_finished_requests

pthread_cond_t cond_nb_free_finished_requests

Definition at line 25 of file mumps_io_thread.c.

◆ cond_stop

pthread_cond_t cond_stop

Definition at line 25 of file mumps_io_thread.c.

◆ current_req_num

MUMPS_INT current_req_num

Definition at line 22 of file mumps_io_thread.c.

◆ finished_requests_id

MUMPS_INT * finished_requests_id

Definition at line 31 of file mumps_io_thread.c.

◆ finished_requests_inode

MUMPS_INT* finished_requests_inode

Definition at line 31 of file mumps_io_thread.c.

◆ first_active

MUMPS_INT first_active

Definition at line 30 of file mumps_io_thread.c.

◆ first_finished_requests

MUMPS_INT first_finished_requests

Definition at line 31 of file mumps_io_thread.c.

◆ inactive_time_io_thread

double inactive_time_io_thread

Definition at line 36 of file mumps_io_thread.c.

◆ int_sem_io

MUMPS_INT int_sem_io

Definition at line 27 of file mumps_io_thread.c.

◆ int_sem_nb_free_active_requests

MUMPS_INT int_sem_nb_free_active_requests

Definition at line 27 of file mumps_io_thread.c.

◆ int_sem_nb_free_finished_requests

MUMPS_INT int_sem_nb_free_finished_requests

Definition at line 27 of file mumps_io_thread.c.

◆ int_sem_stop

MUMPS_INT int_sem_stop

Definition at line 27 of file mumps_io_thread.c.

◆ io_flag_stop

MUMPS_INT io_flag_stop

Definition at line 22 of file mumps_io_thread.c.

◆ io_mutex

pthread_mutex_t io_mutex

Definition at line 24 of file mumps_io_thread.c.

◆ io_mutex_cond

pthread_mutex_t io_mutex_cond

Definition at line 26 of file mumps_io_thread.c.

◆ io_queue

struct request_io* io_queue

Definition at line 29 of file mumps_io_thread.c.

◆ io_thread

pthread_t io_thread

Definition at line 23 of file mumps_io_thread.c.

◆ last_active

MUMPS_INT last_active

Definition at line 30 of file mumps_io_thread.c.

◆ last_finished_requests

MUMPS_INT last_finished_requests

Definition at line 32 of file mumps_io_thread.c.

◆ main_thread

pthread_t main_thread

Definition at line 23 of file mumps_io_thread.c.

◆ mumps_owns_mutex

MUMPS_INT mumps_owns_mutex

Definition at line 33 of file mumps_io_thread.c.

◆ nb_active

MUMPS_INT nb_active

Definition at line 30 of file mumps_io_thread.c.

◆ nb_finished_requests

MUMPS_INT nb_finished_requests

Definition at line 32 of file mumps_io_thread.c.

◆ origin_time_io_thread

struct timeval origin_time_io_thread

Definition at line 38 of file mumps_io_thread.c.

◆ smallest_request_id

MUMPS_INT smallest_request_id

Definition at line 32 of file mumps_io_thread.c.

◆ test_request_called_from_mumps

MUMPS_INT test_request_called_from_mumps

Definition at line 34 of file mumps_io_thread.c.

◆ time_flag_io_thread

MUMPS_INT time_flag_io_thread

Definition at line 37 of file mumps_io_thread.c.

◆ with_sem

MUMPS_INT with_sem

Definition at line 28 of file mumps_io_thread.c.