# HG changeset patch # User autobackup # Date 1627398604 -32400 # Node ID 267fb8b0987667c80eeb8dc6b0dc65dbfcba1b9f # Parent 6b630ccd9480c7498794223b66f71b1899c03e99 backup 2021-07-28 diff -r 6b630ccd9480 -r 267fb8b09876 trash/user/aosskaito/seminer/07/27.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trash/user/aosskaito/seminer/07/27.md Wed Jul 28 00:10:04 2021 +0900 @@ -0,0 +1,57 @@ + +# **研究目的** +- 編集者がそれぞれ好きなエディタを使い作業を行えるアプリケーションの作成を目指す。 + - 自身が使い慣れたエディタを使用し作業を行えることで効率を落とさずペアプログラミングやリモートワークを行える。 +- 本研究室で開発している分散フレームワークChristieを使って開発を行う。 + - ChristieはGearというプログラミング概念の性質上、リモートエディタと相性がよい。 +- 最低限の動作を行うまでは実装されていないためその実装を目指す。 + - 編集ファイルの共有方法 + - emacs viなどを相互接続して相互操作 + +# 進捗 +そろそろHelloWorld書いてみようと思い調べながら書いてました. + +### HelloWorld.java +``` +public class HelloWorld extends StartCodeGear { + + public HelloWorld(CodeGearManager cgm) { + super(cgm); + } + + public static void main(String[] args){ + CodeGearManager cgm = createCGM(10000); + + cgm.setup(new HelloWorldCG()); + cgm.getLocalDGM().put("key_hello","HelloWorld"); + } +} +``` +``` +HelloWorld +``` +まずcreateCGMで起動ポートを指定しCGMを起動、CGMでテキスト出力用のHelloWorldCG()というCGをsetupしておく。
+HelloWorldCG()にはkey:key_helloが用意されているため、key_helloに"HelloWorld"をputし出力の準備を行う。
+ +### HelloWorldCG +``` +public class HelloWorldCG extends CodeGear { + + @Take + String key_hello; + + @Override + protected void run(CodeGearManager cgm) { + System.out.print(key_hello); + cgm.getLocalDGM().finish(); + } +} +``` +ここではTakeによってDGを取り出している。TakeがkeyからDGの抜き出しで、Peekがkeyの参照?DGが残るか残らないかの違いだと思われ、同じkeyに対して異なる複数のDGをputする際に有効だと思われる。
+出力した後止まらなかったためcgmをfinish()を使い強制的に終了させたがこんな方法で良かったのか? + +# 今後の課題 +- + +# 余談 +- diff -r 6b630ccd9480 -r 267fb8b09876 user/aosskaito/seminer/07/27.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/user/aosskaito/seminer/07/27.md Wed Jul 28 00:10:04 2021 +0900 @@ -0,0 +1,1 @@ +redirect /trash/user/aosskaito/seminer/07/27 \ No newline at end of file diff -r 6b630ccd9480 -r 267fb8b09876 user/aosskaito/seminer/2021/07/20.md --- a/user/aosskaito/seminer/2021/07/20.md Wed Jul 21 00:10:04 2021 +0900 +++ b/user/aosskaito/seminer/2021/07/20.md Wed Jul 28 00:10:04 2021 +0900 @@ -8,7 +8,7 @@ - 編集ファイルの共有方法 - emacs viなどを相互接続して相互操作 -## 進捗 +# 進捗 そろそろHelloWorld書いてみようと思い調べながら書いてました. ### HelloWorld.java @@ -20,7 +20,7 @@ } public static void main(String[] args){ - CodeGearManager cgm = createCGM(1000); + CodeGearManager cgm = createCGM(10000); cgm.setup(new HelloWorldCG()); cgm.getLocalDGM().put("key_hello","HelloWorld"); @@ -30,8 +30,8 @@ ``` HelloWorld ``` -まずcreateCGMで起動ポートを指定しCGMを起動し,CGMでテキスト出力用のHelloWorldCG()というCGをsetupしておく.
-DGMにHelloWorldというDGをputすることでkey_helloというkeyにデータが格納される.
+まずcreateCGMで起動ポートを指定しCGMを起動、CGMでテキスト出力用のHelloWorldCG()というCGをsetupしておく。
+HelloWorldCG()にはkey:key_helloが用意されているため、key_helloに"HelloWorld"をputし出力の準備を行う。
### HelloWorldCG ``` @@ -47,11 +47,11 @@ } } ``` -ここではTakeによってDGを取り出している.TakeがkeyからDGの抜き出しで,Peekがkeyの参照?DGが残るか残らないかの違いだと思われ,DGが複数ある場合に有効だと思われる.
-出力した後止まらなかったためcgmをfinish()を使い強制的に終了させたがこんな方法で良かったのか +ここではTakeによってDGを取り出している。TakeがkeyからDGの抜き出しで、Peekがkeyの参照?DGが残るか残らないかの違いだと思われ、同じkeyに対して異なる複数のDGをputする際に有効だと思われる。
+出力した後止まらなかったためcgmをfinish()を使い強制的に終了させたがこんな方法で良かったのか? -## 今後の課題 -- 今度はTopologyManagerを利用した何か書いてみよう思う. +# 今後の課題 +- -## 余談 +# 余談 - diff -r 6b630ccd9480 -r 267fb8b09876 user/aosskaito/seminer/2021/07/27.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/user/aosskaito/seminer/2021/07/27.md Wed Jul 28 00:10:04 2021 +0900 @@ -0,0 +1,82 @@ + +# **研究目的** +- 編集者がそれぞれ好きなエディタを使い作業を行えるアプリケーションの作成を目指す。 + - 自身が使い慣れたエディタを使用し作業を行えることで効率を落とさずペアプログラミングやリモートワークを行える。 +- 本研究室で開発している分散フレームワークChristieを使って開発を行う。 + - ChristieはGearというプログラミング概念の性質上、リモートエディタと相性がよい。 +- 最低限の動作を行うまでは実装されていないためその実装を目指す。 + - 編集ファイルの共有方法 + - emacs viなどを相互接続して相互操作 + +# 進捗 +先週に引き続き論文読みながらコード動かしてみたり、書いてみて遊んでみたり。
+フィボナッチ数列が出力されるプログラムを遊びで書いてみた。 + +~~フィボナッチ数列が出力されるコードを書いてみたが、実装したいようにできなかったため、一応出力はされるように無理やり書いて保留中。~~ + +### StartFibonacchi.java +``` +public static void main(String[] args){ + CodeGearManager cgm = createCGM(10001); + + cgm.setup(new FibonacchiCodeGear()); + cgm.getLocalDGM().put("num1",0); + cgm.getLocalDGM().put("num2",1); + } +``` +``` +0 +1 +1 +2 +3 +5 +8 +13 +21 +34 +55 +``` + + +### FibonacchiCodeGear.java +``` +ublic class FibonacchiCodeGear extends CodeGear { + @Take + int num1; + + @Take + int num2; + + @Override + protected void run(CodeGearManager cgm) { + int i = num1 + num2; + + System.out.println( num1 ); + + cgm.getLocalDGM().put("num1",num2); + cgm.getLocalDGM().put("num2",i); + + i = num1 + num2; + + if (num1 <= 50) { + cgm.setup(new FibonacchiCodeGear()); + } else { + cgm.getLocalDGM().finish(); + } + } +} +``` + +# 疑問点 +- CGをその内部でCGMに再度setupしたらループするような認識でいいのか? +- TopologyManagerも触っていきたいため、最初に参考になりそうな論文やコードなどありますか? + +# 今後の課題 +- 基本的な書き方ですらまだ怪しいため、他のコード読みながらまた何か書いてみる。 + +# その他 +- 研究時間が足りないかもしれない。 + - 講義の最終課題や期末試験がある講義などがあるためもしかしたらぎりぎり足りないかもしれない。 + +- 夏休みに不足分のフォローアップを行うためには申請が必要とのことですが、そのためには指導教員からの許可が必要。[7/30(金)までに研究時間が225時間に満たない場合の対応について](https://mattermost.ie.u-ryukyu.ac.jp/ie-ryukyu/pl/5e3bx4czjt833rcsauipt118gh) diff -r 6b630ccd9480 -r 267fb8b09876 user/pine/note/2021/07/27.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/user/pine/note/2021/07/27.md Wed Jul 28 00:10:04 2021 +0900 @@ -0,0 +1,138 @@ +# 研究目的 +- アプリケーションの信頼性を保証するために、アプリケーションが動作するOSの信頼性を高める必要がある。 + +- 本研究室では、Continuation Based C(CbC)を用いて、信頼性と拡張性を両立するOSであるGearsOSを開発している。 + +- ソフトウェア開発においてエラー・バグは付き物であり、その発見が重要である。現在GearsOSにはデバッガーが未実装であるため、円滑なOS開発を行うために、GearsOSのデバッガーを作成する。 + +## やったこと +- GearsOSについて理解するためにアナグラさんや東恩納先輩の論文を読んでいた。 + +- 論文読みつつGearsOSのコードリーディング + +- DataGearの表示 + +- キャリアデザインの授業でB3に就活の話をしてきた。 + +## 作業ログ +まずはヘッダファイルの生成をする。 + +[static_gen_header.pl - CRGROWI](https://growi.cr.ie.u-ryukyu.ac.jp/Gears/gearstools/static_gen_header.pl) + +ヘッダファイルの生成をしてくれるPerlスクリプトがあるのでそれを実行する。 + +`perl tools/static_gen_header.pl --interface DebugWorker -o DebugWorker/DebugWorker.h` + +Implの場合は + +`perl tools/static_gen_header.pl --impl DebugWorkerImpl --interface DebugWorker -o DebugWorker/DebugWorkerImpl.h` + +InterfaceとImplができたらImplからCbCの雛形を生成してくれるimpl2cbc.plを実行。 + +`perl tools/impl2cbc.pl -w DebugWorker/DebugWorkerImpl.h` + +とりあえず関数を作って呼び出してみる。 +DebugWorker.hにAPI(関数の型と引数)を定義 +``` +typedef struct DebugWorker <> { + union Data* debugWorker; + __code printDataGear(Impl* debugWorker, __code next(...)); + __code next(...); +} DebugWorker; +``` + +Interfaceが更新されたので、impl2cbc.plを実行してCbCファイルを作る。 + +``` +❯ perl tools/impl2cbc.pl -w DebugWorker/DebugWorkerImpl.h +``` + +CbCのほうに新しくprintDataGearができている。関数の動作としてprint文を入れてみる。 +``` +__code printDataGear(struct DebugWorkerImpl* debugWorker, __code next(...)) { + printf("This is DebugWorker's fucntion printDataGear"); + goto next(...); +} +``` + +GearsOSでビルドする際にはCMakeLists.txtにファイル名を書く必要がある。 +今回はDPPMCと一緒に動かしたいので、追記する。 +``` +GearsCommand( + TARGET + DPPMC + SOURCES + CPUWorker.cbc SynchronizedQueue.cbc examples/DPPMC/AtomicTImpl.cbc SingleLinkedStack.cbc examples/DPPMC/PhilsImpl.cbc + examples/DPPMC/main.cbc examples/DPPMC/ForkImpl.cbc ModelChecking/crc32.c ModelChecking/memory.c + ModelChecking/state_db.c AtomicReference.cbc ModelChecking/MCWorker.cbc MCTaskManagerImpl.cbc SingleLinkedQueue.cbc + ModelChecking/TaskIterator.c examples/DPPMC/McDPP.cbc DebugWorker/DebugWorkerImpl.cbc +) +``` + +DPPMC側でいつ呼ぶかについてだが、code1()内のcode2()へgotoする直前で読んで見る。 +DPPMC側で、interfaceのincludeと、インスタンス生成、関数呼び出しを記述する。 + +``` +#interface "../../../DebugWorker/DebugWorkerImpl.h" +``` + +``` +#endif + DebugWorker* debug_worker = createDebugWorkerImpl(context); + goto debug_worker->printDataGear(code2); +} +``` + +DPPMC側で呼び出せるようにしたので、ビルドしてみる。 +`make DPPMC`したところで、下記エラーが出た。 + +``` +/Users/e185703/lab/Gears/src/parallel_execution/c/DebugWorker/DebugWorkerImpl.c:15:34: error: use of undeclared identifier 'C_printDataGearDebugWorkerImpl' + debugWorker->printDataGear = C_printDataGearDebugWorkerImpl; + ^ +1 error generated. +make[3]: *** [CMakeFiles/DPPMC.dir/c/DebugWorker/DebugWorkerImpl.c.o] Error 1 +make[2]: *** [CMakeFiles/DPPMC.dir/all] Error 2 +make[1]: *** [CMakeFiles/DPPMC.dir/rule] Error 2 +make: *** [DPPMC] Error 2 +``` + +これはCodeGearのenumに今記述した関数が入ってないから? + + +## 疑問点 +そもそもDataGearの表示はどんな感じで実装すればいいのだろう? +- 前にModelCheckingディレクトリをコピーしてDebugWorkerディレクトリを作ったので、ModelCheckingの中にDebuggerを組み込む感じ? +- それともInterfaceとして新しく作る感じ? + +DataGearの表示はどれを出せばいい? + +lldbで`context->data[1]->Phils'をprintsしたら以下のように出た。 + +これをlldbじゃなくてCodeGearで表示ルーチンを書いて出力させる? + +``` +(lldb) p context->data[1]->Phils +(Phils) $11 = { + phils = 0x0000000000000000 + putdown_lfork = C_checkAndSetAtomicReference + putdown_rfork = C_checkAndSetAtomicReference + thinking = C_checkAndSetAtomicReference + pickup_rfork = C_checkAndSetAtomicReference + pickup_lfork = C_checkAndSetAtomicReference + eating = C_checkAndSetAtomicReference + next = C_checkAndSetAtomicReference +} +``` + + +## やること +- 論文読み&コードリーディング +- DataGearの表示機能の作成 +- 活動計画書・報告書の作成 + +## その他 +- 研究時間不足による成績保留の許可が欲しいです。 + - 7/30までの研究時間が225時間に満たない場合、卒研1の成績保留申し込みが必要。 + - 申込みの際に研究指導教員の了承が必要。 + - 足りない時間は夏休み中にやる。 diff -r 6b630ccd9480 -r 267fb8b09876 user/soto/メモ/2021/07/27.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/user/soto/メモ/2021/07/27.md Wed Jul 28 00:10:04 2021 +0900 @@ -0,0 +1,26 @@ +# 研究目的 + +アルゴリズムの自動適用 + +愚直にプログラムを書くと、冗長なコードができてしまい、 +実行時間も掛かってしまう + +この場合、コードに対してアルゴリズムを適応すると、 +実行が最適化され実行時間が減り、良いコードが作成できる + +しかし、世の中にはアルゴリズムが大量にあり、 +これを一人で全て覚え、また適応できる場面を思いつくというのは困難 + +そのため、人が愚直に書いたコードに対してアルゴリズムを使用するコードに +自動適用できるようにしたい(すでにあるかもしれないが) + +適用前と適用後で同じコードになっていることを +保障するのは難しい。 + +また、普通のプログラミング言語では、関数の遷移が +自由であるため、これを行うのは難しいと考える + +これによりGears Agdaにて書いたコードをアルゴリズムで +書いたコードに変更 + +Agdaならできそう \ No newline at end of file