2012-01-07 3 views
2

あなたのプログラムを正しい答えに比較してプログラムを検証できるオンライン裁判官サイトが数多くあります。さらに、実行時間とメモリ使用量をチェックして、プログラムが最大限度を超えないようにします。オンライン裁判官ボットを実装する方法(TopCoder、Uva、ACM-ICPCなど)

オンライン裁判官のサイトによっては、いくつかのテストプログラムが同時に実行されるため、パフォーマンスの分離はどのように達成されるのですか?別の時間に実行される同じプログラムで同じ実行時間をどのように達成するのですか?

私は、常に同じ結果を返す 'VMware'や 'Sandbox'のような独立した環境プロセスがあると思います。これは正しいです?どのようにこれらのものを実装するかについての任意のアイデア?

現在のソリューション

私はサンドボックスのためdockerを使用しています。それは死んでシンプルで安全な方法です。

+1

あなたの質問は、ほぼ自由討論の招待状です。より具体的ないくつかの質問に分解してみてください。参照:http://stackoverflow.com/faq –

答えて

1

残念ながら、それは非常に難しい、実際にも、VM対専用マシンで一貫した実行時間を保証することです。前述のように何かを実装したいのであれば、おそらくVMがサンドボックス化されたすべてのコードを保持しておきたいと思うかもしれません。通常、コアごとに2つ以上のリクエストを処理する必要はありません。そのため、マシンの物理コアあたり最大2つのVMでメモリとCPU使用量のアルゴリズムであると言います。

私はコアごとに異なる数のVMを試してみて、それがどのように動作するのか見てみましょう。 SLOのコンプライアンス(または本当に必要な場合は98-99)の約90%以上を目指してください。うまくいくはずです。繰り返しますが、これらのことの多くが何をするかを正確に伝えることは、テストして、それがどういうものかを見るだけです。

0

質問にはない他の要件によっては単純すぎるかもしれませんが、

アルゴリズムがCPUにバインドされている場合、単体のVM(またはFreeBSDのjailなど)で実行し、組み込みのオペレーティングシステム計測を使用するのが最も簡単です。

(UNIXでの「時間」コマンドを使用し、「リミット」でメモリの制限を設定するように単純なものでした)

+0

私のサービス目標は[IDEONE](http://www.ideone.com)です。常に同じ実行時間と同じメモリ使用量を返します。あなたが言ったいくつかのVMを見つけます。Joachimに感謝します。 – Inhan

関連する問題