{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "1b8cea57-ff1c-43e6-a4dd-c00a8d848a3d",
   "metadata": {},
   "source": [
    "# Параллельные вычисления на Python"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "98f2f564-4d8f-4604-a16c-5fbac3baa914",
   "metadata": {},
   "source": [
    "___Данный раздел был подготовлен совместно со студентом ТвГУ Луковниковым Д.И.___\n",
    "\n",
    "Параллельные вычисления, или параллельная обработка, представляют собой использование нескольких или многих вычислительных устройств для одновременного выполнения разных частей одной программы или проекта. Они позволяют ускорить выполнение задач и повысить эффективность работы программ.\n",
    "Параллельные вычисления очень полезны при математических, физических и любых других расчётах или действий, они позволяют ускорить выполнение задач путем одновременного выполнения нескольких процессов.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "59229169-d7dc-4bcd-9376-446a73cddc96",
   "metadata": {},
   "source": [
    "## \tБиблиотеки для распараллеливания на языке программирования Python"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "df231ea8-76a1-4a0a-b6a7-b749eb9ae846",
   "metadata": {},
   "source": [
    "### __Библиотека joblib__"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "96440027-1016-424b-81b0-ef1999b12397",
   "metadata": {},
   "source": [
    "Эта библиотека позволяет распараллеливать выполнение функций и методов в программах. Это может значительно ускорить обработку данных и выполнение других тяжеловесных задач. Кроме того, Joblib позволяет увеличить производительность научных вычислений, используя функции и методы из различных модулей библиотеки SciPy, NumPy итд., которые могут использовать возможности Joblib для распараллеливания выполнения некоторых операций. Это позволяет значительно ускорить обработку больших объемов данных в рамках научных исследований и других задач научных вычислений.\n",
    "\n",
    "Одним из главных преимуществ Joblib является возможность сохранения и загрузки выходных данных, что позволяет избежать повторных вычислений и повысить эффективность работы. Это особенно важно для научных экспериментов, где результаты должны быть воспроизводимы, так как Joblib обеспечивает прозрачное распределение задач между ядрами процессора и автоматическое кэширование результатов выполнения функций."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "15b9e7b1-bdd1-4997-8457-fccc954343e5",
   "metadata": {},
   "source": [
    "С помощью joblib можно узнать, сколько CPU-ядер/потоков мы можем использовать у нашего процессора. Для этого нужно импортировать библиотеку joblib и вызвать метод \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "be7bb97a-ed5a-482c-bf47-b92046853ec9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of cpu: 80\n"
     ]
    }
   ],
   "source": [
    "import joblib\n",
    "print(f\"Number of cpu: {joblib.cpu_count()}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "63c96455-65d1-4fc2-ad59-4f116e35098c",
   "metadata": {},
   "source": [
    "В результате мы увидим количество возможно используемых логических ядер процессора."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aa5065b8-cf5f-4f13-8a4b-dd50d573da63",
   "metadata": {},
   "source": [
    "Рассмотрим задачу, где нам нужно перемножить матрицы __AxB__. Реализуем её на языке программирования Python с использованием библиотеки __joblib__. Для этого нам нужно импортировать функцию Parallel из библиотеки joblib, которая используется для создания нескольких потоков, которые могут выполнять задачи параллельно. По умолчанию количество потоков равно числу ядер процессора. Так же мы можем передать -1 для использования всех ядер. Функция delayed используется для отсрочки выполнения кода. Она используется для того, чтобы joblib создал список вызова функций, которые нужно выполнить параллельно. Этот список затем передается в функцию Parallel, которая занимается параллельным выполнением задач. Так же зафиксируем время выполнения программы припомощи модуля __time__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "c3a9b9e5-7976-4365-b8b5-020e0cbf3a99",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import time\n",
    "import matplotlib.pyplot as plt\n",
    "from joblib import Parallel, delayed"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1851c078-ca87-47ac-afff-c40d45914edf",
   "metadata": {},
   "source": [
    "Задаем две матрицы __А__ и __В__, указываем их размерности и заполняем генератором случайных чисел в интервале от 0 до 10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "6166ba07-71df-416e-9d35-e6e2fb50084a",
   "metadata": {},
   "outputs": [],
   "source": [
    "A = np.random.randint(0,high=10,size=(6000,1000))\n",
    "B = np.random.randint(0,high=10,size=(1000,6000)) "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f32291fa-26ae-4dbe-a860-ec587f13fc2d",
   "metadata": {},
   "source": [
    "Для перемножения матриц воспользуемся методом [__numpy.dot__](https://numpy.org/doc/stable/reference/generated/numpy.dot.html) и сделаем замер времени выполнения"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "27fcccae-7aa7-4518-a2bf-69b315a9f2e8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Время однопоточного выполнения: 236.83659958839417\n"
     ]
    }
   ],
   "source": [
    "start_single=time.time()\n",
    "res_single = np.dot(A,B)\n",
    "end_single=time.time()\n",
    "time_single=end_single-start_single\n",
    "print('Время однопоточного выполнения:',time_single)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b08fb63f-4f84-4b5a-98bc-2c730930129c",
   "metadata": {},
   "source": [
    "Добавим функцию для распараллеливания метода __np.dot__\n",
    "\n",
    "Эта функция распределяет вычисления между несколькими процессами. Стратегия, применяемая для распространения данных, очень проста. Каждый процесс имеет полную матрицу B и непрерывный блок строк A, поэтому он может вычислить блок строк __AxB__. В конце концов, результат каждого процесса суммируется для построения результирующей матрицы."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "8f11b4ba-c7ad-40f2-9628-19035cc3be9f",
   "metadata": {},
   "outputs": [],
   "source": [
    "def parallel_dot(A,B,n_jobs):\n",
    "    \"\"\"\n",
    "    Вычисляет A x B, используя больше процессов.\n",
    "      Это работает только тогда, когда число\n",
    "      строк A и n_jobs четные.\n",
    "    \"\"\"\n",
    "    parallelizer = Parallel(n_jobs=n_jobs)\n",
    "    # this iterator returns the functions to execute for each task\n",
    "    tasks_iterator = ( delayed(np.dot)(A_block,B) \n",
    "                      for A_block in np.split(A,n_jobs) )\n",
    "    result = parallelizer( tasks_iterator )\n",
    "    # merging the output of the jobs\n",
    "    return np.vstack(result)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e87e90ce-686e-4d10-9cd1-3fbc53c7e1f2",
   "metadata": {},
   "source": [
    "Добавим функцию __jl_run__ для удобного запуска на разном количестве потоков и добавим туда подсчет времени затраченого на выполнение"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "f1a9a010-de1e-4323-81eb-4e817fba463e",
   "metadata": {},
   "outputs": [],
   "source": [
    "def jl_run(thr):\n",
    "    start_parallel=time.time()\n",
    "    res_jl = parallel_dot(A,B,thr)\n",
    "    end_parallel=time.time()\n",
    "    time_jl=end_parallel-start_parallel\n",
    "    return time_jl,res_jl"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8c3538ad-79a7-4e55-8a1a-dc7e6f4df398",
   "metadata": {},
   "source": [
    "Выведем время затраченое на многопоточное выполнение функции и посчитаем фактор ускорения"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "75c05cbc-dc6e-41ca-a545-42848bb45173",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Время многопоточного выполнения (JobLib): 36.779561281204224\n"
     ]
    }
   ],
   "source": [
    "time_jl,res_jl=jl_run(8)\n",
    "print('Время многопоточного выполнения (JobLib):',time_jl)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "2d424435-03eb-41f3-b80b-b643288694ba",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ускорение в:  6.439353579495436 раз(а)\n"
     ]
    }
   ],
   "source": [
    "print ('Ускорение в: ',time_single/time_jl,'раз(а)')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71a4d281-bf32-4fd8-95eb-7fb1dad034c7",
   "metadata": {},
   "source": [
    "Сравним результаты однопоточного перемножения матрииц и многопоточного "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "e59946f5-95a6-4203-ab1d-73be4ec8f9e9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[40168, 40819, 39760, ..., 40788, 39907, 40278],\n",
       "       [39968, 40559, 39824, ..., 40753, 40298, 40389],\n",
       "       [41306, 41279, 40678, ..., 41622, 40213, 41377],\n",
       "       ...,\n",
       "       [40524, 41713, 40541, ..., 41928, 41345, 41374],\n",
       "       [40701, 41295, 40189, ..., 41769, 41310, 40959],\n",
       "       [40415, 41522, 40183, ..., 41109, 40841, 40486]])"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "res_jl"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "50519a62-b129-4ccb-b308-0e5b17c26be5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[40168, 40819, 39760, ..., 40788, 39907, 40278],\n",
       "       [39968, 40559, 39824, ..., 40753, 40298, 40389],\n",
       "       [41306, 41279, 40678, ..., 41622, 40213, 41377],\n",
       "       ...,\n",
       "       [40524, 41713, 40541, ..., 41928, 41345, 41374],\n",
       "       [40701, 41295, 40189, ..., 41769, 41310, 40959],\n",
       "       [40415, 41522, 40183, ..., 41109, 40841, 40486]])"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "res_single"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "54893d78-8d36-4e29-b118-08c4c0f8c62c",
   "metadata": {},
   "source": [
    "Воспользуемся функцией [numpy.array_equal](https://numpy.org/doc/stable/reference/generated/numpy.array_equal.html) для проверки результатов"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "7cc83b40-719a-40c4-a507-38226ad3e87d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.array_equal (res_jl,res_single)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c6e4822c-c3af-4eda-84d0-fa729fd2db54",
   "metadata": {},
   "source": [
    "Построим график зависимости времени выполнения алгоритма от количества потоков (от 1 до 40)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "de1548bc-ca12-43cd-8a8d-5fb7d088b214",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_speedup=[]\n",
    "threads=[1,2,4,6,8,10,12,16,20,24,30,40]\n",
    "for x in threads:\n",
    "    time_jl,res_jl=jl_run(x)\n",
    "    y_speedup.append(time_jl)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "df1c46a4-3c66-44db-aa04-99de7569773f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtkAAAGyCAYAAAAxltiaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABn/ElEQVR4nO3de3xU9Z3/8deHXLiFSyAQgaCgohVQqUQQr4m1la221G21uN2u3dqyWtva2m4rrdtqK6urXffXrdvStFrtao3US7W2ar00VVYMAqJyUUFACfeEABkuufH5/XFOYAhJSA7JzCTzfj4e85iZ7/mecz7zcUo/c/I936+5OyIiIiIi0nl6JTsAEREREZGeRkW2iIiIiEgnU5EtIiIiItLJVGSLiIiIiHQyFdkiIiIiIp1MRbaIiIiISCdLaJFtZqPN7K9mttLMlpvZ9XHbvmZm74Ttd8S1zzaz1eG2ixMZr4iIiIhIFJkJPl8D8C13X2JmA4DFZvYckA/MAE5z91ozGw5gZuOBmcAEYCTwvJmd5O6NCY5bRERERKTdEnol2903ufuS8HUNsBIYBVwL3O7uteG2reEuM4BSd69197XAamBKImMWEREREemoRF/JPsDMxgAfBsqBO4HzzGwOsA/4tru/RlCAvxq3W0XY1vxYs4BZAH379p08evToSDHt37+fXr00TL2jlLdolLdolLdolLdolLdolLdolLdokpm3d999t9Ldh7W0LSlFtpnlAI8C33D3XWaWCeQCZwFnAvPM7HjAWtj9sHXg3b0EKAEoLCz0RYsWRYqrrKyMoqKiSPumM+UtGuUtGuUtGuUtGuUtGuUtGuUtmmTmzczeb21bwst+M8siKLAfdPfHwuYK4DEPLAT2A3lhe/xl6QJgYyLjFRERERHpqETPLmLAPcBKd78rbtMfgAvDPicB2UAl8CQw08x6m9lYYBywMJExi4iIiIh0VKKHi5wDfB54y8yWhm3fA+4F7jWzZUAdcJW7O7DczOYBKwhmJrlOM4uIiIiISKpLaJHt7vNpeZw1wD+2ss8cYE6XBSUiIiJyBPX19VRUVLBv374uO8egQYNYuXJllx2/p0pE3vr06UNBQQFZWVnt3idps4uIiIiIdBcVFRUMGDCAMWPGEIx+7Xw1NTUMGDCgS47dk3V13tydqqoqKioqGDt2bLv30zwxIiIiIkewb98+hg4d2mUFtqQuM2Po0KEd/iuGrmSLiIiItENHCuxt26C8HHbvhv794ayzIC+vC4OTLhXlx5WKbBEREZFOUl0Nc+fCgvkNeFU11NdBVjYlQ3OZdm4m11wDubnJjlISQUW2iIiISCeorobvfAc2L9lI5uYKpgxcSUGfKip2DqV8/Sm8srmANWtGcuedMHhwsqOVrqYiW0RERKQTzJ0bFNgnVL/GTRPnkZe968C2yrqB3LrqCt5bcia/+MVIZs9OYqCSEIlejGa0mf3VzFaa2XIzuz5sv9nMNpjZ0vDx8bh9ZpvZajN7x8wuTmS8IiIiIu2xbVswRCRzcwU3jTu0wAbIy97FTePmkbG5ggXzG6is7Njx161bR9++fZk0aRLHH3883/72t4FgSfHzzz+fyy67jPHjx3PNNdewf/9+AP7yl78wbdo0zjjjDC6//HJisRgAY8aM4corrzxw7M9+9rOMGTMGgLq6Oi677DImTpzIqaeeeqA9XllZGYMGDToQy1133XVYH4A77riDU089ldNPP50bb7wRgPfee4/p06czefJkzjvvPN5++20AvvCFL/DII48AcO2113LzzTdTU1PD2LFjqa+vB2DXrl2MGTOG+vp6ioqKWLRo0YFz5eTkHHi9aNEicnJymDRpEsceeyxf/epXD+TwvPPO44wzzuCMM87glVdeAeDxxx/noosuwt3ZtGkTJ510Eps3b+7Af52WJfpKdgPwLXdfYmYDgMVm9ly47b/c/Sfxnc1sPDATmACMBJ43s5O0II2IiIgkzSc+cVhT+ZYz8VUXMqX+b+Qtfb7F3fKAqbvH88ordZR//AUuyV90aIff/a7N055wwgksXbqULVu2MGHCBH7yk6BsWrhwIStWrOC4445j+vTpPPbYYxQVFXHrrbfy/PPP079/f/7jP/6Du+66ix/84AcAbNy4kerqatz9kILy2Wefpb6+nmXLllFZWUlhYWGLsZx33nk89dRTvPbaa/zLv/wLN9xwwyHbn376af7whz9QXl5Ov3792L59OwCzZs1i7ty5jBs3jvLycr7yla/w4osvHtjvRz/6EY2Njdx8880AFBUV8ac//YlPfepTlJaW8ulPf/qIc1U3NjYyZcoUXnzxRe67774Dxfjw4cN57rnn6NOnD6tWreLKK69k0aJFXHbZZTz66KP8z//8D8888wy33HIL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\n",
      "text/plain": [
       "<Figure size 864x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12, 7))\n",
    "plt.plot(threads, y_speedup, 'o-r', alpha=0.7, label=\"время в секундах\", lw=2, mec='b', mew=2, ms=10)\n",
    "plt.legend()\n",
    "plt.xlabel('Колличество потоков', size=16)\n",
    "plt.yticks(np.arange(0, max(y_speedup)*1.1, 10))\n",
    "plt.ylabel('Время', size=16)\n",
    "plt.grid(True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "137014fb-14cf-4775-890f-8e1e97efcbef",
   "metadata": {},
   "source": [
    "### __Библиотека multiprocessing__"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d07a6cf9-da7b-415e-bc05-e6092cebabb4",
   "metadata": {},
   "source": [
    "Библиотека multiprocessing языка программирования Python является стандартной библиотекой, которая предоставляет инструменты для создания и управления процессами в операционной системе. Она позволяет распараллеливать выполнение задач путем создания нескольких процессов и использования их для одновременной обработки данных.\n",
    "\n",
    "Основными компонентами библиотеки multiprocessing являются классы Process и Pool. Класс Process представляет один процесс, который может быть запущен и выполнен независимо от других процессов. Класс Pool представляет пул процессов, который позволяет распределять задачи между несколькими процессами.\n",
    "\n",
    "Кроме того, библиотека multiprocessing предоставляет механизмы для обмена сообщениями между процессами. Это позволяет процессам обмениваться информацией и синхронизировать свою работу, что может быть полезно для решения определенных задач."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4dd5fa3b-02d3-4445-92b5-ce40d57a035f",
   "metadata": {},
   "source": [
    "С помощью multiprocessing также можно узнать, сколько CPU-ядер/потоков мы можем использовать у нашего процессора. Для этого нужно импортировать библиотеку multiprocessing и вызвать метод "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "3859960a-4ce0-4819-b60a-a23ca1d680f0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of cpu: 80\n"
     ]
    }
   ],
   "source": [
    "import multiprocessing\n",
    "\n",
    "max_threads = multiprocessing.cpu_count()\n",
    "print(\"Number of cpu:\", max_threads)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9beb56ea-1a52-447c-97d3-e19998cfb3fe",
   "metadata": {},
   "source": [
    "Аналогично как в предущих примерах для перемножения матриц мы будем использовать метод __np.dot__, определим функцию для перемножения матриц __matrix_multiply__ и функцию __mp_run__ для удобного запуска на разном количестве потоков и добавим туда подсчет времени на выполнение.\n",
    "\n",
    "Нам так же требуется разбить начальные матрицы на равные части для одновременного параллельного запуска.\n",
    "\n",
    "В конце суммиируем результаты для полученния результирующей матрицы."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "df80580f-b1e5-4231-b5f6-e9575b5c4c14",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from multiprocessing import Pool\n",
    "  \n",
    "# Define the matrix multiplication function\n",
    "def matrix_multiply(args):\n",
    "    A, B = args\n",
    "    return np.dot(A, B)\n",
    "\n",
    "def mp_run(thr):   \n",
    "    start=time.time()\n",
    "    # Split the matrices into N parts\n",
    "    A_parts = np.array_split(A, thr, axis=1)\n",
    "    B_parts = np.array_split(B, thr)\n",
    "\n",
    "    # Create a multiprocessing pool with N workers\n",
    "    pool = Pool(thr)\n",
    "    # Map the matrix multiplication function to the N parts of the matrices\n",
    "    C_parts = pool.map(matrix_multiply, \n",
    "          [(A_part, B_part) for A_part, B_part in zip(A_parts, B_parts)])\n",
    "    pool.close()\n",
    "    end=time.time()\n",
    "    # Sum the parts of the result matrix\n",
    "    result_mp = np.sum(C_parts, axis=0)\n",
    "    \n",
    "    return end-start,result_mp"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "395e14e3-f6a3-4040-abbb-ab70936f1661",
   "metadata": {},
   "source": [
    "Запускаем перемножение матриц __A__ и __В__ на 8 потоках и вычисляем фактор ускорения"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "cfc427e5-0125-45d7-88a8-102be4a56a46",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[40168, 40819, 39760, ..., 40788, 39907, 40278],\n",
       "       [39968, 40559, 39824, ..., 40753, 40298, 40389],\n",
       "       [41306, 41279, 40678, ..., 41622, 40213, 41377],\n",
       "       ...,\n",
       "       [40524, 41713, 40541, ..., 41928, 41345, 41374],\n",
       "       [40701, 41295, 40189, ..., 41769, 41310, 40959],\n",
       "       [40415, 41522, 40183, ..., 41109, 40841, 40486]])"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "time_mp,result_mp=mp_run(8)\n",
    "result_mp"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "5b5d505b-4601-46c6-b824-99eed00c560c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Время многопоточного выполнения (multiprocessing): 33.18400502204895\n"
     ]
    }
   ],
   "source": [
    "print('Время многопоточного выполнения (multiprocessing):',time_mp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "37eadf5d-4f03-444e-bbac-7b9c18f692ca",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ускорение в:  7.137070990407254 раз(а)\n"
     ]
    }
   ],
   "source": [
    "print ('Ускорение в: ',time_single/time_mp,'раз(а)')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f5248ead-704e-42f3-9fbe-00f263c6da5b",
   "metadata": {},
   "source": [
    "Проверяем что результаты перемножения совпадают"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "b0ce9c09-f57a-4986-94ae-89235bca2edf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.array_equal (result_mp,res_single)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "411dc548-6df4-4532-b3db-737ce2e0f934",
   "metadata": {},
   "source": [
    "Построим график зависимости времени выполнения алгоритма от количества потоков (от 1 до 40)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "fc0b0243-8077-4e7b-8b9d-6b222fdc28d8",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_speedup_mp=[]\n",
    "threads=[1,2,4,6,8,10,12,16,20,24,30,40]\n",
    "for x in threads:\n",
    "    time_mp,res_mp=mp_run(x)\n",
    "    y_speedup_mp.append(time_mp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "723375c8-466b-4d4f-8ba9-5fd539af0645",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12, 7))\n",
    "plt.plot(threads, y_speedup_mp, 'o-b', alpha=0.7, label=\"время в секундах\", lw=2, mec='y', mew=2, ms=10)\n",
    "plt.legend()\n",
    "plt.xlabel('Колличество потоков', size=16)\n",
    "plt.yticks(np.arange(0, max(y_speedup_mp)*1.1, 10))\n",
    "plt.ylabel('Время', size=16)\n",
    "plt.grid(True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3ec1f3c0-22e6-481c-9e1e-0490411be326",
   "metadata": {},
   "source": [
    "Сравним эффективность использованиия Joblib и Multiprocessing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "3e13f428-29a7-4c27-9f78-0e84b0de4baa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12, 7))\n",
    "plt.plot(threads, y_speedup_mp, 'o-b', alpha=0.7, label=\"время в секундах (mp)\", lw=2, mec='y', mew=2, ms=10)\n",
    "plt.plot(threads, y_speedup, 'o-r', alpha=0.5, label=\"время в секундах (jl)\", lw=2, mec='c', mew=2, ms=10)\n",
    "plt.legend()\n",
    "plt.xlabel('Колличество потоков', size=16)\n",
    "plt.yticks(np.arange(0, max(y_speedup_mp)*1.1, 10))\n",
    "plt.ylabel('Время', size=16)\n",
    "plt.grid(True)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
