スレを勃てるまでもないC/C++の質問はここで 10at TECHスレを勃てるまでもないC/C++の質問はここで 10 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト650:デフォルトの名無しさん 09/06/04 22:46:58 あと、流行りの並列処理も最近のコア沢山なCPUには効くぞ。 gccならOpenMPが使えるし。 651:636 09/06/05 14:13:30 >ループの中で ファイルIOするのは遅すぎるので >一度メモリに全部読み込んでから変換→ファイルに書き出しを行う。 new で uint8(unsigned char)型の readbuf,writebuf を、int型のcalcbufを確保し 以下のように書き換えたところ、>>636より約6倍も高速化しました。 fin.read((char*)readbuf,width*height); int i=0; for( int y=0 ; y<height ; ++y){ for( int x=0 ; x<width ; ++x){ calcbuf[i] = readbuf[i]*A+B; if(calcbuf[i]<0) writebuf[i]=0; else if (calcbuf[i]>255) writebuf[i]=255; writebuf[i] = (uint8)calcbuf[i]; ++i; } //bmpファイルの幅は4の倍数ピクセルとする } } fout.write((char*)writebuf,width*height); ○vector<uint8> foo でバッファを確保した場合 read()にchar* が渡せないからダメ。 という判断から、バッファはnewで確保しました。 ○ループ中の2回のif文をelse if でまとめ、比較演算回数の減少を図りました。 (気休め程度だと思ったので、これ単体の効果は未計測) 「先輩と互角」という目標を軽くクリアし、先輩の倍以上高速なプログラムになりました。 最適化オプション、インラインアセンブラ、並列化等もこれから試してみたいですが 目標クリアしたためとりあえず質問は終了させて頂きます。 スレの皆様ありがとうございました! 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch