この程度のものでコメント無いと読めないような奴が助言なんてしなくていいよ。
for(i=0;i<n;i++){
for(j=0;j<2;j++)
g[i][j]=0;
// printf("debug1\n");
}
この部分で配列オーバーしてね?
してなかった
955 :
デフォルトの名無しさん:2010/09/26(日) 15:31:26
どうしてVCとGCCで結果が違うのでしょうね?
変数名とかもうちょっと考えろよひどすぎだろこれ
ファイル読み込むならそれもアップしろよ
時間がかかるとか文句言う前にやることあるでしょ、って感じ
>>955 >>947が未初期化変数があるとか言ってなかったっけ?
cygwinもVCもないから中見てないけど直したの?
959 :
デフォルトの名無しさん:2010/09/26(日) 15:36:18
コンパイルしてみましたか?
データファイルは大きすぎてうpできません。
何か適当なファイルでテストしてやってください。
速度がデータ依存するようなコードに見えないからいいんじゃないの?
961 :
デフォルトの名無しさん:2010/09/26(日) 15:37:27
直しました>初期化
0でシフトすると結果ってどうなるんだっけ?
どうもならない
964 :
デフォルトの名無しさん:2010/09/26(日) 15:41:51
直った!結果が一致した!初期化でこんなに結果が違うんですね。
GCCって変数宣言すると自動的に初期化するってことですかね。
さすがはプロ!皆様ありがとうございました!
965 :
デフォルトの名無しさん:2010/09/26(日) 15:44:40
ところで誰かこのハッシュ関数使ってみたいと思う人いますか?
怖くて使えません
帰れ
>>964 >さすがはプロ!
いや、ほとんど学生、趣味プログラマなんだが...
疑うべきはコンパイラではなく自分という典型的な例でした
s5関数のやり方って、大丈夫なのかな?
cygwinでmd5sumの方が3倍速いな
972 :
デフォルトの名無しさん:2010/09/26(日) 15:58:02
私は大学院で暗号学を専攻してました。
このハッシュ関数の基本原理を知りたくないですか?
いらないから!押し売りかお前は!
974 :
デフォルトの名無しさん:2010/09/26(日) 16:00:13
こっちのCygwinだと微妙に
975 :
デフォルトの名無しさん:2010/09/26(日) 16:01:44
折角の成果を分け合おうというのに。
所詮、学生レベルの実装か
timeコマンドでsysが影響しなくなるまで繰り返してみ
もうちょっといじれるようになっといた方がいいような気がする
md5とかshaなら実装したことあるけどopensslなんてアセンブラだたよ
研究でアセンブラは要らないと思うけど分かりやすく無駄のないコードにはしないとね
979 :
デフォルトの名無しさん:2010/09/26(日) 16:09:38
real 6.1s
位で安定しました。データファイルは300Mです。
うちの結果(繰り返してキャッシュに入ってそうな状態から)
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
>>964 > GCCって変数宣言すると自動的に初期化するってことですかね。
そのプログラムで偶々0だっただけ。つまりまぐれで動いていた。
すんません、結果ってあってますか?
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
32bitのsse2やO3はちょっと抵抗あるな。調べないと正確には分からないけど普通はO2だろう。
s5関数の使い方、間違ってるみたいだけど
987 :
デフォルトの名無しさん:2010/09/26(日) 16:50:55
オゾンと酸素の違い
988 :
デフォルトの名無しさん:2010/09/26(日) 16:52:45
どう間違ってるんですか>s5
-msse2はFPUでなくSSEを使うという意味なので、浮動小数点演算しか速くならない。
sse使えと言ったのはアセンブリで書けと言う意味だ。
構造体直渡しって、出来たっけ
ポインタ渡しでやると結果が変わったんだけど
991 :
デフォルトの名無しさん:2010/09/26(日) 17:02:15
SSE2命令はSIMDで整数演算もサポートしてます。だから128ビットデータ
を高速化できます。基本的に行列演算なのでその部分も利用してます。
ていうか少しは速くなってるはず。
992 :
デフォルトの名無しさん:2010/09/26(日) 17:04:32
ポインタはデバッグしにくいから嫌い。
普通に共用体で渡せるんじゃないかな。
>>991 SSE2命令は整数演算もサポートしているけれど、gccはそれを使って整数演算を最適化しない。
"-msse2"って書いただろ。良く読め。
で、休日一日を費やして皆で悪戦苦闘の結果、
なんとも使い物にならない似非暗号化プログラムが出来上がったわけだが。
嫌いとか言ってる時点で...
s5の中の出る直前のccのダンプと
s5出たあとのccのダンプ比較してみたら
>>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
スレの残りも少なくなってまいりました。
誰か暗号化プログラム専用スレ立てれ。
院出じゃなかったのか?
宣言
void s5(on *cc);
呼び出し方
s5(&c1);
s5(&c2);
問題だけ提示して0からソースコード書いた方が早いと思うんだが
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。