Как насчет использования функции clock () в каждом потоке CUDA для вычисления времени начала и окончания. И сохраните его в массиве таким образом, чтобы вы могли выяснить, какой поток запускается / останавливается в какое время, на основе индексов массива, таких как:
__global__ void kclock(unsigned int *ts) {
unsigned int start_time = 0, stop_time = 0;
start_time = clock();
// Code we need to measure should go here.
stop_time = clock();
ts[(blockIdx.x * blockDim.x + threadIdx.x) * 2] = start_time;
ts[(blockIdx.x * blockDim.x + threadIdx.x) * 2 + 1] = stop_time;
}
Затем используйте этот массив, чтобы определить минимальное время начала и максимальное время остановки для рассматриваемого блока. Например, вы можете рассчитать диапазон индексов временного массива, который соответствует блоку (0, 0) в CUDA, и использовать мин / макс для вычисления времени выполнения.