[過去ログ] 【初心者歓迎】C/C++室 Ver.106【環境依存OK】 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
654
(1): 2021/04/25(日)11:04 ID:vJWG11Gh(5/7) AAS
>>653
「初期化しているコード」を載せる際、ImageWidth, ImageHeightとの
値の関係が分かるようにしてほしい。
要は、ちゃんとバッファの範囲内に読み書きが収まっているかどうかが知りたい。
655
(1): 2021/04/25(日)11:19 ID:vJWG11Gh(6/7) AAS
>>652
例えば、pPxの指しているメモリーブロックのバイトサイズが、
Pitch * ImageHeight * (pPx の 1 要素当りのバイト数)
以上に、pSrcBufの指しているメモリーブロックのバイトサイズが、
ImageWidth * ImageHeight * 4
以上になっていることが重要。
656
(1): 2021/04/25(日)11:46 ID:vJWG11Gh(7/7) AAS
そういえば、pSrcBufを((DWORD *)pSrcBuf)のようにキャストしてから使っている
ことも気になる。
pSrcBuf = new DWORD [ImageWidth * ImageHeight]
ではなく、
pSrcBuf = new BYTE [ImageWidth * ImageHeight * 4]
などとしているのだろうか。
657: 636 2021/04/25(日)12:16 ID:sRfn5IZk(6/11) AAS
>>653-656
void *pSrcBuf;
LONG Pitch;
pPxは、16bitの時がWORD*で32bitの時がDWORD*
という感じになってた。

初期化の部分がかなり複雑で結構辿って調べる必要があるんだよね…
でも思うのは初期化は、16bitと32bit大体同じで違うのはpPxの型くらいで
それで>>650の32bitのコードだと全然遅くならないから
>>651の16bitのコードの部分自体が何か変だったのかなと思ったんだけど
ここ自体は大丈夫なのかな?
658
(1): 2021/04/25(日)13:26 ID:QOuShU0Z(1/2) AAS
そもそも遅くなるって何分が何分になるん?
100分が103分ならそんなもんじゃね?
としか思えないし
659
(1): 2021/04/25(日)13:48 ID:sRfn5IZk(7/11) AAS
>>658
それが30秒が2分とか3分とかになっちゃって。
660
(1): 2021/04/25(日)14:01 ID:9Nm1id/y(1/4) AAS
>>659
それだとせいぜい6倍くらいだね。
>>650>>651 だと 6倍くらいの差が出るのは当然だよ。
661
(3): 2021/04/25(日)14:37 ID:sRfn5IZk(8/11) AAS
>>660
いやそうじゃなくて、>>636のダミーコードを入れると
何故か速い速度になって、それを取り除くと遅くなってしまう感じ。
普通にコード書いてても関係ない部分を追加したりすると遅くなったり
速くなったりするからおかしいなと思ってて。
662
(1): 2021/04/25(日)14:41 ID:9Nm1id/y(2/4) AAS
>>661
なるほど。では、
>初期化の部分がかなり複雑で結構辿って調べる必要があるんだよね…
であったとしても、原因を特定するには、少なくともまずそこを丹念に
調べる必要がある。
663
(1): 2021/04/25(日)14:41 ID:QOuShU0Z(2/2) AAS
>>661
とりあえず遅いコードと速いコードを晒してよ
バッファーオーバーランで制御変数壊してるとかあるかも知れんし
664
(1): 2021/04/25(日)14:45 ID:9Nm1id/y(3/4) AAS
>>661
そういえば、速い時でも30秒もかかっていることはとても気になる。
>>650 のコードだとどれくらいの時間になるの?
経験と勘で言えば、そのような平易なコードで30秒も掛かって、
時と場合により3分もかかるという現象が起きる場合、キャッシュ
が乱れている可能性がある。
もしかして、どこかで極端にメモリーをランダムアクセスしてない?
巨大なメモリーの中を、極端に不連続な場所をあっちこっちアクセスすると
キャッシュが聞きにくくなって、急激に遅くなることがある。
665
(2): 2021/04/25(日)14:57 ID:sRfn5IZk(9/11) AAS
>>662
確かにそこは念入りに調べる必要がありますね。
>>663
それが本当に>>636をまったく関係ない部分に入れるだけで
速くなったりしてて。普通にコード書いてまったく関係ないところ追加したりすると
速くなったり遅くなったりするんだよね。一旦速くなったら弄らない限り遅くなる事はなくて
逆に一旦遅くなったら弄らない限り速くなったりする事はない感じ。
>>664
読み込んでメモリ操作する部分自体はかなり多い数をやってるので
20〜30秒くらいかかる時もある感じ。
省2
666
(1): 2021/04/25(日)15:04 ID:9Nm1id/y(4/4) AAS
>>665
>読み込んでメモリ操作する部分自体はかなり多い数をやってるので
>20〜30秒くらいかかる時もある感じ。
話を総合すると、
>>650 のコードが、「20〜30秒くらいかかる」が、
>>651 のコードが、速い時には「30秒」
ということになるが、コードを見る限り、651のコードは650の
コードの10倍以上かかっても不思議ではないコードになっているので、
この速度差はむしろ、少な過ぎる。
むしろ、>>651のコードは「3分」かかっている方が、
省1
667
(1): 2021/04/25(日)15:13 ID:CFgRAQQ/(1) AAS
読込とか細かいメモリー確保とかコードに無いこと言われてもエスパーじゃないのでどうしょうもないな
悪いけど情報出せないなら他でやってくれ
668
(1): 2021/04/25(日)15:19 ID:sRfn5IZk(10/11) AAS
>>666
今チェックしたら650の方が少し速かったですw
650が12秒くらいで、651が22秒くらいでした
これが速い場合で、651が遅い場合は2分くらいでした。
650は遅くなることがないです。

