3

完了するまでに 10 年かかる世界最速のスーパーコンピューターでプログラムを実行する必要があるとします。あなたは出来る:

  • 今すぐ 2 億 5000 万ドルを使う
  • 9 年間のプログラム、ムーアの法則の高速化 (4,000 倍高速化)、10 年間で 100 万ドルを費やし、2 週間で完了する。

最適な戦略は何ですか?

「長期保管のトレンドとあなた」からの質問

4

12 に答える 12

11

ムーアの法則は速度に関するものではなく、シリコンの特定の領域にあるトランジスタの数に関するものです。9年で速度が4000倍になるという保証はありません。どちらかといえば、GHz速度は近年横ばいになっています。現在増加しているのは、CPU のコア数です。

あなたの質問では、プログラムがベクトル化に適していない場合 (つまり、並列に計算できる個別の部分に分割できる場合)、9 年待っても何のメリットもありません。クロック速度がそれほど速くなることはありません。それまでの数年間で大幅に値上がりする可能性は低い。

于 2008-12-10T14:34:36.880 に答える
7

プログラムが無限に並列化可能であると仮定すると (したがって、利用可能なすべての CPU のすべてのコアを常に利用できるようになります)...プログラムを実行中に一時停止して別のマシンに移動することはできないと
仮定します...時間が唯一の問題である
と仮定します (多分私たちは大きな研究助成金を持っていて、常に利用可能な最高のコンピューターを使用しています)...

4 つの方程式があります (実際には、そのうちの 2 つが関数です)。

  1. endtime(startyear) = startyear + (calculations / speed(startyear))
  2. speed(year) = speed(year-1.5)4 (問題は、ハードウェアとソフトウェアの両方の速度が 18 か月ごとに 2 倍になることを前提としています)
  3. endtime(0) = 0 + (calculations/speed(0)) = 10 years
  4. speed(0) = calculations/(10 years)(#3で暗示)

endtime を最小化するために導関数を使い始めましたが、微分方程式をよく覚えていないことに気付きました。そこで、#2 を同等の指数成長式に変換しました。

speed(year) = speed(0)*4(年/1.5) = (calculations/10)*4(年/1.5)

次に、この小さな BeanShell スクリプトを作成しました。

calculations() {
    return 10000000; // random constant (gets cancelled out anyway)
}
speed(year) {
    speed0 = calculations()/10; // constant factor
    return speed0*Math.pow(4.0, year/1.5);
}
endtime(startyear) {
    return startyear + calculations()/speed(startyear);
}
findmin() {
    start = 0.0;
    finish = 10.0;
    result = 0.0;
    // home in on the best solution (there should only be one minimum)
    for (inc = 1; inc > 0.00000001; inc /= 2.0) {
        result = findmin(start,finish,inc);
        start = result-2*inc;
        finish = result+inc;
    }
    print("Minimum value is " + result + ", taking a total of " +
            endtime(result) + " years");
}
findmin(start,finish,inc) {
    lastNum = 0;
    lastVal = Double.MAX_VALUE;
    for (i = start; i < finish; i += inc) {
        result = endtime(i);
        if (result > lastVal) {
            print("Minimum value between " + start + " and " + finish +
                    " is " + lastVal + ", occurring at " + lastNum);
            return i;
        }
        lastNum = i;
        lastVal = result;
    }
    return lastNum;
}

出力:

bsh % source("moore.bsh");
bsh % findmin();
Minimum value between 0.0 and 10.0 is 3.5749013123685915, occurring at 2.0
Minimum value between 1.0 and 4.0 is 3.4921256574801243, occurring at 2.5
Minimum value between 2.0 and 3.5 is 3.4921256574801243, occurring at 2.5
Minimum value between 2.25 and 3.0 is 3.4886233976754246, occurring at 2.375
Minimum value between 2.25 and 2.625 is 3.488620519067143, occurring at 2.4375
Minimum value between 2.375 and 2.5625 is 3.488170701257679, occurring at 2.40625
Minimum value between 2.375 and 2.46875 is 3.488170701257679, occurring at 2.40625
Minimum value between 2.390625 and 2.4375 is 3.488170701257679, occurring at 2.40625
(snip)
Minimum value between 2.406149387359619 and 2.4061494767665863 is 3.4881706965827037,
occurring at 2.4061494171619415
Minimum value is 2.4061494320631027, taking a total of 3.488170696582704 years

したがって、前に述べた仮定では、答えは2.406149... 年( Google によれば、約2 年と 148 日) 待つことです。


編集:上記のように書き直された 2 番目の式を使用すると、単純な計算だけで解決できることに気付きました。

endtime(x) = x + c/speed(x) (where c = calculations)
speed(x) = speed(0) * 4^(x/1.5) = (c/10)*4^(2x/3)
=> endtime(x) = x + c/((c/10)*4^(2x/3))
              = x + 10*(4^(-2x/3))
d/dx endtime(x) = 1 + 10*ln(4)*(-2/3)*(4^(-2x/3))

臨界点は d/dx = 0 のときなので、

1 + 10*ln(4)*(-2/3)*(4^(-2x/3)) = 0
=> 4^(-2x/3) = 1/(10*ln(4)*(2/3))

両側の log4 を取ります: ( log4(x) = ln(x)/ln(4)、およびln(1/x) = -ln(x)であることを思い出してください)

-2x/3 = ln(1/(10*ln(4)*(2/3))) / ln(4)
      = -ln(10*ln(4)*2/3) / ln(4)
=> x = (-3/2) * -ln(1/(10*ln(4)*2/3)) / ln(4)
     = 3*ln(10*ln(4)*(2/3)) / 2*ln(4)

これはひどいごちゃごちゃのように見えます (ここで数式を表示する良い方法がないことは役に立ちません)。しかし、それを電卓に接続すると、2.4061494159159814141268120293221が得られるはずです(少なくとも、先ほどのように Windows 電卓を使用している場合)。したがって、私の以前の回答は小数点以下 7 桁まで正解でした (もちろん、このような問題では意味がありません)。

(これは単なる臨界点であり、必ずしも最小値ではないことに注意する必要があります。しかし、2 次導関数 ( -(some constant)*4-2x/3の形式) は常に負です。したがって、関数は常に上に凹んでいるため、唯一の臨界点は次のとおりです。最小値の。)

于 2008-12-10T17:42:05.393 に答える
4

ムーアの法則は、1 つのチップに配置されるトランジスタの数に関するものであり、一般にマイクロプロセッサの速度には関係ありません。

とはいえ、現在の傾向からすると、おそらく 1 つのプロセッサ ダイに収まるコアの数がますます増えることになるでしょう。プロセッサー。

そのため、今すぐ実行するか待つかを言うのは難しいですが、いずれにせよ、シングル コア プロセッサが指数関数的に高速になることは見られないため、同時プログラミングまたは分散コンピューティングが登場するでしょう。クロック速度) は、現在の半導体技術の物理的な制限と自然の法則によるものです。

