Skip to content

Commit

Permalink
Merge pull request chapel-lang#5206 from srirajpaul/task_id_conv_apply
Browse files Browse the repository at this point in the history
Using API to compare and print Task ID.

[Contributed by @srirajpaul]
[Reviewed by @gbtitus, prodded by @ben-albrecht , @mppf , and @ronawho ]

Now that we have functions to compare and print task IDs in all tasking
implementations, replace all explicit comparisons and prints with those
throughout the runtime.
  • Loading branch information
gbtitus authored Feb 8, 2017
2 parents 56a5d64 + dd7b03a commit 6c8ccf4
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 37 deletions.
2 changes: 1 addition & 1 deletion runtime/include/qio/qio.h
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ typedef qio_fdflag_t fdflag_t;
// make a re-entrant lock.
typedef struct {
chpl_sync_aux_t sv;
int64_t owner; // task ID of owner.
chpl_taskID_t owner; // task ID of owner.
uint64_t count; // how many times owner has locked.
} qio_lock_t;

Expand Down
77 changes: 47 additions & 30 deletions runtime/src/chpl-visual-debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ static void cb_comm_executeOn_fast(const chpl_comm_cb_info_t *info);
int chpl_vdebug_fd = -1;
int chpl_vdebug = 0;

#define TID_STRING(buff, tid) (chpl_task_idToString(buff, CHPL_TASK_ID_STRING_MAX_LEN, tid))

