既存のタスクウェイトの情報を表示します。
OpenMP* タスクウェイトは、特定のタスクバリアーです。現在のタスクやスレッドにより生成されたすべてのタスクがスレッドの実行を続ける前に到達しなければならないアプリケーション中のポイントを定義します。
このコマンドは、OpenMP* アプリケーションで taskwait_id で指定した既存のタスクウェイトについて次の情報を表示します。
タスクのバインド
状態
タスクウェイトに到達したスレッド
タスクウェイトが待機しているタスク
タスクウェイトの場所
taskwait_id を指定しない場合、このコマンドは OpenMP* アプリケーションのすべての既存のタスクを表示します。
このコマンドは、OpenMP* バージョン 3.0 以上をサポートしています。古いバージョンでは、このコマンドの機能は制限されます。
この例でデバッグしているプログラムは、タスクスポーンによって 5 番目のフィボナッチ数を計算して、前の 2 つの数を再帰的に計算します。次のソースコードを例に考えます。
1 #include <stdio.h>
2 #include <omp.h>
3
4 static int fib(int n) {
5 if (n == 0) {
6 return 0;
7 } else if (n == 1) {
8 return 1;
9 } else {
10 int i = 0;
11 int j = 0;
12
13 #pragma omp task shared(i)
14 i = fib(n-1);
15
16 #pragma omp task shared(j)
17 j = fib(n-2);
18
19 #pragma omp taskwait
20 return i+j;
21 }
22 }
23
24
25 main()
26 {
27 int result = 0;
28
29 omp_set_num_threads(4);
30
31 #pragma omp parallel
32 {
33 #pragma omp single
34 {
35 result = fib(5);
36 }
37 }
38
39 printf("fib(5) = %d\n", result);
40 }
次の例は、idb info taskwait で表示される情報の種類を示しています。
(idb) b 6 Breakpoint 1 at 0x804898e: file /fib.C, line 6. (idb) r Starting program: /fib [New Thread 3086866112 (LWP 22340)] [New Thread 3086866112 (LWP 22340)] [New Thread 1194912 (LWP 22341)] [New Thread 7830432 (LWP 22342)] [New Thread 9931680 (LWP 22343)] [New Thread 15641504 (LWP 22344)] Breakpoint 1, fib (n=0) at /fib.C:6 6 return 0;(idb) idb info taskwait 150000001 taskwait for task 15, waiting tasks Encountering thread: 1 Created at: "/fib.C":fib:19:19 Awaiting tasks: 20 19 190000001 taskwait for task 19, waiting tasks Encountering thread: 3 Created at: "/fib.C":fib:19:19 Awaiting tasks: 25 26 200000001 taskwait for task 20, waiting tasks Encountering thread: 1 Created at: "/fib.C":fib:19:19 Awaiting tasks: 21 210000001 taskwait for task 21, waiting tasks Encountering thread: 1 Created at: "/fib.C":fib:19:19 Awaiting tasks: 23 24