アムダールの法則計算機
95%が並列化できるプログラムでも、8個のプロセッサでは8倍ではなく約5.93倍で、いくら増やしても20倍を超えません。クラスターの規模決めや、N倍速くなるという安易な見積もりの確認に、機材を買う前に使えます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 並列部分の割合
- 0.95
- プロセッサ数
- 8
- 直列部分の割合
- 0.05
- 高速化率
- 5.9259259259
- 効率
- 0.7407407407
- 直列部分の限界
- 20
アムダールの法則は、残った直列作業が並列スピードアップに課す天井に名前を付けます。プログラムの割合Pが同時に走り、残りが逐次のままなら、プロセッサを足しても実行時間はN倍にはなりません。理論スピードアップは、いち引くPにP割るNを足した値の逆数です。直列の残りはNがどれほど大きくても分母に残ります。このアムダールの法則計算機は並列化可能割合とプロセッサ数を受け取り、スピードアップ係数、直列割合、並列効率、直列作業が残るときの漸近的な直列上限いち割るいち引くPを返します。演算は閉じた恒等式で、完全に決定的であり、シミュレーションも言語モデルも使いません。クラスタの寸法決め、安直なN倍主張への反論、ハードウェア購入前の教科書カーブの確認にご利用ください。
アムダールの法則が測るものとスピードアップ係数の導出
アムダールの法則は、ジーン・アムダールが1967年に示した観察です。残った直列作業は、並列部分へ何個のプロセッサを当てても、プログラム全体がどれだけ速くなれるかを縛ります。Pを、単一プロセッサの壁時計時間のうち同時に走れる割合、Nをプロセッサ数としてください。
逐次割合はいち引くPです。並列作業をN通りに分けたあと、相対実行時間はいち引くPにP割るNを足したものになり、理論スピードアップSのNはその和の逆数、すなわちいちをいち引くPにP割るNを足した値で割ったものです。Pがいちのとき、どのサイクルも並列化されスピードアップはNに等しくなります。
Pが零のとき、仕事は純粋に直列で、どのNでもスピードアップはいちのままです。その両極端のあいだでは、スピードアップはNとともに増えますが、直列上限いち割るいち引くPへ向かって平坦化します。その天井こそ法則の要点です。
直列が五パーセントだけのプログラムでも、百万コアでも二十倍を超えられません。並列の海を限りなく薄く切ったあとも直列の五パーセントが残るからです。並列効率はスピードアップをNで割った値で、Pがちょうどいちでない限りNが増えると下がります。
この計算機はその恒等式を直接評価します。プロファイラでも離散事象シミュレータでもなく、問題を機械とともに大きくするグスタフソンのスケール済みスピードアップ模型でもありません。
測定や、ホットなループと準備を分ける概算からPが分かるなら、キャッシュ効果、ロック競合、NUMAトラフィックが実測カーブを悪化させる前に、アムダールの式が期待すべき理論スピードアップを示します。
アムダールの法則計算機が本領を発揮する場面
クラスタの寸法を決めるとき、スピードアップがコア数に追従するという性能主張を吟味するとき、九十五パーセント並列でも二十倍で頭打ちになる理由を授業で示すときに、ブラウザの道具をご利用ください。スピードアップが直列上限に近づくまでNを上げ、収穫できないコアの購入をやめてください。負荷が機械とともに増えるならグスタフソンの法則と対比してください。
アムダールは問題サイズを固定したままにし、ソケットを足しても魔法のように大きくならないバッチ、コンパイラ、科学カーネルには保守的な上界です。検証失敗は残高を消費しません。結果は完全に決定的です。
同じPとNは常に同じスピードアップベクトルを返すので、試験や教材に例を固定できます。言語モデルも外部プロファイリングサービスも乱数もありません。
活用例
クラスタとコア数の寸法決め
実測した並列化可能割合を入れ、理論スピードアップが直列上限に近づくまでプロセッサ数を走査し、収穫できないコアの購入をやめてください。
性能レビューでの現実確認
安直なN倍スピードアップの主張をアムダールの上界に置き換え、アーキテクチャレビューが際限ない直線ではなく直列残りを示すようにします。
よくある質問
並列化可能割合が0から1の外だとどうなりますか?
Pは単一プロセッサ時間の割合なので、0未満や1超は拒否され課金されません。95パーセントなら0.95を送り、95は送らないでください。
グスタフソンの法則と何が違いますか?
アムダールは問題サイズを固定し、同じ仕事がNプロセッサでどれだけ速くなるかを問います。グスタフソンは問題を機械とともに大きくします。
アムダールの法則の式はどうなっていますか?
1を、直列部分の割合と、並列部分の割合をプロセッサ数で割った値の和で割ります。並列0.95、プロセッサ8個なら、1を0.05と0.95÷8の和で割って約5.93倍です。
並列効率は何を表していますか?
高速化率をプロセッサ数で割った値です。8個で5.93倍なら効率は約0.74で、1個あたり理想の4分の3ほどしか働いていません。プロセッサを増やすほど、この値は下がります。
実際のプログラムもこの速さになりますか?
たいていはなりません。結果は決まった作業量に対する理論上の上限です。キャッシュやロックの競合、メモリの通信で実際の伸びは悪くなるため、測定値と比べる最良の場合として使ってください。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/amdahls-law \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"parallel_fraction":0.95,"processors":8}'const res = await fetch("https://api.kit.forhosting.com/dev/amdahls-law", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"parallel_fraction": 0.95,
"processors": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/amdahls-law",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"parallel_fraction": 0.95,
"processors": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/amdahls-law", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"parallel_fraction":0.95,"processors":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"parallel_fraction":0.95,"processors":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/amdahls-law", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"parallel_fraction": 0.95,
"processors": 8
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.amdahls_law",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_processors | 1000000000000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
入力契約、応答の形、エラー時の振る舞い
九十五パーセントなら0.95を送り、九十五は送らないでください。processorsはプロセッサ数Nで、いちから一兆までの整数です。検証のあとエンジンは直列割合をいち引くP、アムダールの分母をその直列残りにP割るNを足したもの、スピードアップを分母の逆数、効率をスピードアップ割るNとして計算します。Pがいちのとき直列上限は無界なので、その鍵はnullとして出さず省略します。例: Pが0.95でNが八なら、スピードアップは約5.93、効率は約0.74、直列上限は二十です。これはアムダールの固定負荷模型に基づく理論スピードアップの神託であり、ご自身のバイナリの測定でもグスタフソンのスケール済みスピードアップ計算機でもありません。必須の二欄を持つJSON本体をPOSTしてください。parallel_fractionは並列化可能割合Pで、零からいちまでの有限数です。別名p、parallelizable_fraction、fを受け付けます。別名n、cores、n_processorsを受け付けます。欠落欄、非有限値、整数でないプロセッサ数、いち未満のN、公開上限を超えるN、零からいちの外の並列化可能割合は、欄名を付けたinvalid_inputで失敗し、課金されません。JSON本体はparallel_fractionとprocessorsをエコーし、続いてserial_fraction、speedup、efficiency、およびSのNがいち割るいち引くP足すP割るNである旨を述べるformula文字列を返します。Pがいちより真に小さいときは、漸近上界いち割るいち引くPであるserial_limitも返します。
アムダールの法則計算機が本領を発揮する場面
スクリプト、面接用サンドボックス、アーキテクチャノート、継続的インテグレーションの検査が、同一契約の下で多数の(P, N)対に安定したJSONを必要とするときはAPIをご利用ください。成功した各要求は$0.002の課金単位一件です。公開されたプロセッサ範囲は、閉じた評価を通常のIEEE-754倍精度に収めつつ、手で寸法を決める実用機をすべて覆います。直列残りを隠す逸話的なスピードアップ表より正確なアムダール恒等式を望む並列計算の教程、容量計画、アーキテクチャレビュー、プログラミング面接の神託へ、このエンドポイントをつないでください。
連携の活用例
並列計算の授業
S(N)=1/((1-P)+P/N)の決定的な神託を学生に渡し、P=0、P=1、直列上限の場合も含めて、プロファイラを立てずに確認できます。
技術的な質問
スピードアップのアムダールの法則の式は何ですか。
parallel_fraction Pを[0, 1]で、processors Nを整数≥ 1として送ってください。APIはS(N)=1/((1-P)+P/N)に加え、直列割合1-Pと効率S/Nを返します。
計算機が返す直列上限とは何ですか。
serial_limitは1/(1-P)で、Nが無限大へ向かうときの最大スピードアップです。P=1のときは完全並列プログラムに直列上界がないため省略されます。
アムダールの法則計算機の料金はいくらですか。
ブラウザの道具は無料です。API要求は成功一件あたり$0.002の前払いKIT残高を使い、不正な入力は課金されません。