目的
現在実行中の外部ルーチンの特定のノードID、vproc ID、vprocタイプ、およびタスクIDに関する情報を提供します。これは呼び出し元に応じて、外部ルーチンがGLOPデータを編成する場合に役立ちます。
構文規則
Vproc_Info_t * FNC_Where_Am_I(void);
戻り値
FNC_Where_Am_Iは、Vproc_Info_t構造体へのポインタを戻します。
Vproc_Info_t構造体は次のように定義されています。
typdedef struct { unsigned short NumAMPs; unsigned short NumPEs; unsigned short NodeId; unsigned short VprocId; vproc_type Vtype; } Vproc_Info_t;
説明
メンバー | 指定内容 |
---|---|
NumAMPs | システム内のオンラインAMPの合計数。 |
NumPEs | システム内のPEの合計数。 |
NodeId | ノードの固有番号。 |
VprocId | vprocの固有番号。 |
Vtype | vprocのタイプ。vproc_type列挙は以下のように定義されます。typedef enum { UNK_VPROC = 0 /* vproc type unknown */ AMP_VPROC = 1, /* AMP vproc */ PE_VPROC = 2 /* PE vproc */ } vproc_type; |
使用上の注意
FNC_Where_Am_Iは、各タイプ(AMPおよびPE)のvprocの数、および外部ルーチンが実行しているノード、vproc、vprocのタイプに関する情報を提供します。外部ルーチンは、FNC_Where_Am_Iを使用して、AMPの代わりにPEを実行するときに異なるセットアップを必要とすることがあるGLOPデータ、またはグローバル コピー操作でAMP vprocの数に基づいて分割を必要とすることがあるデータを構成することができます。
FNC_Where_Am_Iの使用例
以下に示すのは、外部ルーチンが、FNC_Where_Am_Iを使用して、実行しているプロセッサのタイプを検出し、AMP上で実行している場合にトランザクション関連GLOP変更だけを処理する方法を示すコード抜粋です。
#define TRAN_MAP 0
Sysinfo_t SysInfoPtr;
GLOP_Map_t *MyGLOP;
Vproc_Info_t *MyVproc_info;
int glop_stat;
. . .
MyVproc_info = FNC_Where_Am_I();
/* only bother with GLOP map if we are running on an AMP */
if (MyVproc->Vtype == AMP_VPROC)
{
glop_stat = FNC_Get_GLOP_Map(&MyGLOP);
if (glop_stat)
... process error: Not a member of any GLOP set
if ( MyGLOP->GLOP[TRAN_MAP].GLOP_Ptr == NULL)
{
... process error: Transaction GLOP does not exist
};
SysInfoPtr = MyGLOP->GLOP[TRAN_MAP].GLOP_ptr;
. . .
}
else
{
/* do non AMP processing here */
}