- parmap->workers[i] = xbt_os_thread_create(NULL, xbt_parmap_mc_worker_main,
- data, NULL);
+ parmap->workers[i] = xbt_os_thread_create(NULL, xbt_parmap_mc_worker_main, data, NULL);
case XBT_PARMAP_POSIX:
parmap->master_wait_f = xbt_parmap_posix_master_wait;
parmap->worker_signal_f = xbt_parmap_posix_worker_signal;
case XBT_PARMAP_POSIX:
parmap->master_wait_f = xbt_parmap_posix_master_wait;
parmap->worker_signal_f = xbt_parmap_posix_worker_signal;
parmap->master_wait_f = xbt_parmap_busy_master_wait;
parmap->worker_signal_f = xbt_parmap_busy_worker_signal;
parmap->master_signal_f = xbt_parmap_busy_master_signal;
parmap->master_wait_f = xbt_parmap_busy_master_wait;
parmap->worker_signal_f = xbt_parmap_busy_worker_signal;
parmap->master_signal_f = xbt_parmap_busy_master_signal;
while (1) {
parmap->worker_wait_f(parmap, ++round);
if (parmap->status == XBT_PARMAP_WORK) {
while (1) {
parmap->worker_wait_f(parmap, ++round);
if (parmap->status == XBT_PARMAP_WORK) {
XBT_DEBUG("Worker %d got a job", data->worker_id);
xbt_parmap_work(parmap);
parmap->worker_signal_f(parmap);
XBT_DEBUG("Worker %d has finished", data->worker_id);
XBT_DEBUG("Worker %d got a job", data->worker_id);
xbt_parmap_work(parmap);
parmap->worker_signal_f(parmap);
XBT_DEBUG("Worker %d has finished", data->worker_id);
void* start = (char*)parmap->mc_data + (data_size*worker_id*sizeof(void*));
void* end = MIN((char *)start + data_size* sizeof(void*), (char*)parmap->mc_data + parmap->length*sizeof(void*));
void* start = (char*)parmap->mc_data + (data_size*worker_id*sizeof(void*));
void* end = MIN((char *)start + data_size* sizeof(void*), (char*)parmap->mc_data + parmap->length*sizeof(void*));
//XBT_CRITICAL("Worker %d : %p -> %p (%d)", worker_id, start, end, data_size);
while ( start < end && parmap->finish == -1) {
//XBT_CRITICAL("Worker %d : %p -> %p (%d)", worker_id, start, end, data_size);
while ( start < end && parmap->finish == -1) {
int res = parmap->snapshot_compare(*(void**)start, parmap->ref_snapshot);
start = (char *)start + sizeof(start);
if (!res){
int res = parmap->snapshot_compare(*(void**)start, parmap->ref_snapshot);
start = (char *)start + sizeof(start);
if (!res){
parmap->finish = ((char*)start - (char*)parmap->mc_data) / sizeof(void*);
//XBT_CRITICAL("Find good one %p (%p)", start, parmap->mc_data);
break;
parmap->finish = ((char*)start - (char*)parmap->mc_data) / sizeof(void*);
//XBT_CRITICAL("Find good one %p (%p)", start, parmap->mc_data);
break;
while (1) {
parmap->worker_wait_f(parmap, ++round);
if (parmap->status == XBT_PARMAP_WORK) {
while (1) {
parmap->worker_wait_f(parmap, ++round);
if (parmap->status == XBT_PARMAP_WORK) {
XBT_DEBUG("Worker %d got a job", data->worker_id);
xbt_parmap_mc_work(parmap, data->worker_id);
parmap->worker_signal_f(parmap);
XBT_DEBUG("Worker %d has finished", data->worker_id);
XBT_DEBUG("Worker %d got a job", data->worker_id);
xbt_parmap_mc_work(parmap, data->worker_id);
parmap->worker_signal_f(parmap);
XBT_DEBUG("Worker %d has finished", data->worker_id);