雨谷の日和

過去20年で2,700を超えるアニメの第1話だけは見続けた僕のお勧めアニメがハズレなはずがない

2004-06-01から1ヶ月間の記事一覧

行列式計算の色々なアルゴリズム2

kp氏より、ここの2004.06.27付けの記述にコメントを頂いています。→「行列式」 雨谷の日和の行列式計算の色々なアルゴリズムで言及されているように、行列式の計算として掃き出し法が速度に対して有効なのは確かなのですが、精度が落ちる可能性があるという…

Cでの行列式計算(ループ、事前、malloc/free)

今度は事前にメモリを確保してその領域を使い回す方法を、ループ展開の場合にも試してみよう。 まずはCのmalloc/freeについて書き下すと以下のようになる。 #include #include long** array_buf; long expand(long arraybase[ ], int dim){ int j, k, l, in…

お祝いの言葉をありがとうございます

ということで、掲示板で頂いたお祝いは掲示板で、メールで頂いたお祝いはメールで、サイトで言及頂いたお祝いはサイトでお返事いたしますです。 ○ろずまりん氏の「MEMO」より2004/6/27付け。 徳田様、kasumi様、 第一子お誕生おめでとうございます。 有難う…

行列式計算の色々なアルゴリズム

以前から色々ご指摘頂いているkp氏から、今回のループへの展開の実測結果についての考察を頂いています。有難うございます。 「河馬は赤い血を流す」より引用します。 以前再起関数はループに変換でき、ループにしたほうが一般的に速いと書きましたが、この…

環境危機をあおってはいけないらしい

環境危機をあおってはいけない 地球環境のホントの実態作者: ビョルン・ロンボルグ,山形浩生出版社/メーカー: 文藝春秋発売日: 2003/06/27メディア: 単行本購入: 6人 クリック: 174回この商品を含むブログ (101件) を見るこの本を読了。ようやく読了。 確か…

悪文を中頃に置く

悪文を中頃に置くとどのような感触になるだろうか。 例文21)−1 私は森に着いた。 きぎのみどりがまぶしい。 風で葉音が揺れる。 例文21)−2 私は森に着いた。 木々の緑が。 風で葉音が揺れる。 例文21)−3 私は森に着いた。 木々は緑は眩しい。 風…

人間デバイス化計画

「MS、人体で電力・データ伝達の特許取得」 (ITmedia News)より 周波数の異なる電力信号を送ることで、別々のデバイスに電力を供給することもでき、周波数/振幅変調技術を使えばデジタルデータや音声信号などの伝送にも対応可能だという。 やばい。マジ電…

Javaでの行列式計算(ループ、動的、AOT)

今度はAOTを用いた場合の処理時間を実測しよう。 20:41:27 result: 489261678 20:42:31 result: 489261678 20:43:23 result: 489261678 20:44:15 最適化無しで約64秒、配列関連の最適化有りで約52秒、更に最適化(-O3)しても約52秒という結果となった。 性…

Javaでの行列式計算(ループ、動的、最適化有)

次に最適化有りにして実行してみよう。 result: 489261678 Flat profile of 12.36 secs (761 total ticks): main Interpreted + native Method 0.1% 0 + 1 sun.net.www.URLConnection. 0.1% 0 + 1 java.lang.String.length 0.3% 0 + 2 Total interpreted Com…

Javaでの行列式計算(ループ、動的、最適化無)

では、昨日のソースコードを実行してみよう。 まずは最適化無しで実測を行ってみる。 result: 489261678 Flat profile of 154.12 secs (9749 total ticks): main Interpreted + native Method 99.6% 9178 + 459 Test.expand 0.0% 0 + 1 java.io.WinNTFileSys…

Javaでの行列式計算(ループ、動的)

今度は、Javaで実測を行う。 ループ展開したものを元に、実際に動くソースコードを書くと、以下のようになる。 public class Test { public static long expand(long[ ] arraybase, int dim){ long[ ][ ] array = new long[dim][ ]; long[ ] return_value = …

悪文を最後に置く

今度は悪文を最後に置いてみよう。 例文20)−1 私は森に着いた。 木々の緑が眩しい。 かぜではおとがゆれる。 例文20)−2 私は森に着いた。 木々の緑が眩しい。 風で葉音が。 例文20)−3 私は森に着いた。 木々の緑が眩しい。 風の葉音を揺れる。 …

Cでの行列式計算(ループ、動的、alloca)

