Exhaustive Lock Dependency Emulator その1 並列処理の総当り
| ■ |
理屈と例
|
sub prog1 {
my ($context) = @_;
$context->lock();
$context->set("a", 1);
$context->unlock();
$context->lock();
$context->set("a", 2);
$context->unlock();
}
sub prog2 {
my ($context) = @_;
$context->lock();
my $a = $context->get("a");
print "$a\n" if defined $a;
print "undef\n" if ! defined $a;
$context->unlock();
}
p_k = p_j ならば n_k > n_j、 かつ p_k = q_j ならば n_k >= m_j、 かつ q_k = q_j ならば m_k > m_j、 かつ q_k = p_j ならば m_k > n_j。 |
|
| ■ |
実装
|
MAIN:
{
my $emu = Main::_Emulator->new();
$emu->new_process(sub {
my ($context) = @_;
$context->lock();
$context->set("a", 1);
$context->unlock();
$context->lock();
$context->set("a", 2);
$context->unlock();
},
lock_limit => 3,
);
$emu->new_process(sub {
my ($context) = @_;
$context->lock();
my $a = $context->get("a");
print $a . "\n" if defined $a;
print "undef\n" if ! defined $a;
$context->unlock();
},
lock_limit => 2,
);
print "\n\nPlan:\n";
$emu->dump_tree();
print "\n\nResult:\n";
$emu->run();
print "\n\nResult Tree:\n";
$emu->dump_tree();
}
(...続き...) run_by_lock_spec: P0U2->P1L1 cut! run_by_lock_spec: P1U0->P0L1 undef run_by_lock_spec: P1U0->P0L1,P0U2->P1L1 cut! run_by_lock_spec: P1U0->P0L1,P0U1->P1L1 undef cut! run_by_lock_spec: P1U0->P0L1,P1U1->P0L2 cut! run_by_lock_spec: P1U1->P0L2 cut! Result Tree: P0U0->P1L0 P0U0->P1L0,P1U0->P0L1 P0U1->P1L0 P1U0->P0L0 P1U0->P0L1
| ■ |
今後の課題
|
| ■ |
参考
|
|
| ■ |
配布物
|
| ■ |
「虚実行」またはこの仕組みの大きなミスについて (追記: 2018-04-06)
|
| 更新: | 2011-06-19,2018-04-06 |
| 初公開: | 2011年06月20日 02:54:27 |
| 最新版: | 2018年04月06日 01:33:47 |
2011-06-20 02:54:31 (JST) in Perl シミュレーション 関数型言語・定理証明器 | 固定リンク | コメント (3) | トラックバック (4)
トラックバック
他サイトなどからこの記事に自薦された関連記事(トラックバック)の一覧です。
» JRF のソフトウェア Tips:Exhaustive Lock Dependency Emulator その1 並列処理の総当り (この記事)
リフォーム、お部屋のリニューアル、収納アドバイス、ハウスキーピングのプロフェッショナル 続きを読む
受信: 2011-06-20 20:31:04 (JST)
その1で、このフレームワークにおいて「入力待ち…は…特殊な枝刈りの仕方」ではないかというアイデアを書いた。本稿では、それを実装してみる。 理屈 入力待ちは、最も単純にはループして、他のプロセスが $context を変更するのを待てば良い。しかし、それは普通、非効率的で、このエミュレータだと、探索すべき lock 仕様の木の深さを無限に大きくすることになる。 もう少しマシな方法ということであれば、... 続きを読む
受信: 2011-07-01 22:37:34 (JST)
(続き 2011年9月8日) 「式でパラメータが落ちる」はちょうど私にとっての「弁証法」の逆になるわけだが、lock と(高階論理で使われる)ラムダ式の関係みたいなのが私には見えはじめてる。強い単一の lock の式への変換みたいなのもありそうで、そうすると計算オーダーみたいに lock にオーダーがあるという話になり、その量を「負のパラメータ」につなげられたりするのだろうか?... 続きを読む
受信: 2011-09-08 18:02:54 (JST)
略して ELDE。マルチプロセスの最も簡単な lock/unlock 機構において、そのロックの依存を総当たり的に調べるプログラムを書いた。その1で「虚実行」も数え上げていたのを修正し、「実実行」のみを対象とするようにした。 前回は、意図しない「虚実行」を含めていたため、他の人がやらないような実装になり、その意味では個性があったかもしれないが、今回こそ、特に工夫のない「車輪の再発明」になっていると... 続きを読む
受信: 2018-04-13 21:00:29 (JST)
コメント
投稿: JRF | 2011-07-01 22:46:29 (JST)
投稿: JRF | 2011-09-05 13:07:44 (JST)
とても恥ずかしい。
[cocolog:89156596] に今回の顛末を少し書いた。あわせて読んでいただきたい。
投稿: JRF | 2018-04-06 02:10:16 (JST)