Я думаю, что вы думаете об этом немного неправильно, если это уравнение, которое вы должны использовать, поэтому позвольте мне попытаться объяснить.
f - это процент (иначе 0 <= f<= 1) времени, которое ваша программа провела в той части кода, которую вы не распараллеливали в одноядерной реализации.Например, если у вас есть такая программа: </p>
// this takes 15 seconds
init();
for (int i = 0; i < 10; i++) {
// this takes 10 seconds, and will be split
// between threads when in parallel
calculate();
}
// this takes 5 seconds
finalize();
Она будет запущена (в последовательном режиме) через 15+ (10 * 10) + 5 = 120 секунд.Однако, если реализовано параллельно, есть 20 секунд выполнения, которые не могут быть распределены между несколькими ядрами.Это означает, что даже если параллельная часть будет ускорена, и для выполнения всех 10 итераций потребуется всего 10 секунд, вся программа все равно займет 30 секунд.Это то, что f помогает нам сказать - какая часть проблемы может выиграть от распараллеливания.В этом примере, поскольку 20 секунд из 120 должны выполняться последовательно, f = 20/120 = 1/6.
Используя это новое значение f, вы можете увеличить скорость в соответствии с Amdahl.Один отказ от ответственности - это далеко не единственный способ измерения скорости, и разные методы имеют свои преимущества и недостатки.