Closed mahmoodn closed 2 years ago
I see some differences between the code structure of nvbit_at_ctx_init and nvbit_at_ctx_term from 1.5 to 1.5.3.
nvbit_at_ctx_init
nvbit_at_ctx_term
1.5:
void nvbit_at_ctx_init(CUcontext ctx) { recv_thread_started = true; channel_host.init(0, CHANNEL_SIZE, &channel_dev, NULL); pthread_create(&recv_thread, NULL, recv_thread_fun, NULL); } void nvbit_at_ctx_term(CUcontext ctx) { if (recv_thread_started) { recv_thread_started = false; pthread_join(recv_thread, NULL); } }
1.5.3:
void nvbit_at_ctx_init(CUcontext ctx) { pthread_mutex_lock(&mutex); if (verbose) { printf("MEMTRACE: STARTING CONTEXT %p\n", ctx); } CTXstate* ctx_state = new CTXstate; assert(ctx_state_map.find(ctx) == ctx_state_map.end()); ctx_state_map[ctx] = ctx_state; cudaMallocManaged(&ctx_state->channel_dev, sizeof(ChannelDev)); ctx_state->channel_host.init((int)ctx_state_map.size() - 1, CHANNEL_SIZE, ctx_state->channel_dev, recv_thread_fun, ctx); nvbit_set_tool_pthread(ctx_state->channel_host.get_thread()); pthread_mutex_unlock(&mutex); } void nvbit_at_ctx_term(CUcontext ctx) { pthread_mutex_lock(&mutex); skip_callback_flag = true; if (verbose) { printf("MEMTRACE: TERMINATING CONTEXT %p\n", ctx); } /* get context state from map */ assert(ctx_state_map.find(ctx) != ctx_state_map.end()); CTXstate* ctx_state = ctx_state_map[ctx]; /* flush channel */ flush_channel<<<1, 1>>>(ctx_state->channel_dev); /* Make sure flush of channel is complete */ cudaDeviceSynchronize(); assert(cudaGetLastError() == cudaSuccess); ctx_state->channel_host.destroy(false); cudaFree(ctx_state->channel_dev); skip_callback_flag = false; delete ctx_state; pthread_mutex_unlock(&mutex); }
May I know what is the logic of those functions in 1.5.3? For example, if mutex and sync calls are necessary, why they are missed in 1.5? I didn't find information in the change log.
I see some differences between the code structure of
nvbit_at_ctx_init
andnvbit_at_ctx_term
from 1.5 to 1.5.3.1.5:
1.5.3:
May I know what is the logic of those functions in 1.5.3? For example, if mutex and sync calls are necessary, why they are missed in 1.5? I didn't find information in the change log.