1. If 0.1% of the program s runtime is not able to be parallelized, and we have a supercomputer with 3,120,000 cores
1. If 0.1% of the program"s runtime is not able to be parallelized, and we have a supercomputer with 3,120,000 cores running the program at equal speed with no additional overhead, how does the parallel speed change when using 30, 30,000, and 3,000,000 cores? Let"s assume B=0.001.
2. The total execution time for a program is set to 1. Out of this total time, the non-parallelizable part accounts for 40% or 0.4. If the program has a parallelization factor of 2 (2 threads or CPUs executing the parallelizable part), what is the new execution time for the program?
2. The total execution time for a program is set to 1. Out of this total time, the non-parallelizable part accounts for 40% or 0.4. If the program has a parallelization factor of 2 (2 threads or CPUs executing the parallelizable part), what is the new execution time for the program?
Луна_В_Облаках 47
1. Дано:- Исходная задача имеет время выполнения 1.
- 0.1% времени выполнения программы не может быть распараллелено (B=0.001).
- Суперкомпьютер имеет 3,120,000 ядер, которые работают на одинаковой скорости без дополнительных накладных расходов.
Необходимо найти изменение параллельной скорости выполнения при использовании 30, 30,000 и 3,000,000 ядер.
Решение:
Параллельная скорость выполнения программы может быть определена с использованием закона Амдала. Этот закон гласит, что ускорение программы, достигнутое с помощью параллельных вычислений, ограничивается наиболее долгим последовательным участком программы.
Выражение для определения параллельной скорости выполнения программы выглядит следующим образом:
\[S(n) = \frac{1}{(1 - B) + \frac{B}{n}}\]
где:
- S(n) - параллельная скорость выполнения программы при использовании n ядер;
- B - доля нераспараллеливаемой части программы (в данном случае 0.001);
- n - количество используемых ядер.
Подставим значения и рассчитаем параллельную скорость выполнения для каждого случая:
Для 30 ядер:
\[S(30) = \frac{1}{(1 - 0.001) + \frac{0.001}{30}}\]
Для 30,000 ядер:
\[S(30,000) = \frac{1}{(1 - 0.001) + \frac{0.001}{30,000}}\]
Для 3,000,000 ядер:
\[S(3,000,000) = \frac{1}{(1 - 0.001) + \frac{0.001}{3,000,000}}\]
Выполним вычисления:
Для 30 ядер:
\[S(30) = \frac{1}{0.999 + 0.00003333} \approx 0.9990333\]
Для 30,000 ядер:
\[S(30,000) = \frac{1}{0.999 + 0.00000003333} \approx 0.9999990333\]
Для 3,000,000 ядер:
\[S(3,000,000) = \frac{1}{0.999 + 0.0000000003333} \approx 0.9999999990333\]
Ответ:
Таким образом, при использовании 30 ядер параллельная скорость выполнения программы составит примерно 0.9990333. При использовании 30,000 ядер параллельная скорость выполнения будет около 0.9999990333. Использование 3,000,000 ядер даст параллельную скорость выполнения примерно 0.9999999990333.