2013-02-19 2 views
2

Как простаивает поток команды, распознанной в коде OpenMP (C), работающем в Linux?
Я хочу измерить время простоя потоков, работающих в команде. Является ли это возможным? Есть ли какое-либо поле для отображения статуса потока?Состояние незанятой нити OpenMP (C)

+0

Просто получите (по-прежнему) бесплатную Oracle Solaris Studio (несмотря на свое название, она также имеет версию Linux). Он включает в себя инструмент Thread Analyzer, который способен собирать информацию об использовании потоков и представлять ее в приятном графическом интерфейсе. –

ответ

1

читать Status поля в /proc/self/task/$tid/status где tid ваш идентификатор задачи (уникальный для каждого потока), полученный с помощью gettid() системного вызова

Он также является третьим поле в /proc/self/task/$tid/stat

/proc/self/task/$tid/stat также будет содержать utime и stime поля для каждой задачи, чтобы вы могли получить свое «активное время». Проверьте http://linux.die.net/man/5/proc, чтобы узнать, какие поля есть.

+0

Спасибо! Есть ли способ сопоставления omp_get_thread_num() с результатом gettid()? –

+1

Я боюсь, что нет. 'omp_get_thread_num()' зависит от процесса и обычно считается от 0. Хотя 'gettid()' является ядром 'pid_t'. Это по сути то же самое, что и идентификатор процесса id, только более конкретный и действительно TID основной задачи/потока в процессе идентичен процессу PID. Вам нужно будет вызвать 'gettid()' из каждого потока, чтобы определить их идентификаторы или перечислить каталог '/ proc/self/task'. –

Смежные вопросы