>>667
ほんとうにそうですね。
とりあえず晒した所が大丈夫なら
他の部分は自分で調べてみようと思います。
669
(1): 2021/04/25(日)15:45 ID:S2tV53BX(1/2) AAS
>>668
>今チェックしたら650の方が少し速かったですw
>650が12秒くらいで、651が22秒くらいでした
>これが速い場合で、651が遅い場合は2分くらいでした。
>650は遅くなることがないです。

これだけでも重要なことが分かる。以後は、処理時間に関する(数学的な)定量的な話になる。
まず、650と651の速度差が1.8倍程度しかないことからすると、
pSrcBuf と pPx の読み書きに相当時間が掛かっていることを示唆している。
650と651のソースを比較した時、計算部分の処理がとても増加しているが、
読み書きはキャッシュまで考慮すると、650と651で差が出ない。
省14
670
(1): 2021/04/25(日)16:25 ID:sRfn5IZk(11/11) AAS
>>669
細かい分析ありがとう。
だとしたら>>636のダミーを入れると速くなるのも
そのキャッシュの原因に何か関係してるのかな?
でも今まで>>665でも書いたように一旦遅くなったら
遅くなったままで、速くなったら速くなったままなんだよね… コード弄らない限り。
もしかすると何か条件が重なればコードを弄らなくても遅くなったり
速くなったりすることもあるのかもしれないけど。今のところは確認出来てない感じ。
671
(1): 2021/04/25(日)16:32 ID:S2tV53BX(2/2) AAS
>>670
それより、650のコードで12秒も掛かっていることにかなり違和感を覚える。
ImageWidth が、ImageHeight が 2000 位までなら、4*10^6 ピクセルくらいで、
32BIT RGBカラーだとしても16MB位。
いまのCPUだと、>>650のコードくらいで12秒も掛かるはずは無い。
大雑多な予測だと、3.0GHzのCPUで、10(ms)くらいまでのはず。
ImageWidth や ImageHeight の値はいくらくらいになってる?
672
(1): 2021/04/25(日)17:04 ID:/0G3TNx0(1) AAS
650は最適化で X も x も同じ値で遷移していくし内側のループは
memcpy 相当のブロック転送におきかわりそうだけど
673
(1): 2021/04/25(日)20:18 ID:j6IXZwA/(2/2) AAS
650使えば遅くならないならいったん解決?
1-
あと 329 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.172s