C言語なら俺に聞け(入門編)Part 69

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2010/09/26(日) 15:20:05
この程度のものでコメント無いと読めないような奴が助言なんてしなくていいよ。
953デフォルトの名無しさん:2010/09/26(日) 15:21:47
for(i=0;i<n;i++){
for(j=0;j<2;j++)
g[i][j]=0;
// printf("debug1\n");
}
この部分で配列オーバーしてね?
954デフォルトの名無しさん:2010/09/26(日) 15:23:52
してなかった
955デフォルトの名無しさん:2010/09/26(日) 15:31:26
どうしてVCとGCCで結果が違うのでしょうね?
956デフォルトの名無しさん:2010/09/26(日) 15:33:15
変数名とかもうちょっと考えろよひどすぎだろこれ
ファイル読み込むならそれもアップしろよ
957デフォルトの名無しさん:2010/09/26(日) 15:33:53
時間がかかるとか文句言う前にやることあるでしょ、って感じ
958デフォルトの名無しさん:2010/09/26(日) 15:36:12
>>955
>>947が未初期化変数があるとか言ってなかったっけ?
cygwinもVCもないから中見てないけど直したの?
959デフォルトの名無しさん:2010/09/26(日) 15:36:18
コンパイルしてみましたか?
データファイルは大きすぎてうpできません。
何か適当なファイルでテストしてやってください。
960デフォルトの名無しさん:2010/09/26(日) 15:37:17
速度がデータ依存するようなコードに見えないからいいんじゃないの?
961デフォルトの名無しさん:2010/09/26(日) 15:37:27
直しました>初期化
962デフォルトの名無しさん:2010/09/26(日) 15:39:19
0でシフトすると結果ってどうなるんだっけ?
963デフォルトの名無しさん:2010/09/26(日) 15:40:49
どうもならない
964デフォルトの名無しさん:2010/09/26(日) 15:41:51
直った!結果が一致した!初期化でこんなに結果が違うんですね。
GCCって変数宣言すると自動的に初期化するってことですかね。
さすがはプロ!皆様ありがとうございました!
965デフォルトの名無しさん:2010/09/26(日) 15:44:40
ところで誰かこのハッシュ関数使ってみたいと思う人いますか?
966デフォルトの名無しさん:2010/09/26(日) 15:48:59
怖くて使えません
967デフォルトの名無しさん:2010/09/26(日) 15:49:31
帰れ
968デフォルトの名無しさん:2010/09/26(日) 15:49:50
>>964
>さすがはプロ!
いや、ほとんど学生、趣味プログラマなんだが...
969デフォルトの名無しさん:2010/09/26(日) 15:53:04
疑うべきはコンパイラではなく自分という典型的な例でした
970デフォルトの名無しさん:2010/09/26(日) 15:54:12
s5関数のやり方って、大丈夫なのかな?
971デフォルトの名無しさん:2010/09/26(日) 15:57:39
cygwinでmd5sumの方が3倍速いな
972デフォルトの名無しさん:2010/09/26(日) 15:58:02
私は大学院で暗号学を専攻してました。
このハッシュ関数の基本原理を知りたくないですか?
973デフォルトの名無しさん:2010/09/26(日) 15:59:24
いらないから!押し売りかお前は!
974デフォルトの名無しさん:2010/09/26(日) 16:00:13
こっちのCygwinだと微妙に
975デフォルトの名無しさん:2010/09/26(日) 16:01:44
折角の成果を分け合おうというのに。
976デフォルトの名無しさん:2010/09/26(日) 16:01:56
所詮、学生レベルの実装か
977デフォルトの名無しさん:2010/09/26(日) 16:02:04
timeコマンドでsysが影響しなくなるまで繰り返してみ
978デフォルトの名無しさん:2010/09/26(日) 16:09:28
もうちょっといじれるようになっといた方がいいような気がする
md5とかshaなら実装したことあるけどopensslなんてアセンブラだたよ
研究でアセンブラは要らないと思うけど分かりやすく無駄のないコードにはしないとね
979デフォルトの名無しさん:2010/09/26(日) 16:09:38
real 6.1s
位で安定しました。データファイルは300Mです。
980デフォルトの名無しさん:2010/09/26(日) 16:22:15
うちの結果(繰り返してキャッシュに入ってそうな状態から)
cygwinだと32bitだろうし64bitだとまた違いそうだけどね

