可能な限り最速のランタイムを実現するためにC++プログラムを最適化するのに問題があります。IOをC++で最適化
コードの要件は、ファイルにプログラムに入力された2つの長整数の差の絶対値を出力することです。すなわち:
./myprogram < unkownfilenamefullofdata
ファイル名が不明で、スペースで区切っ行につき2つの数字を持っています。未知の量のテストデータがあります。私はテストデータの2つのファイルを作成しました。 1つは極端な場合があり、5ランである。もう一つは、Javaプログラムを使って200万の乱数を生成し、それをtimedrunファイルに出力しました。
大量のファイルは3.4秒で実行されます。私は1.1秒にそれを打破する必要があります。
これは私のコードです:
int main() {
long int a, b;
while (scanf("%li %li",&a,&b)>-1){
if(b>=a)
printf("%li/n",(b-a));
else
printf("%li/n",(a-b));
} //endwhile
return 0;
}//end main
私は私のプログラム上のValgrindを走り、それがホールドアップの多くは、読み取りと書き込みの部分であることを示しました。私が数字だけを受け取ることを知っているなら、print/scanをC++の最も未加工の形式に書き換えるにはどうしたらよいですか?数字を2進数でスキャンし、論理演算でデータを操作してその差を計算する方法はありますか?私もバッファを書くことを検討するように言われましたが、Webを検索してコードを試してから約6時間後、私は失敗でした。
ご協力いただければ幸いです。
最適化してコンパイルしましたか? – Dave
出力も同様にリダイレクトします。 –
プログラムはファイルを読み取っていません。リダイレクトを使用してファイルの内容をプログラムに送ります。ファイルをアプリケーションに直接ロードし、メモリに完全にロードし、scanfよりも低いレベルのルーチンを解析して解析します。 –