FIXPARALLEL...ENDFIXPARALLEL
EssbaseのFIXPARALLEL...ENDFIXPARALLEL計算コマンド・ブロックは、指定された数までの並列スレッドを使用して、コマンドのブロックに対する並列計算を可能にします。
ENDFIXPARALLELコマンドは、FIXPARALLELコマンド・ブロックを終了します。
構文
FIXPARALLEL (numThreads, mbrList)
COMMANDS ;
[ POSTFIXPARALLEL ( [ varName = ACCUMULATEVAR ( threadVarName ); ]* ); ]
ENDFIXPARALLEL
パラメータ
- numThreads
-
並列計算に使用できるスレッドの数を指定する正の整数。
- mbrList
-
計算を制限するためのスライスの選択。これらのスライスは、FIXPARALLEL計算のタスク・メンバーになります。次のいずれかにできます。
-
メンバー名またはメンバーのリスト。ノート: mbrListが1つ以上のスパース・ディメンションからの単一のメンバーである場合、生成されるタスクは1つだけであり、並列実行を使用するメリットはありません。1つ以上のスパース・ディメンションからの複数のメンバーは、複数のタスクを生成します。
-
他のメンバーに基づいてメンバー・リストを作成するために使用されるメンバー・セット関数。
指定するデータベース・リージョン(スライス)は、互いに独立している必要があります。
mbrListから、Essbaseは並行して計算されるタスクを生成します。
Essbaseは、非動的、非共有、スパース・メンバーのみを使用してタスクを作成し、タスクは計算されるブロックを決定します。そのため、mbrListには、少なくとも1つの非動的、非共有、スパース・メンバーが含まれている必要があります。複数のスレッドを使用するには、mbrListに、各スパース・ディメンションからの2つ以上のメンバーが含まれている必要があります。mbrListは、指定するnumThreadsと同じ数以上の数のタスクを示す必要があります。
FIXPARALLEL計算で多すぎる数のタスクを設定することを避けるため、タスクに使用されるメンバーの組合せのみを、mbrListに含める必要があります。他のすべてのスパース・メンバーの組合せは、内部または外部のFIXに属します。
-
- COMMANDS
-
FIXPARALLELの間に実行するコマンド。これらのコマンドは、mbrListで記述されたデータベース・リージョンに適用されます。THREADVARコマンドを含められます。
- POSTFIXPARALLEL
-
THREADVAR変数をVAR変数にコピーするためのオプションの演算ブロック。Essbaseは、FIXPARALLELコマンドが終了する前に、POSTFIXPARALLELブロックを1回実行します。POSTFIXPARALLELを参照してください。
- varName
-
VAR変数の名前。
- threadVarName
-
THREADVAR変数の名前。
- ACCUMULATEVAR
-
オプションのPOSTFIXPARALLEL内で使用されます。指定したTHREADVAR変数のすべてのスレッド値を合計します。次に、この合計は、指定したVAR変数に割り当てられます。
- ENDFIXPARALLEL
-
FIXPARALLELコマンド・ブロックを終了します。
ノート
-
次を使用して、スレッド・アクティビティを制御します。
-
numThreadsパラメータ
-
THREADVARコマンド
-
ACCUMULATEVARコマンド(POSTFIXPARALLEL内部)
-
mbrListパラメータ。メンバー・リストは、計算リージョンをタスクに分割する方法をEssbaseに指示するため、計算の最適化に重要なツールです。mbrListが大きくなると、各タスクは小さくなります。タスクが小さくなりすぎると、計算メモリーのオーバーヘッドによってパフォーマンスが低下する可能性があります。ただし、タスクが大きすぎると、並列計算スレッドが機能するのに十分なタスクがない場合があります。
-
-
@LIST関数は、FIXPARALLEL文では必要なく、
infinite loop in macro processing
エラーが発生する可能性があるため、使用しないでください。次に示すように、@LIST関数を使用せずに簡単にメンバーをリストできます:/* Listing of members without @LIST */ FIXPARALLEL (@CHILDREN("West"), @CHILDREN("East")) calc-command-block ENDFIXPARALLEL
/* Do Not Use */ FIXPARALLEL (2, @LIST(@CHILDREN("West"), @CHILDREN("East"))) calc-command-block ENDFIXPARALLEL
FIXPARALLELの概要
並列計算はCALCPARALLEL構成設定を使用して実行できますが、場合によっては、FIXPARALLELコマンド・ブロックの方法を使用するのが有益なことがあります。
FIXPARALLELコマンド・ブロック内には、実行するいくつかのコマンドを、いくつかのスレッド(numThreads)および1つのメンバー・リスト(mbrList)に計算するデータベース・リージョン(スライス)を指定して、一緒に入力します。Essbaseは、メンバー・リストの組合せからタスクのリストを作成し、タスクをスレッド間で分割します。
FIXPARALLELには次の利点があります。
-
並列計算中に一時変数を使用できます。
-
DATACOPY、DATAEXPORT、またはCLEARBLOCKの各コマンドを使用できます。
-
@XREF関数または@XWRITE関数と組み合せて使用できます。
-
データベースのリージョンを並行してエクスポートできます。このトピックの例を参照してください。
-
CALCPARALLELがパフォーマンス要件を満たしていない場合、アウトラインで多くの空のタスクが生成されるか、計算で使用できるスレッドよりも少ないタスクを持つ多数のタスク・グループ分けが含まれます。「FIXPARALLELとCALCPARALLELとのタスク選択の比較」も参照してください。
計算スクリプト内でFIX文をFIXPARALLELに変換することを検討するときは、次のガイドラインに従ってください。
-
CALCPARALLELを使用して、パフォーマンスのニーズを満たさないFIX文に焦点を合せます。
-
かなりの労力を要求するFIX文に焦点を合せます。FIX文の並列化にはある程度のオーバーヘッドが必要なため、計算パスを軽い負荷で並列化しようとしてもメリットがない場合があります。AGGやCALC DIMなどのより重い負荷が、FIXPARALLELの適切な候補になります。
-
まず、単一の大きなスパース・ディメンションを使用するか、限られた保存済メンバー数を持つ1つ以上の階層にmbrListを制限して、並列処理を試みます。その後、メンバー・リストにディメンションを順次追加し、計算時間が改善され続けるかどうかを確認できます。
タスクの"並列"計算が発生すると、タスクが分割され、任意の順序で同時に実行されることに注意してください。つまり、任意のタスクが、他のタスクよりも先に実行される保証はありません。これが、指定するリージョンに、データまたは計算の依存関係を持たせられない理由です。たとえば、2つの並列スレッドがあり、作業がタスクA、B、C、Dに分割されるとします。
可能性がある計算順は次のとおりです。
-
スレッド#1はAに続いてCを実行します。
-
スレッド#2はBに続いてDを実行します。
または
-
スレッド#1はAを実行します。
-
スレッド#2はBに続いてC、次にDを実行します。
または
-
スレッド#1はCに続いてAを実行します。
-
スレッド#2はDに続いてBを実行します。
FIXPARALLELとCALCPARALLELとのタスク選択の比較
CALCPARALLELは、まず最後のスパース・ディメンションからタスクを作成し、次に最後から2番目を作成し、同様に、十分なタスクができるまでタスクを作成します。FIXPARALLELは、COMMANDSブロックにない任意のスパース・ディメンションから選択できます。たとえば、FIXの場合と同様に、FIXPARALLELは(Level 0、Product)およびAGG (Product)に対して実行することはできません。
FIXPARALLELは、タスクの選択をカスタマイズするのに役立ちますが、選択したリージョンからタスクを生成するときに、相互依存関係がないことも前提としています。CALCPARALLELは、タスク・リストを生成する際に、スパースであるかどうか、アウトラインの順序、依存関係、メンバー式を考慮する必要があります。
FIXPARALLEL並列計算の制約事項
-
FIXPARALLELは、透過パーティションのターゲットであるデータベースに対し、リモート計算が無効である(SET REMOTECALC OFF)場合にのみサポートされます。
-
次の計算コマンドは、FIXPARALLELブロックではサポートされません。
-
フラット・ファイル以外のオプションを使用したDATAEXPORT
-
DATAIMPORTBIN
-
EXCLUDE...ENDEXCLUDE
-
-
FIXPARALLELは、最大8つのスレッドをサポートします(EssbaseがOracle Exalytics In-Memory Machineで実行されている場合はさらに多い)。各スレッドで作成されたデータ構造と、タスクのスケジュール設定と実行に使用されるアルゴリズムには、大量のCPUとメモリーのリソースが必要です。限られたリソースを持つサーバー上で、高度に並列化されたアクティビティを実行すると、パフォーマンスとシステムの安定性に悪影響を与える可能性があります。そのため、ORACLEHARDWAREACCELERATION構成設定がFALSEに設定されている場合、8個を超えるスレッドを使用したFIXPARALLELの使用はサポートされません。
例
FIXPARALLELをDATAEXPORTと一緒に使用すると、データベースの制限されたリージョンを並行してエクスポートできます。次の例は、2つのスレッドを使用して、[California]、[Oregon]、[Washington]、[Utah]、[Nevada]に関連するデータをエクスポートします。
FIXPARALLEL (2, @CHILDREN("West"))
DATAEXPORT "File" " " "dataOfWest.txt" "#MI";
ENDFIXPARALLEL
POSTFIXPARALLELの例も参照してください。