Calculadora da lei de Amdahl e limite de speedup
A lei de Amdahl estima o maior speedup teórico possível quando uma parte do programa pode ser executada em paralelo e o restante precisa continuar serial.
Executar grátis
Informe a fração paralelizável e a quantidade de processadores para ver o speedup previsto, a eficiência dos processadores e quanto do tempo acelerado ainda é consumido pelo trabalho serial. A calculadora também apresenta o limite assintótico imposto por essa parte serial, ajudando você a decidir se vale acrescentar processadores ou se é melhor otimizar primeiro o código sequencial.
O que a lei de Amdahl mede
A lei de Amdahl separa o tempo original de execução em uma fração paralelizável e outra serial. Se p pode ser paralelizado e N processadores dividem esse trabalho perfeitamente, o tempo normalizado se torna (1 − p) + p/N. O speedup teórico máximo é o inverso desse tempo. Esta calculadora aplica diretamente a equação e pressupõe escalonamento ideal: o trabalho paralelo é distribuído igualmente, os processadores não acrescentam comunicação e a parte serial não melhora com novos trabalhadores. Portanto, o resultado é um limite superior, não uma previsão de benchmark. Uma implementação real pode render menos devido a sincronização, contenção de memória, inicialização de tarefas, desequilíbrio de carga e transferência de dados. Mesmo assim, o limite ajuda você a avaliar se uma medição é plausível e quanto espaço existe para melhorias. Informe a fração paralela em formato decimal; por exemplo, 95 por cento corresponde a 0.95.
Como interpretar o gargalo e o limite de escala
A fração serial é um menos a fração paralela e determina o teto de longo prazo. Com 95 por cento de trabalho paralelo, restam 5 por cento seriais; assim, nem processadores ilimitados ultrapassam um speedup de 20 vezes. O campo de speedup assintótico mostra esse teto quando existe uma parte serial. A participação do gargalo serial responde a uma pergunta diferente: no número escolhido de processadores, qual fração do novo tempo reduzido é serial? Essa participação costuma crescer muito com mais processadores. Uma seção que ocupava somente 5 por cento do tempo original pode dominar depois que a parte paralela é dividida entre muitos processadores. A eficiência paralela é o speedup calculado dividido pela quantidade de processadores. Quando ela cai, cada processador adicional contribui menos. Em conjunto, os resultados expõem os retornos decrescentes da escala forte e diferenciam falta de processadores de uma restrição essencialmente serial.
Como usar o resultado no planejamento de desempenho
Comece com um perfil medido em uma carga representativa, e não com uma estimativa otimista. Classifique o tempo como paralelizável somente quando o projeto de produção realmente puder executá-lo de forma concorrente. Em seguida, calcule diversas quantidades de processadores e compare o speedup adicional com o custo da infraestrutura. Se dobrar os processadores quase não alterar o resultado, a fração serial já aponta a direção: otimize o caminho sequencial, mude o algoritmo, reduza a coordenação ou aumente o trabalho independente por execução. O cálculo é especialmente útil antes de migrar para mais núcleos, trabalhadores, GPU ou nós distribuídos, pois evita pressupor escala linear. Ele também oferece uma referência para relatórios de regressão: compare o speedup medido ao máximo teórico e investigue a diferença. A lei de Amdahl descreve cargas fixas; se a carga cresce com os recursos, a lei de Gustafson trata de outra questão.
Casos de uso
Planejar uma otimização multinúcleo
Estime o melhor ganho possível com a quantidade proposta de processadores antes de investir na paralelização de uma carga fixa.
Explicar retornos decrescentes
Mostre por que novos trabalhadores trazem ganhos cada vez menores quando uma consulta, um coordenador ou outra etapa serial não muda.
Comparar teoria e benchmarks
Use o teto teórico como referência para o speedup medido e investigue custos de escalonamento, comunicação ou contenção.
Perguntas frequentes
O que significa fração paralela?
É a parcela do tempo original que pode ser dividida entre processadores. Informe um decimal entre 0 e 1.
Por que o resultado é um speedup teórico máximo?
A equação pressupõe divisão perfeita e nenhum custo de comunicação, sincronização, inicialização, contenção ou escalonamento. O ganho real costuma ser menor.
O que é speedup assintótico?
É o teto de speedup quando a quantidade de processadores tende ao infinito. Para uma fração serial s diferente de zero, ele vale 1/s.
O que mostra a participação do gargalo serial?
Ela mostra qual parte do tempo acelerado é ocupada pelo trabalho serial no número escolhido de processadores e quando a execução sequencial passa a dominar.
Um processador sempre retorna speedup igual a um?
Sim. No modelo ideal de Amdahl, um processador executa ambas as partes no tempo normalizado original; speedup e eficiência são iguais a um.
Quanto custa o cálculo pela API?
Cada solicitação à API custa US$ 0,002. O mesmo cálculo determinístico está disponível na interface do navegador.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/dev/amdahl \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"parallel_fraction":0.95,"processors":16}'const res = await fetch("https://api.kit.forhosting.com/dev/amdahl", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"parallel_fraction": 0.95,
"processors": 16
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/amdahl",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"parallel_fraction": 0.95,
"processors": 16
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/amdahl", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"parallel_fraction":0.95,"processors":16}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"parallel_fraction":0.95,"processors":16}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/amdahl", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"parallel_fraction": 0.95,
"processors": 16
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.amdahl",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |