以下は JE2BWM ほかが作成した翻訳 です。 原文は University of California より GFDL で配付されており、 この翻訳も GFDL に従います。
原文: Compound applications   (翻訳対象の更新日付は 5:50 AM UTC, May 01 2006 です)。

複合アプリケーション

boinc.gif
(英語のみ)

複合アプリケーション

複合アプリケーション(compound application) は、主プログラム(main program)と、 1つ以上のワーカープログラム(worker programs)からなっているものです。 主プログラムは、ワーカープログラムを順番に実行していきます。 そして、完了したワーカープログラムがどれかということを 状態ファイル(state file)で維持管理します。 さらに、主プログラムは個々のワーカープログラムに対して、 全体の計算完了率を示す0〜1の値の部分範囲を、それぞれ割り当てます。 たとえば、同じだけ実行時間がかかる 2つのワーカープログラムがあったとすると、 最初のワーカープログラムには 0〜0.5の部分範囲を割り当て、 2つめには、0.5〜1の範囲を割り当てます。 BOINC API は多くの機能を提供しています。 複合アプリケーションを開発するには、 これらの機能を主プログラムで使うか、 ワーカープログラムで使うかを決めなければなりません。 提供される機能をどちらで使うのかは、提供されている BOINC_OPTIONS 構造体の中のフラグで表現します。 個々のフラグを、主プログラムか、 ワーカープログラムかのいずれかに設定しなければなりません。 両方に設定することはできません。
struct BOINC_OPTIONS {
    int main_program;
    int check_heartbeat;
    int handle_trickle_ups;
    int handle_trickle_downs;
    int handle_process_control;
    int handle send_status_msgs;
    int direct_process_action;
};

int boinc_init_options(BOINC_OPTIONS*);

main_program 主プログラムの中でこのフラグをセットして下さい。
check_heartbeat ハートビート検査。 もしセットすると、このプログラムはコア・クライアントからの 'heartbeat'メッセージを監視することを意味します。 もし、'heartbeat'メッセージが途絶えたら、その結果は、 direct_process_action フラグ(下記)に従います。
handle_trickle_ups 上りトリクルメッセージの使用。 もしこのフラグをセットすると、このプログラムは trickle-up メッセージを送ることができます。
handle_trickle_downs 下りトリクルメッセージの使用。 もしこのフラグをセットすると、このプログラムは trickle-down メッセージを受取ることができます。
handle_process_control プロセス制御機能を使用。 このフラグをセットすると、 このプログラムはコア・クライアントから来る 'suspend'、'resume' および 'quit' メッセージを処理することになります。 この動作は、 direct_process_action フラグに依存します。
send_status_msgs 状態メッセージの送信。 このフラグをセットすると、 その CPU 時間と 計算完了率(fraction done) をコア・クライアントに報告することになります。 ワーカープログラムでセットしてください。
direct_process_action プロセス動作の即時処理。 このフラグをセットする場合、 このプログラムは quit メッセージの受信と、heartbeat 断絶 に対して、 終了(exit)で対処します。 suspend および resume メッセージの受信に対しては、それぞれ、一時中断と再開を行います。 もしこのフラグセットしない場合には、これらの事象は BOINC_STATUS 構造体に反映されるので、このプログラムからは boinc_get_status() 関数を使ってその状況を調べることができます。
all_threads_cpu_time このフラグをセットすると、全てのスレッドの CPU 時間を計測します。 (対象のスレッドはワーカスレッドだけでなく全部です)。 複数のスレッドを使って計算を実行するアプリケーションのために用意しました。

主プログラムの典型的なロジックは下記のようになります。

BOINC_OPTIONS options;

options.main_program = true;
...
boinc_init_options(&options)
read main state file                        // 主-状態ファイルを読む
for each remaining worker program:          // 残っているワーカープログラムについて

 
    aid.fraction_done_start = x
    aid.fraction_done_end = y
    boinc_write_init_data_file()
    run the app                     // そのワーカープログラムを走らせる
	wait for the app to finish
		poll
    write main state file           // 主-状態ファイルへの書き出し
	if last app:
		break
    boinc_parse_init_data_file()	// app_init.xml ファイルから CPU 時間を読み出す。 
boinc_finish()
ここで、x と y は、対応する計算完了率の範囲の境界値です。

ワーカープログラムの典型的なロジックは下記のようになります。

BOINC_OPTIONS options;

options.main_program = false;
options.send_status_msgs = true;
...
boinc_init_options(&options);
...
 仕事をこなし、0 と 1の間の値を引数に boinc_fraction_done() を呼び、
 ときどき、boinc_time_to_checkpoint() を呼び出します。 
...
boinc_finish();		// この関数で 最終的な CPU 使用時間を app_init.xml ファイルに書き出します。 

ワーカープログラムと併行して走るあるプログラムが GUI を扱うものである場合、そのプログラムから、まず、 典型的には全てのオプションを false にセットして boinc_init_options() を呼ぶ必要があります。 その後で boinc_init_graphics() を呼び出し、 最終的には、boinc_finish() を呼び出します。

主プログラムがアプリケーションの状態をコア・クライアントに報告することに責任を持つなら、 以下の関数を定期的に呼び出す必要があります。

    boinc_report_app_status(
        double cpu_time,                // ワークユニットの計算開始時点からの CPU 時間
        double checkpoint_cpu_time,     // 最後のチェックポイントからの CPU 時間
        double fraction_done
    );

 


BOINCの訳のメインページに戻る | (原文のメインページに戻る)
 

最終更新時刻 00:47:38, 2006年08月12日(JST)
Copyright © 2010 University of California. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.
Copyright © 2010 Komori Hitoshi(je2bwm at jarl.com). Japanese translation from English web pages on BOINC. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.