昨日crypt関数のことで質問させていただきましたが、それを基にトリップ検索のツールを作成しました。
が、処理が遅いです・・・
検索時間があまりにも長いのでマルチスレッドで検索するようにしたのですが、多少早くなったくらいです。
処理速度を上げる方法を教えてください。
処理が遅いです>_<
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 処理が遅いです>_<
記入するときの下の方にオプション/ファイル添付がありますのでお使いください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 処理が遅いです>_<
すいません。mixC++加入メンバーしか使えない機能みたいです。
この場合何処かのアップローダを使っていただくとか、mixC++にメンバー加入してもらうしか無い様です。
この場合何処かのアップローダを使っていただくとか、mixC++にメンバー加入してもらうしか無い様です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 処理が遅いです>_<
ざっと見た感想を言うと、CPUがほぼ全力でぶん回りますのでCPUコア数を超えるスレッドを使うとかえって速度が低下すると思います。
それとまめに表示するのは、時間の無駄なので出来るだけ表示する割合を減らしてください。
stdoutで時間をロスしていると思います。
最後に、char *word = "123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%&'()=~|`{+*}<>?_-^\\@[;:],./。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚0";
の違いだけみたいなので自動的に生成してやれば1つの関数で復数スレッドを起こす形に出来てスッキリできると思います。
それとまめに表示するのは、時間の無駄なので出来るだけ表示する割合を減らしてください。
stdoutで時間をロスしていると思います。
最後に、char *word = "123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%&'()=~|`{+*}<>?_-^\\@[;:],./。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚0";
の違いだけみたいなので自動的に生成してやれば1つの関数で復数スレッドを起こす形に出来てスッキリできると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 処理が遅いです>_<
なるほど。ということは、スレッド数を減らしてprintf("%s\\r",inputs);を消せばもう少し早くなるということでしょうか?softya(ソフト屋) さんが書きました:ざっと見た感想を言うと、CPUがほぼ全力でぶん回りますのでCPUコア数を超えるスレッドを使うとかえって速度が低下すると思います。
それとまめに表示するのは、時間の無駄なので出来るだけ表示する割合を減らしてください。
stdoutで時間をロスしていると思います。
最後に、char *word = "123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%&'()=~|`{+*}<>?_-^\\@[;:],./。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚0";
の違いだけみたいなので自動的に生成してやれば1つの関数で復数スレッドを起こす形に出来てスッキリできると思います。
一般的にスレッド処理をするとしたらどのくらいの数が妥当なのでしょうか?
複数のスレッドを一つの関数で出来るのですか!?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 処理が遅いです>_<
表示を減らせば早くなります。あま さんが書きました:[
なるほど。ということは、スレッド数を減らしてprintf("%s\\r",inputs);を消せばもう少し早くなるということでしょうか?
一般的にスレッド処理をするとしたらどのくらいの数が妥当なのでしょうか?
最適なスレッドの数はCPUのコア数とCPU使用率で決まります。
なのでCPU全力でぶん回す(使う)場合で、1コアのCPUならスレッドを使わないほうが速いです。
それぞれのスレッドで書き換える変数が独立していればよいので、ローカル変数しか使わないとかスレッド別の配列とかを用意すれば大丈夫です。あま さんが書きました:[
複数のスレッドを一つの関数で出来るのですか!?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 処理が遅いです>_<
むかし「うとりっぱー」というトリップ検索ソフトのソースが公開されてました
crypt関数のコア部分を逆アセンブルしてMMX命令で手を加えたということで少し早くなっているようです
元はgcc(gas)用だったのでそれをVisualC++(MASM)用にしたのがあります
参考にどうぞ
crypt関数のコア部分を逆アセンブルしてMMX命令で手を加えたということで少し早くなっているようです
元はgcc(gas)用だったのでそれをVisualC++(MASM)用にしたのがあります
参考にどうぞ
- 添付ファイル
-
- tripper.zip
- (17.72 KiB) ダウンロード数: 118 回