C2D 3.3GHz RAM2GB data size 約118MiB
hash.exe(gcc3.4.4 -O2でコンパイル)
real 0m1.227s
user 0m1.187s
sys 0m0.078s

md5sum
real 0m0.364s
user 0m0.311s
sys 0m0.077s

openssl(md5)
real 0m0.340s
user 0m0.296s
sys 0m0.077s
981デフォルトの名無しさん:2010/09/26(日) 16:32:06
>>964
> GCCって変数宣言すると自動的に初期化するってことですかね。
そのプログラムで偶々0だっただけ。つまりまぐれで動いていた。
982デフォルトの名無しさん:2010/09/26(日) 16:41:15
すんません、結果ってあってますか?
983デフォルトの名無しさん:2010/09/26(日) 16:44:19
gcc -O3 -ftree-vectorize -mmmx -mmmx
gcc version 4.3.4
この環境で実行してます。これだとmd5sumより微妙に早いです。
セレロンT1600デュアルコア1.66MHzです。

$ time ./hash 3
real 0m6.068s
user 0m4.522s
sys 0m0.327s

$ time md5sum 3

real 0m6.100s
user 0m1.497s
sys 0m0.327s

$ time sha256sum 3

real 0m6.069s
user 0m4.726s
sys 0m0.373s

因みに256ビットなのでsha256sumとも比べてみました。
別段早くないですね。
984デフォルトの名無しさん:2010/09/26(日) 16:46:24
gcc -O3 -ftree-vectorize -mmmx -msse2
985デフォルトの名無しさん:2010/09/26(日) 16:48:40
32bitのsse2やO3はちょっと抵抗あるな。調べないと正確には分からないけど普通はO2だろう。
986デフォルトの名無しさん:2010/09/26(日) 16:49:53
s5関数の使い方、間違ってるみたいだけど
987デフォルトの名無しさん:2010/09/26(日) 16:50:55
オゾンと酸素の違い
988デフォルトの名無しさん:2010/09/26(日) 16:52:45
どう間違ってるんですか>s5
989デフォルトの名無しさん:2010/09/26(日) 16:53:58
-msse2はFPUでなくSSEを使うという意味なので、浮動小数点演算しか速くならない。
sse使えと言ったのはアセンブリで書けと言う意味だ。
990デフォルトの名無しさん:2010/09/26(日) 17:00:44
構造体直渡しって、出来たっけ
ポインタ渡しでやると結果が変わったんだけど
991デフォルトの名無しさん:2010/09/26(日) 17:02:15
SSE2命令はSIMDで整数演算もサポートしてます。だから128ビットデータ
を高速化できます。基本的に行列演算なのでその部分も利用してます。
ていうか少しは速くなってるはず。
992デフォルトの名無しさん:2010/09/26(日) 17:04:32
ポインタはデバッグしにくいから嫌い。
普通に共用体で渡せるんじゃないかな。
993デフォルトの名無しさん:2010/09/26(日) 17:07:06
>>991
SSE2命令は整数演算もサポートしているけれど、gccはそれを使って整数演算を最適化しない。
"-msse2"って書いただろ。良く読め。
994デフォルトの名無しさん:2010/09/26(日) 17:11:35
で、休日一日を費やして皆で悪戦苦闘の結果、
なんとも使い物にならない似非暗号化プログラムが出来上がったわけだが。
995デフォルトの名無しさん:2010/09/26(日) 17:11:36
嫌いとか言ってる時点で...
s5の中の出る直前のccのダンプと
s5出たあとのccのダンプ比較してみたら
996デフォルトの名無しさん:2010/09/26(日) 17:14:42
>>991
gcc -O2 -S 945.c; mv 945.s 945-nosse.s ;gcc -O2 -msse2 -S 945.c; cmp 945-nosse.s 945.s
アセンブラ吐かせても一行も異なっていないが、どういう原理で「少しは速くなる」んだよ。
997デフォルトの名無しさん:2010/09/26(日) 17:14:52
どう渡すのが正しいの>s5
998デフォルトの名無しさん:2010/09/26(日) 17:16:26
スレの残りも少なくなってまいりました。
誰か暗号化プログラム専用スレ立てれ。
999デフォルトの名無しさん:2010/09/26(日) 17:17:55
院出じゃなかったのか?

宣言
void s5(on *cc);

呼び出し方
s5(&c1);
s5(&c2);

1000デフォルトの名無しさん:2010/09/26(日) 17:18:00
問題だけ提示して0からソースコード書いた方が早いと思うんだが
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。