ということで、こんどはalloca版を考えてみよう。 ……と思ったのだが、この場合mallocをallocaで単純に書き換えるのは不味いということが分かった。 do { if(d malloc( (d - 1) * (d - 1) * sizeof(long) ); array[d - 2] = (long *)alloca( (d - 1) * (d - 1…

Cでの行列式計算(ループ、動的、malloc/free)

ということで、前回までの展開結果を元に、Cのソースを書いてみた。 以下のようになる。 #include #include long expand(long arraybase[], int dim){ int j, k, l, index, d, flg; long **array; long *return_value; int *i; long result; array = (long …

悪文を先頭に置く

ということで今後は、短い文と長い文の時と同じように、文章中での悪文の位置で印象がどう変わるかを見ていく。 ただし悪文にも色々と種類があるので、ここではその代表として「ひらがなばかりの文」と「述語の無い文」「助詞のおかしな文」をそれぞれ取り上…

文と文章と内容と

悪文の文章の中での使い方を分類し始める前に、ちょっとだけ言葉の整理を。 私がここで「文」と書いた場合は、句点で終わるひとまとまりの文字列を指しています。 意味が通じるか通じないかは、文であるかないかには関係ないという立場を私は採用しています…

再帰のループ展開その9

さて、いよいよ展開した結果を元に、expand 関数を書いてみよう。 private static long expand(long[ ] arraybase, int dim){ long[ ][ ] array = new long[dim][ ]; long[ ] return_value = new long[dim]; int[ ] i = new int[dim]; int d = dim; int flg …

再帰のループ展開その8

昨日までの置換で、ほぼ再帰の展開は終わっている。 ただ、一時変数のvalue が残っているので、これを消去しよう。 value の使われているのは以下の部分。 long value = 0; if(i[d - 1] % 2 == 0){ value += (array[d - 1][i[d - 1] * d] * return_value[d -…

再帰のループ展開その7

最後に、(E)を置換しよう。 (E) if(i % 2 == 0){ value += (array[i * dim] * result); }else{ value -= (array[i * dim] * result); } array はarray[d - 1]、result はresult_value[d - 2] になる。 (E) if(i[d - 1] % 2 == 0){ value += (array[d - 1][i[…

再帰のループ展開その6

(B)に続いて、(C)の置き換えを行う。 (C)は単純な配列のコピーなので、ほとんどそのまま置き換えだけでよい。 (C) int l = 0; for(int j = 0; j 上記が、以下のようになる。 (C) int l = 0; for(int j = 0; j array[d - 1] から、array[d - 2]へのコピーだ。…

再帰のループ展開その5

ロジック的な部分は整理し終えたので、今度は(B)(C)(E)を埋め込み、変数を新しいものに置き直そう。 まず、(B)を置換する。 (B) long[ ] subarray = new long[(dim - 1) * (dim - 1)]; long value = 0; 上記のsubarray は array[ ] に置き換わる。次の呼び出…

商売あがったりだ

下条氏の「くだらな日記」より6月8日付に言及を発見したのでコメントします。 以下引用。 ロリコンアニメの次に魔法書が発売禁止になったら徳田・kasumiの夫婦は商売あがったりだ 確かにロリコンアニメが発売禁止になったら、個人的には趣味が一つ減るので…

再帰のループ展開その4

では、i のループを消してみよう。 ループを度外視してi[ ] の初期化とインクリンメントを該当箇所にバラしてみる。 long[ ][ ] array = new long[dim][ ]; long[ ] return_value = new long[dim]; int[ ] i = new int[dim]; int d = dim; //d = dim if(d こ…

再帰のループ展開その3

どんどん行こう。 昨日までで、なんとなくd をパラメータとしたループになりそうだと分かる。 各段階の計算結果はreturn_value のd - 1 の場所に格納していけば良い。 ということで、その見込みに従いd に対する操作を追加してみよう。 long[ ][ ] array = n…

再帰のループ展開その2

では展開の続きを。 次に(B)の部分とreturn文をループの中に入れることが出来るので入れておく。 ただし、i に関する条件付きで。 private static long expand(long[] array, int dim) { if(dim さて、ここからが本番である。 関数の呼び出しの記述によって…

さよならハードディスク

ああ、愛用のパソコンのシステムハードディスクが逝ってしまわれました。 ということで、今まで夜を徹しての復旧作業をしておりました。眠い。 データディスクは別にしているので、雑文とか日記とかのデータは無事でした。不幸中の幸い。でも、そろそろこっ…

再帰のループ展開その1

ということで、再帰呼び出しを今度はループに展開してみようと思う。 結構ややこしいので、順を追ってちまちまと開いていくことにする。 展開対象となるのは、以下のexpand関数である。 作業はまずJavaの方で行い、後にCの方も類似の記述に改めることにする…

悪文の分類

ということで、ここまでに例に挙げてきた悪文を分類しておく。 分類手法使い勝手特徴 意味の通じ難い単語を用いるカタカナの多い文アルファベットの多い文不必要に漢字の多い文方言での文○難解 文の意味区切りを曖昧にするひらがなばかりの文句点も読点も無…

JavaとCとの性能比較(行列式計算)

ということで、再帰有りと再帰無しの結果を表にまとめておく。 Pentium4:2.4GHzWindowsXP(MS932)cygwingcc3.3.1JDK1.4 CJava 最適化無最適化有インタプリタHotSpotAOT mallocallocamallocalloca最適化無最適化配列最適化有 行列式計算再帰有り動的メモリ確…

Javaでの行列式計算(再帰無し、事前、AOT)

では次は、AOTでの実行性能を計測してみよう。 2004.05.25でのソースコードをコンパイルし、実行してみた結果が以下である。 20:04:31 result: 489261678 20:04:38 result: 489261678 20:04:43 result: 489261678 20:04:47 最適化無で約7秒、配列関係の最適…