20#if ! defined(MUMPS_WIN32) && ! defined(WITHOUT_PTHREAD)
45 struct timeval start_time,end_time;
48 gettimeofday(&start_time,NULL);
53 gettimeofday(&end_time,NULL);
72 switch(current_io_request->
io_type)
76 current_io_request->
size,
78 current_io_request->
vaddr,
86 current_io_request->
size,
88 current_io_request->
vaddr,
95 printf(
"Error : Mumps_IO : Operation %d is neither READ nor WRITE\n",current_io_request->
io_type);
161 if(
io_queue[request_pos].req_num==*request_id){
167 return mumps_io_error(-91,
"Internal error in OOC Management layer (mumps_test_request_th (1))\n");
182 return mumps_io_error(-91,
"Internal error in OOC Management layer (mumps_test_request_th (2))\n");
202 if(
io_queue[j].req_num==*request_id)
break;
216 if(ierr!=0)
return ierr;
220 if(ierr!=0)
return ierr;
224 if(ierr!=0)
return ierr;
275 return mumps_io_error(-91,
"Internal error in OOC Management layer (mumps_clean_request_th)\n");
312 sprintf(buf,
"Internal error: mumps_low_level_init_ooc_c_th should not to be called with strat_IO=%d\n",*async);
319 mumps_io_init_pointers_lock();
343 pthread_cond_init(&
cond_io,NULL);
350 sprintf(buf,
"Internal error: mumps_low_level_init_ooc_c_th should not to be called with strat_IO=%d\n",*async);
364 void * address_block,
365 long long block_size,
395 io_queue[cur_req].addr=address_block;
407 return mumps_io_error(*ierr,
"Internal error in OOC Management layer (mumps_async_write_th)\n");
420 void * address_block,
421 long long block_size,
458 io_queue[cur_req].addr=address_block;
470 return mumps_io_error(*ierr,
"Internal error in OOC Management layer (mumps_async_read_th)\n");
500 mumps_io_destroy_pointers_lock();
505 pthread_cond_destroy(&
cond_io);
530 return mumps_io_error(-91,
"Internal error in OOC Management layer (mumps__get_sem)\n");
540 while(*tmp_pointer==0){
547 return mumps_io_error(-91,
"Internal error in OOC Management layer (mumps_wait_sem)\n");
559 pthread_cond_broadcast(cond);
564 return mumps_io_error(-91,
"Internal error in OOC Management layer (mumps_post_sem)\n");
end[inform, rinform, sol, inst, schur, redrhs, pivnul_list, sym_perm, uns_perm, icntl, cntl, colsca_out, rowsca_out, keep_out, dkeep_out]
MUMPS_INT mumps_io_flag_async
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)
MUMPS_INT mumps_check_error_th()
MUMPS_INT mumps_io_destroy_err_lock()
MUMPS_INT mumps_io_init_err_lock()
MUMPS_INT mumps_io_sys_error(MUMPS_INT mumps_errno, const char *desc)
MUMPS_INT mumps_io_error(MUMPS_INT mumps_errno, const char *desc)
struct timeval origin_time_io_thread
double inactive_time_io_thread
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)
pthread_cond_t cond_nb_free_finished_requests
MUMPS_INT int_sem_nb_free_finished_requests
MUMPS_INT nb_finished_requests
MUMPS_INT mumps_clean_finished_queue_th()
MUMPS_INT mumps_owns_mutex
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)
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 test_request_called_from_mumps
struct request_io * io_queue
MUMPS_INT last_finished_requests
pthread_mutex_t io_mutex_cond
MUMPS_INT first_finished_requests
MUMPS_INT * finished_requests_id
MUMPS_INT * finished_requests_inode
MUMPS_INT smallest_request_id
MUMPS_INT current_req_num
MUMPS_INT mumps_clean_io_data_c_th(MUMPS_INT *myid)
MUMPS_INT mumps_is_there_finished_request_th(MUMPS_INT *flag)
MUMPS_INT mumps_low_level_init_ooc_c_th(MUMPS_INT *async, MUMPS_INT *ierr)
MUMPS_INT mumps_test_request_th(MUMPS_INT *request_id, MUMPS_INT *flag)
MUMPS_INT mumps_wait_request_th(MUMPS_INT *request_id)
MUMPS_INT mumps_wait_req_sem_th(MUMPS_INT *request_id)
MUMPS_INT time_flag_io_thread
MUMPS_INT mumps_wait_sem(void *arg, pthread_cond_t *cond)
void * mumps_async_thread_function_with_sem(void *arg)
MUMPS_INT mumps_get_sem(void *arg, MUMPS_INT *value)
MUMPS_INT mumps_clean_request_th(MUMPS_INT *request_id)
*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
pthread_cond_t local_cond