于 2008-12-10T14:38:27.323 に答える
3

プログラムが一時停止して続行できることを確認してから、より高速なマシンが登場するたびにそれを実行してください。両方の長所...

于 2008-12-10T14:37:05.533 に答える
1

今すぐお金を使う - 現在のドルの価格/価値と 10 年後の見積もりは、今から 3 か月後の天気を予測しようとするようなものです。さらに、これは 10 年間のプログラミングの傾向や、物事が実際に 4,000 倍高速になるか、それとも最近の傾向と思われる 4,000 倍のスケーラブル/並列になるかなどの要因を考慮していません。

また、マヤによると、世界は 2012 年に終わるので、今すぐ戦利品を使ってください!

于 2008-12-10T14:33:41.250 に答える
1

モデルを単純化して、すぐに実行できる見積もりを作成します。より多くの/より良いリソースが利用可能になるにつれて、より正確な結果を得るためにモデルを改良します。

于 2008-12-10T14:36:34.847 に答える
1

それを完了するための最速の方法は次のとおりです。

  • 新しい世代ごとに移行できる現在のテクノロジのバージョンを作成します。
  • 移行と並行して、アルゴリズムなどの改善のためのプログラミングを続けます。

最も安上がりな方法は、明らかに、それをより長く放置することです。プログラミング時間を考慮に入れる必要があります(十分に一定に近いでしょう)。

また、ムーアの法則が継続していることにあまり賭けたくありません。

また、ムーアの法則は、特定の問題の計算速度ではなく、トランジスタの密度に関連していることを覚えておいてください。一般的な計算能力がそれだけ向上したとしても、必ずしもアプリケーションにメリットがあるとは限りません。

于 2008-12-10T14:37:24.580 に答える
0

問題はスーパーコンピューターで実行されることが質問で指定されているため、問題はベクトル化可能である必要があります。スーパーコンピューターの速度はムーアの法則よりもはるかに速く上昇しているため、実際の問題領域に応じて、ハッカーバンディトを雇って、コンピューターの85%のリソースを取得した世界的に分散したウォーホルワームを作成する方法があります。メルセンヌプライムサーチ(GIMPS)のような短い大規模に分散されたグリッドのネット上で、20分で問題を解決します。

(問題を解決する多くの方法がありますが、これがユーモアとしてラベル付けされていることを願っています)

于 2008-12-10T15:17:57.213 に答える
0

これは、ムーアの法則が実際には法則であるという誤った仮定を立てています。ムーアの理論と名付けたほうがよいかもしれません。待つことによるリスクは、10 年後には実行に 10 年かかる可能性があるということです。今すぐプログラムを開始し (可能であれば一時停止と再起動を組み込みます)、問題をより迅速に解決するための他の方法を検討するチームを開始します。どちらかがより迅速な解決策を提供するという確信が持てたら、切り替えてください。

編集:問題として、この質問の最良の価値は、仮定が有効かどうかを調べることだと思います。問題の定義によれば、同じ結果が同じ時間、より少ない費用で得られるため、明白な解決策は待つことですが、それはいくつかの暗黙の仮定に依存します。これらの仮定が成り立たない場合、ここでの多くの回答が証明しているように、明らかな解決策が必ずしも最善であるとは限りません。

于 2008-12-10T14:38:56.497 に答える
0

しかし、ムーアの法則はプログラミングをスピードアップしません。

9 年間のプログラミングが 2 週間に凝縮されることはありません。

自動思考読み取りマシンのプログラミングに 9 年間を費やすことに成功しない限り。

于 2008-12-10T14:32:33.640 に答える
0

4 年間プログラムしてから 2.5 で実行しますか?

(4年から5年の間に「完璧な」答えがあると確信しています...)

于 2008-12-10T14:34:03.713 に答える
0

最適な戦略は、プログラムを実行する必要がある理由によって異なります。

このシナリオでは、2 番目のオプションが最適です。なぜなら、結果が得られる瞬間 (これが実際に重要なことです) は同じだからです。

実際、誰もが最初のものを選択した場合(そしてそれを行うためのお金があった場合)、ムーアの法則は妥協されると私は信じています。私たちの計算上の必要性がすべて満たされていれば、技術開発を前進させ続けることにそれほどコミットすることはないと思います。

于 2008-12-10T14:35:28.407 に答える