int chpl_dprintf (int fd, const char * format, ...) {
char buffer[2048];
va_list ap;
Expand Down Expand Up @@ -124,6 +126,7 @@ void chpl_vdebug_start (const char *fileroot, double now) {
struct rusage ru;
struct timeval tv;
chpl_taskID_t startTask = chpl_task_getId();
char buff[CHPL_TASK_ID_STRING_MAX_LEN];
(void) gettimeofday (&tv, NULL);

install_callbacks();
Expand Down Expand Up @@ -151,8 +154,8 @@ void chpl_vdebug_start (const char *fileroot, double now) {
ru.ru_stime.tv_usec = 0;
}
chpl_dprintf (chpl_vdebug_fd,
"ChplVdebug: ver 1.2 nodes %d nid %d tid %d seq %.3lf %lld.%06ld %ld.%06ld %ld.%06ld \n",
chpl_numNodes, chpl_nodeID, (int) startTask, now,
"ChplVdebug: ver 1.2 nodes %d nid %d tid %s seq %.3lf %lld.%06ld %ld.%06ld %ld.%06ld \n",
chpl_numNodes, chpl_nodeID, TID_STRING(buff, startTask), now,
(long long) tv.tv_sec, (long) tv.tv_usec,
(long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec,
(long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec );
Expand Down Expand Up @@ -196,6 +199,7 @@ void chpl_vdebug_stop (void) {
struct rusage ru;
struct timeval tv;
chpl_taskID_t stopTask = chpl_task_getId();
char buff[CHPL_TASK_ID_STRING_MAX_LEN];

// First, shutdown VisualDebug
chpl_vdebug = 0;
Expand All @@ -211,11 +215,11 @@ void chpl_vdebug_stop (void) {
ru.ru_stime.tv_usec = 0;
}
// Generate the End record
chpl_dprintf (chpl_vdebug_fd, "End: %lld.%06ld %ld.%06ld %ld.%06ld %d %d\n",
chpl_dprintf (chpl_vdebug_fd, "End: %lld.%06ld %ld.%06ld %ld.%06ld %d %s\n",
(long long) tv.tv_sec, (long) tv.tv_usec,
(long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec,
(long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec,
chpl_nodeID, (int) stopTask);
chpl_nodeID, TID_STRING(buff, stopTask));
close (chpl_vdebug_fd);
}
}
Expand All @@ -229,9 +233,10 @@ void chpl_vdebug_stop (void) {
void chpl_vdebug_mark (void) {
struct timeval tv;
chpl_taskID_t tagTask = chpl_task_getId();
char buff[CHPL_TASK_ID_STRING_MAX_LEN];
(void) gettimeofday (&tv, NULL);
chpl_dprintf (chpl_vdebug_fd, "VdbMark: %lld.%06ld %d %lu\n",
(long long) tv.tv_sec, (long) tv.tv_usec, chpl_nodeID, (unsigned long)tagTask );
chpl_dprintf (chpl_vdebug_fd, "VdbMark: %lld.%06ld %d %s\n",
(long long) tv.tv_sec, (long) tv.tv_usec, chpl_nodeID, TID_STRING(buff, tagTask) );
}

// Record> tname: tag# tagname
Expand All @@ -247,6 +252,7 @@ void chpl_vdebug_tag (int tagno) {
struct timeval tv;

chpl_taskID_t tagTask = chpl_task_getId();
char buff[CHPL_TASK_ID_STRING_MAX_LEN];

(void) gettimeofday (&tv, NULL);
if ( getrusage (RUSAGE_SELF, &ru) < 0) {
Expand All @@ -255,11 +261,11 @@ void chpl_vdebug_tag (int tagno) {
ru.ru_stime.tv_sec = 0;
ru.ru_stime.tv_usec = 0;
}
chpl_dprintf (chpl_vdebug_fd, "Tag: %lld.%06ld %ld.%06ld %ld.%06ld %d %d %d\n",
chpl_dprintf (chpl_vdebug_fd, "Tag: %lld.%06ld %ld.%06ld %ld.%06ld %d %s %d\n",
(long long) tv.tv_sec, (long) tv.tv_usec,
(long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec,
(long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec,
chpl_nodeID, (int) tagTask, tagno);
chpl_nodeID, TID_STRING(buff, tagTask), tagno);
chpl_vdebug = 1;
}

Expand All @@ -269,6 +275,7 @@ void chpl_vdebug_pause (int tagno) {
struct rusage ru;
struct timeval tv;
chpl_taskID_t pauseTask = chpl_task_getId();
char buff[CHPL_TASK_ID_STRING_MAX_LEN];

if (chpl_vdebug_fd >=0 && chpl_vdebug == 1) {
(void) gettimeofday (&tv, NULL);
Expand All @@ -278,11 +285,11 @@ void chpl_vdebug_pause (int tagno) {
ru.ru_stime.tv_sec = 0;
ru.ru_stime.tv_usec = 0;
}
chpl_dprintf (chpl_vdebug_fd, "Pause: %lld.%06ld %ld.%06ld %ld.%06ld %d %d %d\n",
chpl_dprintf (chpl_vdebug_fd, "Pause: %lld.%06ld %ld.%06ld %ld.%06ld %d %s %d\n",
(long long) tv.tv_sec, (long) tv.tv_usec,
(long) ru.ru_utime.tv_sec, (long) ru.ru_utime.tv_usec,
(long) ru.ru_stime.tv_sec, (long) ru.ru_stime.tv_usec,
chpl_nodeID, (int) pauseTask, tagno);
chpl_nodeID, TID_STRING(buff, pauseTask), tagno);
chpl_vdebug = 0;
}
}
Expand All @@ -302,11 +309,12 @@ void cb_comm_put_nb (const chpl_comm_cb_info_t *info) {
struct timeval tv;
const struct chpl_comm_info_comm *cm = &info->iu.comm;
chpl_taskID_t commTask = chpl_task_getId();
char buff[CHPL_TASK_ID_STRING_MAX_LEN];
(void) gettimeofday (&tv, NULL);
chpl_dprintf (chpl_vdebug_fd,
"nb_put: %lld.%06ld %d %d %lu %#lx %#lx %d %d %d %d %d\n",
"nb_put: %lld.%06ld %d %d %s %#lx %#lx %d %d %d %d %d\n",
(long long) tv.tv_sec, (long) tv.tv_usec, info->localNodeID,
info->remoteNodeID, (unsigned long) commTask, (unsigned long) cm->addr,
info->remoteNodeID, TID_STRING(buff, commTask), (unsigned long) cm->addr,
(unsigned long) cm->raddr, 1, cm->typeIndex, (int)cm->size,
cm->lineno, cm->filename);
}
Expand All @@ -322,11 +330,12 @@ void cb_comm_get_nb (const chpl_comm_cb_info_t *info) {
struct timeval tv;
const struct chpl_comm_info_comm *cm = &info->iu.comm;
chpl_taskID_t commTask = chpl_task_getId();
char buff[CHPL_TASK_ID_STRING_MAX_LEN];
(void) gettimeofday (&tv, NULL);
chpl_dprintf (chpl_vdebug_fd,
"nb_get: %lld.%06ld %d %d %lu %#lx %#lx %d %d %d %d %d\n",
"nb_get: %lld.%06ld %d %d %s %#lx %#lx %d %d %d %d %d\n",
(long long) tv.tv_sec, (long) tv.tv_usec, info->localNodeID,
info->remoteNodeID, (unsigned long)commTask, (unsigned long) cm->addr,
info->remoteNodeID, TID_STRING(buff, commTask), (unsigned long) cm->addr,
(unsigned long) cm->raddr, 1, cm->typeIndex, (int)cm->size,
cm->lineno, cm->filename);
}
Expand All @@ -341,11 +350,12 @@ void cb_comm_put (const chpl_comm_cb_info_t *info) {
struct timeval tv;
const struct chpl_comm_info_comm *cm = &info->iu.comm;
chpl_taskID_t commTask = chpl_task_getId();
char buff[CHPL_TASK_ID_STRING_MAX_LEN];
(void) gettimeofday (&tv, NULL);
chpl_dprintf (chpl_vdebug_fd,
"put: %lld.%06ld %d %d %lu %#lx %#lx %d %d %d %d %d\n",
"put: %lld.%06ld %d %d %s %#lx %#lx %d %d %d %d %d\n",
(long long) tv.tv_sec, (long) tv.tv_usec, info->localNodeID,
info->remoteNodeID, (unsigned long) commTask, (unsigned long) cm->addr,
info->remoteNodeID, TID_STRING(buff, commTask), (unsigned long) cm->addr,
(unsigned long) cm->raddr, 1, cm->typeIndex, (int)cm->size,
cm->lineno, cm->filename);
}
Expand All @@ -361,11 +371,12 @@ void cb_comm_get (const chpl_comm_cb_info_t *info) {
struct timeval tv;
const struct chpl_comm_info_comm *cm = &info->iu.comm;
chpl_taskID_t commTask = chpl_task_getId();
char buff[CHPL_TASK_ID_STRING_MAX_LEN];
(void) gettimeofday (&tv, NULL);
chpl_dprintf (chpl_vdebug_fd,
"get: %lld.%06ld %d %d %lu %#lx %#lx %d %d %d %d %d\n",
"get: %lld.%06ld %d %d %s %#lx %#lx %d %d %d %d %d\n",
(long long) tv.tv_sec, (long) tv.tv_usec, info->localNodeID,
info->remoteNodeID, (unsigned long) commTask, (unsigned long) cm->addr,
info->remoteNodeID, TID_STRING(buff, commTask), (unsigned long) cm->addr,
(unsigned long) cm->raddr, 1, cm->typeIndex, (int)cm->size,
cm->lineno, cm->filename);
}
Expand All @@ -379,11 +390,12 @@ void cb_comm_put_strd (const chpl_comm_cb_info_t *info) {
struct timeval tv;
const struct chpl_comm_info_comm_strd *cm = &info->iu.comm_strd;
chpl_taskID_t commTask = chpl_task_getId();
char buff[CHPL_TASK_ID_STRING_MAX_LEN];
(void) gettimeofday (&tv, NULL);
chpl_dprintf (chpl_vdebug_fd,
"st_put: %lld.%06ld %d %ld %lu %#lx %#lx 1 %zd %d %d %d\n",
"st_put: %lld.%06ld %d %ld %s %#lx %#lx 1 %zd %d %d %d\n",
(long long) tv.tv_sec, (long) tv.tv_usec, info->localNodeID,
(long) info->remoteNodeID, (unsigned long) commTask,
(long) info->remoteNodeID, TID_STRING(buff, commTask),
(unsigned long) cm->srcaddr, (unsigned long) cm->dstaddr, cm->elemSize,
cm->typeIndex, cm->lineno, cm->filename);
// printout srcstrides and dststrides and stridelevels and count?
Expand All @@ -401,11 +413,12 @@ void cb_comm_get_strd (const chpl_comm_cb_info_t *info) {
struct timeval tv;
const struct chpl_comm_info_comm_strd *cm = &info->iu.comm_strd;
chpl_taskID_t commTask = chpl_task_getId();
char buff[CHPL_TASK_ID_STRING_MAX_LEN];
(void) gettimeofday (&tv, NULL);
chpl_dprintf (chpl_vdebug_fd,
"st_get: %lld.%06ld %d %ld %lu %#lx %#lx 1 %zd %d %d %d\n",
"st_get: %lld.%06ld %d %ld %s %#lx %#lx 1 %zd %d %d %d\n",
(long long) tv.tv_sec, (long) tv.tv_usec, info->localNodeID,
(long) info->remoteNodeID, (unsigned long) commTask,
(long) info->remoteNodeID, TID_STRING(buff, commTask),
(unsigned long) cm->dstaddr, (unsigned long) cm->srcaddr, cm->elemSize,
cm->typeIndex, cm->lineno, cm->filename);
// print out the srcstrides and dststrides and stridelevels and count?
Expand All @@ -420,13 +433,14 @@ void cb_comm_executeOn (const chpl_comm_cb_info_t *info) {
if (chpl_vdebug) {
const struct chpl_comm_info_comm_executeOn *cm = &info->iu.executeOn;
chpl_taskID_t executeOnTask = chpl_task_getId();
char buff[CHPL_TASK_ID_STRING_MAX_LEN];
struct timeval tv;
(void) gettimeofday (&tv, NULL);
chpl_dprintf (chpl_vdebug_fd,
"fork: %lld.%06ld %d %d %d %d %#lx %zd %lu \n",
"fork: %lld.%06ld %d %d %d %d %#lx %zd %s \n",
(long long) tv.tv_sec, (long) tv.tv_usec, info->localNodeID,
info->remoteNodeID, cm->subloc, cm->fid, (unsigned long) cm->arg,
cm->arg_size, (unsigned long) executeOnTask);
cm->arg_size, TID_STRING(buff, executeOnTask));
}
}

Expand All @@ -437,12 +451,13 @@ void cb_comm_executeOn_nb (const chpl_comm_cb_info_t *info) {
if (chpl_vdebug) {
const struct chpl_comm_info_comm_executeOn *cm = &info->iu.executeOn;
chpl_taskID_t executeOnTask = chpl_task_getId();
char buff[CHPL_TASK_ID_STRING_MAX_LEN];
struct timeval tv;
(void) gettimeofday (&tv, NULL);
chpl_dprintf (chpl_vdebug_fd, "fork_nb: %lld.%06ld %d %d %d %d %#lx %zd %lu\n",
chpl_dprintf (chpl_vdebug_fd, "fork_nb: %lld.%06ld %d %d %d %d %#lx %zd %s\n",
(long long) tv.tv_sec, (long) tv.tv_usec, info->localNodeID,
info->remoteNodeID, cm->subloc, cm->fid, (unsigned long) cm->arg,
cm->arg_size, (unsigned long)executeOnTask);
cm->arg_size, TID_STRING(buff, executeOnTask));
}
}

Expand All @@ -452,13 +467,14 @@ void cb_comm_executeOn_fast (const chpl_comm_cb_info_t *info) {
if (chpl_vdebug) {
const struct chpl_comm_info_comm_executeOn *cm = &info->iu.executeOn;
chpl_taskID_t executeOnTask = chpl_task_getId();
char buff[CHPL_TASK_ID_STRING_MAX_LEN];
struct timeval tv;
(void) gettimeofday (&tv, NULL);
chpl_dprintf (chpl_vdebug_fd,
"f_executeOn: %lld.%06ld %d %d %d %d %#lx %zd %ld\n",
"f_executeOn: %lld.%06ld %d %d %d %d %#lx %zd %s\n",
(long long) tv.tv_sec, (long) tv.tv_usec, info->localNodeID,
info->remoteNodeID, cm->subloc, cm->fid, (unsigned long)cm->arg,
cm->arg_size, (unsigned long)executeOnTask);
cm->arg_size, TID_STRING(buff, executeOnTask));
}
}

Expand Down Expand Up @@ -565,14 +581,15 @@ void cb_task_create (const chpl_task_cb_info_t *info) {
if (!chpl_vdebug) return;
if (chpl_vdebug_fd >= 0) {
chpl_taskID_t taskId = chpl_task_getId();
char buff[CHPL_TASK_ID_STRING_MAX_LEN];
//printf ("taskCB: event: %d, node %d proc %s task id: %llu, new task id: %llu\n",
// (int)info->event_kind, (int)info->nodeID,
// (info->iu.full.is_executeOn ? "O" : "L"), taskId, info->iu.full.id);
(void)gettimeofday(&tv, NULL);
chpl_dprintf (chpl_vdebug_fd, "task: %lld.%06ld %lld %ld %lu %s %ld %d %d\n",
chpl_dprintf (chpl_vdebug_fd, "task: %lld.%06ld %lld %ld %s %s %ld %d %d\n",
(long long) tv.tv_sec, (long) tv.tv_usec,
(long long) info->nodeID, (long int) info->iu.full.id,
(unsigned long) taskId,
TID_STRING(buff, taskId),
(info->iu.full.is_executeOn ? "O" : "L"),
(long int) info->iu.full.lineno,
info->iu.full.filename,
Expand Down
12 changes: 6 additions & 6 deletions runtime/src/qio/qio.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,12 +95,12 @@ bool qio_allow_default_mmap = true;
#ifdef _chplrt_H_
qioerr qio_lock(qio_lock_t* x) {
// recursive mutex based on glibc pthreads implementation
int64_t id = chpl_task_getId();
chpl_taskID_t id = chpl_task_getId();

assert( id != NULL_OWNER );
assert( ! chpl_task_idEquals(id, NULL_OWNER) );

// check whether we already hold the mutex.
if( x->owner == id ) {
if( chpl_task_idEquals(x->owner, id) ) {
// just bump the counter.
++x->count;
return 0;
Expand All @@ -109,17 +109,17 @@ qioerr qio_lock(qio_lock_t* x) {
// we have to get the mutex.
chpl_sync_lock(&x->sv);

assert( x->owner == NULL_OWNER );
assert( chpl_task_idEquals(x->owner, NULL_OWNER) );
x->count = 1;
x->owner = id;

return 0;
}
void qio_unlock(qio_lock_t* x) {
int64_t id = chpl_task_getId();
chpl_taskID_t id = chpl_task_getId();

// recursive mutex based on glibc pthreads implementation
if( x->owner != id ) {
if( ! chpl_task_idEquals(x->owner, id) ) {
abort();
}

Expand Down

0 comments on commit 6c8ccf4

Please sign in to comment.