2012-01-19 1 views
0

をステージIは、(あまりにも、いくつかの複数のアルゴリズム)完了まで実行することが7日かかるアルゴリズム実行ラージCプログラムによって生成中級は

問題があります。成功したプログラムを実行するためには、私は、連続的な電力供給を必要とします。運が悪ければ、途中で停電があり、もう一度やり直す必要があります。

私は自分のプログラムを段階的に実行する方法を尋ねたいと思います(それぞれの段階で結果A、B、C ...が生成されます)。この中間結果を使用して、そのポイントから実行を再開します。

問題2:どのように私は毎回ループが反復を開く再からファイルを防ぐことができます(関数fopenは、ファイルが各反復で変更されているとして、これは必要だった、ほぼ万回を実行するループ内に配置した)

+4

コンパイルするのに7日間かかるアルゴリズム? – sashoalm

+2

コンパイルを実行するか、実行することを意味しますか? – NPE

+0

私は実行のために意味した: –

答えて

0

問題2:それは

を変更しているためは、ループの各反復上のファイルを開くと、私はこれを答えることが最善修飾することなく、各反復(とfclose)にfopenをしていないことは、おそらく無駄と遅いようです。答えを出したり、誰かにもっと有能な回答を与えたりするには、自分のデータについてもっと知る必要があると思います。例えば

:それはテキストまたはバイナリ

  1. ですか?
  2. レコードやテキストストリームを処理していますか?つまり、それはレコードのファイルかデータのストリームですか? (あなたは遺伝子を分解していないのですか?:-)

私はあなたがランダムアクセスファイルを使用して良いだろう、「それは各繰り返しを変更しているため、」あなたのコメントから判断すると、と尋ねます。これにより、(データストリーム内を通過して)変更を加えた可能性がある点までfseekに再開したと思います。ただし、ファイルをバイナリとして開くと、fsetposfseekを使用して、ファイル内のどこからでもfseekにアクセスできます。つまり、あなたは後方に「求める」ことができます。

さらに、データがレコードベースまたは何らかの形で整理されている場合は、インデックスを作成することもできます。これで、fsetposを使用して、目的のインデックスにポインタを設定してトラバースすることができます。したがって、変更するデータの領域を見つける時間を節約できます。付随するインデックスファイルにインデックスを保持することさえできます。

プレーンテキストをバイナリファイルに書き込むことができます。おそらく調査する価値があるでしょうか?

+0

1.そのテキストファイル、2。レコードのファイル..母は方法ではない:D –

+0

バイナリ読み取り "rb"(または読み書き "rb +")のために開くことができます( 'fsetpos'などを使用して) ?それがレコードのファイルであれば、ランダムアクセスが可能です。ですから、インデックスファイルを作成しないでください(何らかの順序に依存します)。また、私はあなたのシナリオではデータベースの使用が不可能であると推定していますか? – wmorrison365

+0

yup cantはデータベースを使用します。そして、私はバイナリモードで開くことができます –

2

いくつかのソースファイルでそれを分けて、makeを使うことができます。

2

各結果フェーズが完了したら、新しいユニバースに分岐します。新しい宇宙で力が失われたら、それを破壊して、あなたが枝分かれした時点まで時間を追って戻る。すべてのフェーズが終了するまで繰り返す。そして、結果を超越的なワームホールを介して元のユニバースにマージする。

+0

彼は量子コンピュータを使用して単純化できませんか? – asaelr

2

はまあ、オプションのカップルは、私が推測する:

  1. あなたが次の段階に入力することができる相から、この定義された出力と賢明な線に沿って、あなたのアルゴリズムを分割します。
  2. アルゴリズムを正常に完了(コミット)したことを知っているロジックをロジックに追加し、失敗した場合はアルゴリズムを再起動することができますそして、それは最後のコミット・ポイントからすべてのコミットされていないデータや再起動をビン。これらの両方のオプションがさらにあなたの7HR実行時間を引き出すことが

注意!

をので、全体の実行時間を改善するために、可能性があります。また、別のあなたのアルゴリズムは「仕事」を並行して扱うことができる「ワーカー」コンポーネントを持っています。これは通常、「ダム」で集中的なロジック(計算オン)をパラメータ化することができる。次に、グリッド/スペース/クラウド/その他にアルゴリズムを実行するオプションがあります。少なくとも実行時間を短縮するオプションがあります。スペースである必要はありません...キューを使用するだけで(IBM MQシリーズにはCインターフェイスがあります)、結果を保持する前に他のボックスにリスナーを配置してジョブのキューを待ち、結果を処理するだけです。上で説明したように、アルゴリズムの位相を変えることはできます。

+0

ありがとうございました。今編集した投稿を見ることができますか?iveは別の質問を追加しました:) –

+0

これは、問題2(問題ではない)に投稿された元の問題に対する応答です。 – wmorrison365

0

私にとって古典的なバッチ処理の問題のような音。
アプリケーションにチェックポイントを定義し、チェックポイントに達するまで中間データを格納する必要があります。
チェックポイントには、データベース内の行番号、またはファイル内の位置を指定できます。
処理時間が現在よりも長くなることがありますが、信頼性は向上します。
一般的に、あなたの孤独のボトルネックについて考えるべきです。
問題2の場合は、2つのファイルを使用する必要があります.fopenを100万回呼び出した場合、アプリケーションの日数がさらに短くなる可能性があります。

+0

チェックポイントの実行方法についていくつかの入力がありますか? (私は実行中の病気のような小さなスキームを考えていましたが、プログラムが停止すると、最初にログをチェックしてそのポイントから継続します)。 –

関連する問題