web-dev-qa-db-ja.com

CPUを集中的に計算する例?

テストスレッドスケジューラ用にJavaで記述できる、簡単に実装できる単一のCPUとメモリを大量に消費する計算が必要です。

それらは少し時間がかかるはずですが、もっと重要なのはリソースを消費することです。

何か案は?

27
MEURSAULT

CPUを集中的に使用するタスクの簡単な例:

  • 素数の検索(多くのBigInteger除算が含まれます)
  • 大きな階乗の計算(例: 2000年! ((BigIntegerの乗算がたくさん含まれます)
  • 多くのMath.tan()計算(Math.tanはネイティブであるため、これは興味深いので、2つの呼び出しスタックを使用しています。1つはJava呼び出し用、もう1つはC呼び出し用です。)
25
dogbane

PDP-11のCPUソークテストはtan(atan(tan(atan(...)))などでした。FPUはかなりハードに動作し、スタックとレジスタも動作します。

6
user207421

2つの行列を乗算します。マトリックスは巨大で、ディスクに保存されている必要があります。

文字列検索。または、巨大なドキュメントにインデックスを付けます(各単語またはアルファベットの文字列の出現を検出してカウントします)。たとえば、大規模なソフトウェアプロジェクトのソースコード内のすべての識別子にインデックスを付けることができます。

円周率を計算します。

2Dマトリックスまたは画像を回転させます。

いくつかの巨大なファイルを圧縮します。

.。

6
rwong

これはJavaではありませんが、これは Dhrystone ベンチマークアルゴリズムが見つかりました ここ に基づいています。アルゴリズムのこれらの実装は、それがどのように行われるかについてのアイデアを与えるかもしれません。リンク ここ には、ベンチマークを取得するためのC/C++およびアセンブラーへのソースが含まれています。

4
t0mm13b
  • フィボナッチ数列のn番目の項を計算します。ここでnは70より大きいです。(時間がかかる)

  • 多数の階乗を計算します。 (時間がかかる)

  • グラフで、2つのノード間のすべての可能なパスを見つけます。 (メモリを消費します)

3
Rushil Paul
  1. 公式RSAチャレンジ
  2. 非公式のRSAチャレンジ-平文で読みたい暗号文を入手します。コンピュータに任せてください。 uがランダム化されたアルゴリズムを使用する場合、uが成功する可能性はわずかですがゼロではありません。
1
emory

Javaでスレッドの優先度をいじって、以下のコードを使用しました。スレッドの優先度が違いを生むほどCPUをビジー状態に保っているようです。

@Test
public void testCreateMultipleThreadsWithDifferentPriorities() throws Exception {
    class MyRunnable implements Runnable {
        @Override
        public void run() {
            for (int i=0; i<1_000_000; i++) {
                double d = tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(123456789.123456789))))))))));
                cbrt(d);
            }
            LOGGER.debug("I am {}, and I have finished", Thread.currentThread().getName());
        }
    }
    final int NUMBER_OF_THREADS = 32;
    List<Thread> threadList = new ArrayList<Thread>(NUMBER_OF_THREADS);
    for (int i=1; i<=NUMBER_OF_THREADS; i++) {
        Thread t = new Thread(new MyRunnable());
        if (i == NUMBER_OF_THREADS) {
            // Last thread gets MAX_PRIORITY
            t.setPriority(Thread.MAX_PRIORITY);
            t.setName("T-" + i + "-MAX_PRIORITY");
        } else {
            // All other threads get MIN_PRIORITY
            t.setPriority(Thread.MIN_PRIORITY);
            t.setName("T-" + i);
        }
        threadList.add(t);
    }

    threadList.forEach(t->t.start());
    for (Thread t : threadList) {
        t.join();
    }
}
0
Jim Tough