grasp_mpi_engine.h
Go to the documentation of this file.
19 /* master_info and worker_info are opaque data that can be interpreted only by the callback functions
20 * If the author of callback functions don't need to pass extra information, he or she can leave these
23 typedef order_t * (*order_callback_t)(int worker_rank, const void *master_info, bool *no_more_order, int *num_orders); /* master_info is optional and can be left to NULL
26 * num_orders must be given the address of a variable in which the number of orders previously performed will be stored
29 typedef result_t * (*task_callback_t)(const order_t *order, const void *worker_info); /* worker_info is optional and can be left to NULL */
31 typedef void (*progress_info_callback_t)(int num_orders_performed, const result_t *result, const void *master_info);
35 /* The user can provide callback routines for preparing orders, preparing results, collecting results and ending the processing */
36 extern void grasp_mpi_engine_set_order_callback(order_callback_t order_callback, int order_payload_max_size);
37 extern void grasp_mpi_engine_set_task_callback(task_callback_t task_callback, int result_payload_max_size);
39 extern void grasp_mpi_engine_set_progress_info_callback(progress_info_callback_t progress_info_callback);
41 extern order_t *grasp_mpi_engine_new_order(const char *label, size_t payload_size, const void *payload); /* to be called by an order callback function (see dummy example in grasp_mpi_engine.c) */
42 extern result_t *grasp_mpi_engine_new_result(const char *label, size_t payload_size, const void *payload); /* to be called by a result callback function (see dummy example in grasp_mpi_engine.c) */
43 extern void grasp_mpi_engine_delete_order(order_t *order); /* to be called only by the MPI workflow (implemented by grasp_mpi_engine.c) */
44 extern void grasp_mpi_engine_delete_result(result_t *result); /* to be called only by the MPI workflow (implemented by grasp_mpi_engine.c) */
45 extern void grasp_mpi_engine_get_order_label(const order_t *order, size_t label_max_size, char *label); /* label is assumed to be allocated by the caller */
46 extern void grasp_mpi_engine_get_result_labbel(const result_t *result, size_t label_max_size, char *label); /* label is assumed to be allocated by the caller */
48 extern void *grasp_mpi_engine_get_order_payload(const order_t *order); /* returns a read-only reference to the payload of an order */
49 extern void *grasp_mpi_engine_get_result_payload(const result_t *result); /* returns a read-only reference to the payload of a result */
52 extern bool grasp_mpi_engine_is_master(void); /* returns true if the current processing is the master */
53 extern bool grasp_mpi_engine_is_worker(void); /* returns true if the current processing is a worker */
54 extern int grasp_mpi_engine_main_loop(const void *master_info, const void *worker_info); /* master_info and worker_info are optional information that can be passed
60 extern void grasp_mpi_engine_set_polling_time(int polling_time); /* sets the polling time, in seconds (the master will sleep during polling_time seconds before checking the list of available workers). Default value is 1 second. Setting polling_time to 0 is possible but not recommended (it would produce busy waiting and increase considerably the overhead on the system). A too large value will degrade the performance of the application. */
62 extern void grasp_mpi_engine_set_maximum_job_time(int maximum_job_time); /* sets the maximum time, in seconds, allowed for a task. If the task takes longer, it will be interrupted (default value is 0, meaning no interruption) */
64 /* these are not really part of the API but dummy callback functions for quick tests, debugging and example of usage */
65 extern order_t *grasp_mpi_engine_dummy_order_callback(int worker_rank, const void *master_info, bool *no_more_order, int *num_orders); /* called by the master to prepare an order for a worker */
66 extern result_t *grasp_mpi_engine_dummy_task_callback(const order_t *order, const void *worker_info); /* called by a worker in response to an order */
67 extern bool grasp_mpi_engine_dummy_termination_condition_callback(int num_results_received, const void *master_info); /* called by the master to stop the processing */
order_t * grasp_mpi_engine_new_order(const char *label, size_t payload_size, const void *payload)
Definition: grasp_mpi_engine.c:236
void * grasp_mpi_engine_get_result_payload(const result_t *result)
Definition: grasp_mpi_engine.c:716
void grasp_mpi_engine_set_maximum_job_time(int maximum_job_time)
int grasp_mpi_engine_main_loop(const void *master_info, const void *worker_info)
Definition: grasp_mpi_engine.c:848
result_t *(* task_callback_t)(const order_t *order, const void *worker_info)
Definition: grasp_mpi_engine.h:29
void grasp_mpi_engine_set_collect_callback(collect_callback_t collect_callback)
Definition: grasp_mpi_engine.c:792
void grasp_mpi_engine_set_polling_time(int polling_time)
void grasp_mpi_engine_set_progress_info_callback(progress_info_callback_t progress_info_callback)
Definition: grasp_mpi_engine.c:796
void grasp_mpi_engine_get_order_label(const order_t *order, size_t label_max_size, char *label)
Definition: grasp_mpi_engine.c:310
void grasp_mpi_engine_delete_order(order_t *order)
Definition: grasp_mpi_engine.c:296
void grasp_mpi_engine_get_result_labbel(const result_t *result, size_t label_max_size, char *label)
void * grasp_mpi_engine_get_order_payload(const order_t *order)
Definition: grasp_mpi_engine.c:711
result_t * grasp_mpi_engine_dummy_task_callback(const order_t *order, const void *worker_info)
Definition: grasp_mpi_engine.c:746
order_t * grasp_mpi_engine_dummy_order_callback(int worker_rank, const void *master_info, bool *no_more_order, int *num_orders)
Definition: grasp_mpi_engine.c:721
void grasp_mpi_engine_set_task_callback(task_callback_t task_callback, int result_payload_max_size)
Definition: grasp_mpi_engine.c:778
int(* collect_callback_t)(const result_t *result, const void *master_info)
Definition: grasp_mpi_engine.h:30
void(* progress_info_callback_t)(int num_orders_performed, const result_t *result, const void *master_info)
Definition: grasp_mpi_engine.h:31
Definition: grasp_mpi_engine.c:70
order_t *(* order_callback_t)(int worker_rank, const void *master_info, bool *no_more_order, int *num_orders)
Definition: grasp_mpi_engine.h:23
void grasp_mpi_engine_set_appname(const char *appname)
Definition: grasp_mpi_engine.c:707
result_t * grasp_mpi_engine_new_result(const char *label, size_t payload_size, const void *payload)
Definition: grasp_mpi_engine.c:266
void grasp_mpi_engine_set_order_callback(order_callback_t order_callback, int order_payload_max_size)
Definition: grasp_mpi_engine.c:765
void grasp_mpi_engine_delete_result(result_t *result)
Definition: grasp_mpi_engine.c:303
void grasp_mpi_engine_set_debug_level(int debug_level)
Definition: grasp_mpi_engine.c:703
bool grasp_mpi_engine_dummy_termination_condition_callback(int num_results_received, const void *master_info)
Definition: grasp_mpi_engine.c:61