From b1910ae2ad93aeaae865eab93002e6383382d75c Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Thu, 26 May 2016 09:35:42 +0200 Subject: [PATCH] [simix] Use a C-like syntax for simcalls.in --- src/simix/simcalls.in | 160 +++++++++++++++++++++--------------------- src/simix/simcalls.py | 18 +++-- 2 files changed, 92 insertions(+), 86 deletions(-) diff --git a/src/simix/simcalls.in b/src/simix/simcalls.in index bc322903e3..235cacd72f 100644 --- a/src/simix/simcalls.in +++ b/src/simix/simcalls.in @@ -46,83 +46,83 @@ # ./include/simgrid/simix.h (otherwise you will get a warning at the # compilation time) -Proc H vm_suspend (void) (ind_vm, sg_host_t) -Proc H vm_resume (void) (ind_vm, sg_host_t) -Proc H vm_shutdown (void) (ind_vm, sg_host_t) -Proc H vm_save (void) (ind_vm, sg_host_t) -Proc H vm_restore (void) (ind_vm, sg_host_t) - -Proc H process_kill (void) (process, smx_process_t) -Proc H process_killall (void) (reset_pid, int) -Proc - process_cleanup (void) (process, smx_process_t) -Blck H process_suspend (void) (process, smx_process_t) -Proc H process_resume (void) (process, smx_process_t) -Proc H process_set_host (void) (process, smx_process_t) (dest, sg_host_t) -Func - process_is_suspended (int) (process, smx_process_t) -Blck H process_join (int) (process, smx_process_t) (timeout, double) -Blck H process_sleep (int) (duration, double) - -Func H execution_start (smx_synchro_t) (name, const char*) (flops_amount, double) (priority, double) (bound, double) (affinity_mask, unsigned long) -Func - execution_parallel_start (smx_synchro_t) (name, const char*) (host_nb, int) (host_list, sg_host_t*) (flops_amount, double*) (bytes_amount, double*) (amount, double) (rate, double) -Proc - execution_cancel (void) (execution, smx_synchro_t) -Proc - execution_set_priority (void) (execution, smx_synchro_t) (priority, double) -Proc - execution_set_bound (void) (execution, smx_synchro_t) (bound, double) -Proc - execution_set_affinity (void) (execution, smx_synchro_t) (ws, sg_host_t) (mask, unsigned long) -Blck H execution_wait (int) (execution, smx_synchro_t) - -Proc - process_on_exit (void) (process, smx_process_t) (fun, int_f_pvoid_pvoid_t) (data, void*) -Proc - process_auto_restart_set (void) (process, smx_process_t) (auto_restart, int) -Func H process_restart (smx_process_t) (process, smx_process_t) - -Func - mbox_create (smx_mailbox_t) (name, const char*) -Proc - mbox_set_receiver (void) (mbox, smx_mailbox_t) (receiver, smx_process_t) - -Func H comm_iprobe (smx_synchro_t) (mbox, smx_mailbox_t) (type, int) (src, int) (tag, int) (match_fun, simix_match_func_t) (data, void*) -Blck H comm_send (void) (sender, smx_process_t) (mbox, smx_mailbox_t) (task_size, double) (rate, double) (src_buff, void*) (src_buff_size, size_t) (match_fun, simix_match_func_t) (copy_data_fun, simix_copy_data_func_t) (data, void*) (timeout, double) -Func H comm_isend (smx_synchro_t) (sender, smx_process_t) (mbox, smx_mailbox_t) (task_size, double) (rate, double) (src_buff, void*) (src_buff_size, size_t) (match_fun, simix_match_func_t) (clean_fun, simix_clean_func_t) (copy_data_fun, simix_copy_data_func_t) (data, void*) (detached, int) -Blck H comm_recv (void) (receiver, smx_process_t) (mbox, smx_mailbox_t) (dst_buff, void*) (dst_buff_size, size_t*) (match_fun, simix_match_func_t) (copy_data_fun, simix_copy_data_func_t) (data, void*) (timeout, double) (rate, double) -Func H comm_irecv (smx_synchro_t) (receiver, smx_process_t) (mbox, smx_mailbox_t) (dst_buff, void*) (dst_buff_size, size_t*) (match_fun, simix_match_func_t) (copy_data_fun, simix_copy_data_func_t) (data, void*) (rate, double) -Blck H comm_waitany (int) (comms, xbt_dynar_t) -Blck H comm_wait (void) (comm, smx_synchro_t) (timeout, double) -Blck H comm_test (int) (comm, smx_synchro_t) -Blck H comm_testany (int) (comms, xbt_dynar_t) - -Func H mutex_init (smx_mutex_t) -Blck H mutex_lock (void) (mutex, smx_mutex_t) -Func H mutex_trylock (int) (mutex, smx_mutex_t) -Proc H mutex_unlock (void) (mutex, smx_mutex_t) - -Func - cond_init (smx_cond_t) -Proc - cond_signal (void) (cond, smx_cond_t) -Blck H cond_wait (void) (cond, smx_cond_t) (mutex, smx_mutex_t) -Blck H cond_wait_timeout (void) (cond, smx_cond_t) (mutex, smx_mutex_t) (timeout, double) -Proc - cond_broadcast (void) (cond, smx_cond_t) - -Func - sem_init (smx_sem_t) (capacity, unsigned int) -Proc H sem_release (void) (sem, smx_sem_t) -Func H sem_would_block (int) (sem, smx_sem_t) -Blck H sem_acquire (void) (sem, smx_sem_t) -Blck H sem_acquire_timeout (void) (sem, smx_sem_t) (timeout, double) -Func H sem_get_capacity (int) (sem, smx_sem_t) - -Blck H file_read (sg_size_t) (fd, smx_file_t) (size, sg_size_t) (host, sg_host_t) -Blck H file_write (sg_size_t) (fd, smx_file_t) (size, sg_size_t) (host, sg_host_t) -Blck H file_open (smx_file_t) (fullpath, const char*) (host, sg_host_t) -Blck H file_close (int) (fd, smx_file_t) (host, sg_host_t) -Func - file_unlink (int) (fd, smx_file_t) (host, sg_host_t) -Func H file_get_size (sg_size_t) (fd, smx_file_t) -Func H file_tell (sg_size_t) (fd, smx_file_t) -Func H file_seek (int) (fd, smx_file_t) (offset, sg_offset_t) (origin, int) -Func H file_get_info (xbt_dynar_t) (fd, smx_file_t) -Func H file_move (int) (fd, smx_file_t) (fullpath, const char*) - -Func H storage_get_free_size (sg_size_t) (storage, smx_storage_t) -Func H storage_get_used_size (sg_size_t) (name, smx_storage_t) -Func - storage_get_properties (xbt_dict_t) (storage, smx_storage_t) -Func - storage_get_content (xbt_dict_t) (storage, smx_storage_t) - -Func H asr_get_properties (xbt_dict_t) (name, const char*) -Func H mc_random (int) (min, int) (max, int) -Proc - set_category (void) (synchro, smx_synchro_t) (category, const char*) - -Proc - run_kernel (void) (code, void*) +Proc H void vm_suspend (sg_host_t ind_vm); +Proc H void vm_resume (sg_host_t ind_vm); +Proc H void vm_shutdown (sg_host_t ind_vm); +Proc H void vm_save (sg_host_t ind_vm); +Proc H void vm_restore (sg_host_t ind_vm); + +Proc H void process_kill (smx_process_t process); +Proc H void process_killall (int reset_pid); +Proc - void process_cleanup (smx_process_t process); +Blck H void process_suspend (smx_process_t process); +Proc H void process_resume (smx_process_t process); +Proc H void process_set_host (smx_process_t process, sg_host_t dest); +Func - int process_is_suspended (smx_process_t process); +Blck H int process_join (smx_process_t process, double timeout); +Blck H int process_sleep (double duration); + +Func H smx_synchro_t execution_start (const char* name, double flops_amount, double priority, double bound, unsigned long affinity_mask); +Func - smx_synchro_t execution_parallel_start (const char* name, int host_nb, sg_host_t* host_list, double* flops_amount, double* bytes_amount, double amount, double rate); +Proc - void execution_cancel (smx_synchro_t execution); +Proc - void execution_set_priority (smx_synchro_t execution, double priority); +Proc - void execution_set_bound (smx_synchro_t execution, double bound); +Proc - void execution_set_affinity (smx_synchro_t execution, sg_host_t ws, unsigned long mask); +Blck H int execution_wait (smx_synchro_t execution); + +Proc - void process_on_exit (smx_process_t process, int_f_pvoid_pvoid_t fun, void* data); +Proc - void process_auto_restart_set (smx_process_t process, int auto_restart); +Func H smx_process_t process_restart (smx_process_t process); + +Func - smx_mailbox_t mbox_create (const char* name); +Proc - void mbox_set_receiver (smx_mailbox_t mbox, smx_process_t receiver); + +Func H smx_synchro_t comm_iprobe (smx_mailbox_t mbox, int type, int src, int tag, simix_match_func_t match_fun, void* data); +Blck H void comm_send (smx_process_t sender, smx_mailbox_t mbox, double task_size, double rate, void* src_buff, size_t src_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double timeout); +Func H smx_synchro_t comm_isend (smx_process_t sender, smx_mailbox_t mbox, double task_size, double rate, void* src_buff, size_t src_buff_size, simix_match_func_t match_fun, simix_clean_func_t clean_fun, simix_copy_data_func_t copy_data_fun, void* data, int detached); +Blck H void comm_recv (smx_process_t receiver, smx_mailbox_t mbox, void* dst_buff, size_t* dst_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double timeout, double rate); +Func H smx_synchro_t comm_irecv (smx_process_t receiver, smx_mailbox_t mbox, void* dst_buff, size_t* dst_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double rate); +Blck H int comm_waitany (xbt_dynar_t comms); +Blck H void comm_wait (smx_synchro_t comm, double timeout); +Blck H int comm_test (smx_synchro_t comm); +Blck H int comm_testany (xbt_dynar_t comms); + +Func H smx_mutex_t mutex_init (); +Blck H void mutex_lock (smx_mutex_t mutex); +Func H int mutex_trylock (smx_mutex_t mutex); +Proc H void mutex_unlock (smx_mutex_t mutex); + +Func - smx_cond_t cond_init (); +Proc - void cond_signal (smx_cond_t cond); +Blck H void cond_wait (smx_cond_t cond, smx_mutex_t mutex); +Blck H void cond_wait_timeout (smx_cond_t cond, smx_mutex_t mutex, double timeout); +Proc - void cond_broadcast (smx_cond_t cond); + +Func - smx_sem_t sem_init (unsigned int capacity); +Proc H void sem_release (smx_sem_t sem); +Func H int sem_would_block (smx_sem_t sem); +Blck H void sem_acquire (smx_sem_t sem); +Blck H void sem_acquire_timeout (smx_sem_t sem, double timeout); +Func H int sem_get_capacity (smx_sem_t sem); + +Blck H sg_size_t file_read (smx_file_t fd, sg_size_t size, sg_host_t host); +Blck H sg_size_t file_write (smx_file_t fd, sg_size_t size, sg_host_t host); +Blck H smx_file_t file_open (const char* fullpath, sg_host_t host); +Blck H int file_close (smx_file_t fd, sg_host_t host); +Func - int file_unlink (smx_file_t fd, sg_host_t host); +Func H sg_size_t file_get_size (smx_file_t fd); +Func H sg_size_t file_tell (smx_file_t fd); +Func H int file_seek (smx_file_t fd, sg_offset_t offset, int origin); +Func H xbt_dynar_t file_get_info (smx_file_t fd); +Func H int file_move (smx_file_t fd, const char* fullpath); + +Func H sg_size_t storage_get_free_size (smx_storage_t storage); +Func H sg_size_t storage_get_used_size (smx_storage_t name); +Func - xbt_dict_t storage_get_properties (smx_storage_t storage); +Func - xbt_dict_t storage_get_content (smx_storage_t storage); + +Func H xbt_dict_t asr_get_properties (const char* name); +Func H int mc_random (int min, int max); +Proc - void set_category (smx_synchro_t synchro, const char* category); + +Proc - void run_kernel (void* code); diff --git a/src/simix/simcalls.py b/src/simix/simcalls.py index aa6e1992a0..56242f1185 100755 --- a/src/simix/simcalls.py +++ b/src/simix/simcalls.py @@ -43,7 +43,7 @@ class Simcall(object): print '# ERROR: No function calling simcall_BODY_%s' % self.name print '# Add something like this to libsmx.c:' print '%s simcall_%s(%s) {' % (self.res.rettype(), self.name, ', '.join('%s %s' % (arg.rettype(), arg.name) for arg in self.args)) - print ' return simcall_BODY_%s(%s);' % (self.name) + print ' return simcall_BODY_%s(%s);' % (self.name, "...") print '}' return False @@ -169,18 +169,24 @@ def parse(fn): if line.startswith('#') or not line: continue match = re.match( - r'(\S*?) *(\S*?) *(\S*?) *\((.*?)(?:, *(.*?))?\) *(.*)', line) + r'^(Proc|Func|Blck)\s*([H-])\s*(\S*)\s*(\S*)\s*\(*([^\(\)]*)\)\s*;?$', line) assert match, line - ans, handler, name, rest, resc, args = match.groups() + ans, handler, ret, name, args = match.groups() assert (ans == 'Proc' or ans == 'Func' or ans == 'Blck'), "Invalid call type: '%s'. Faulty line:\n%s\n" % ( ans, line) assert (handler == 'H' or handler == '-'), "Invalid need_handler indication: '%s'. Faulty line:\n%s\n" % ( handler, line) sargs = [] - for n, t in re.findall(r'\((.*?), *(.*?)\)', args): - sargs.append(Arg(n, t)) + if not re.match("^\s*$", args): + for arg in re.split(",", args): + args = args.strip() + match = re.match("^(.*?)\s*?(\S+)$", arg) + t, n = match.groups() + t = t.strip() + n = n.strip() + sargs.append(Arg(n, t)) sim = Simcall(name, handler == 'H', - Arg('result', rest), sargs, ans) + Arg('result', ret), sargs, ans) if resdi is None: simcalls.append(sim) else: -- 2.20.1