{ "cells": [ { "cell_type": "markdown", "id": "f6ff5b25-4eeb-4532-a1bb-ad6a01eb1fe1", "metadata": {}, "source": [ "# Параллельное программирование\n", "\n", "## Теоретический минимум\n", "\n", "Типы задач требующих распаралеливания:\n", "* CPU-bound (вычислительно сложные)\n", "* IO-bound (требующие большого объема ввода-вывода)\n", "\n", "### Уровни параллелизма с прикладной точки зрения\n", "\n", "* Кооперативная многозадачность (async, await, тасклеты)\n", "* Потоки\n", "* Процессы\n", "* Гомогенные вычислительные кластеры\n", "* Гетерагенные вычислительные кластеры\n", "\n", "### Критический путь" ] }, { "cell_type": "code", "execution_count": 33, "id": "59dbcc3e-a50e-4e11-b247-8056c6d1bc4f", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pydot\n", "from IPython.display import Image, display\n", "def view_pydot(pdot): plt = Image(pdot.create_png()); display(plt);\n", "\n", "mydot = ''' graph my_graph { rankdir=\"LR\";\n", " a [color=\"red\", style=\"solid\"]; b1; b2; b3 [color=\"red\", style=\"solid\"]; b4; c [color=\"red\", style=\"solid\"];\n", " d1 [color=\"red\", style=\"solid\"]; d2; d3; e [color=\"red\", style=\"solid\"]; a -- b1 -- c; a -- b2 -- c; a -- b3 -- c;\n", " a -- b4 -- c; c -- d1 -- e; c -- d2 -- e; c -- d3 -- e; } '''\n", "\n", "graphs = pydot.graph_from_dot_data(mydot)\n", "view_pydot(graphs[0])" ] }, { "cell_type": "markdown", "id": "98b47ba0-c9a3-4d79-9b1e-8a33a9f27c7e", "metadata": {}, "source": [ "### Парадигма map-reduce\n", "\n", "Есть способ записи программ способствующий их эффективному распараллеливанию - парадигма map-reduce." ] }, { "cell_type": "code", "execution_count": 86, "id": "4cc1c345-3f81-4965-8634-4840a8afbdb7", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pydot\n", "from IPython.display import Image, display\n", "def view_pydot(pdot): plt = Image(pdot.create_png()); display(plt);\n", "\n", "mydot = ''' digraph my_graph { rankdir=\"LR\"; aa [shape=record, label=\"A1|A2|A3|A4|A5|A6\"];\n", " nmap[label=\"map(f, [A]) → [B]\"]; nmapfoo[label=\"f(A) → B\"]; bb [shape=record, label=\"B1|B2|B3|B4|B5|B6\"];\n", " nfilter[label=\"filter(g, [B]) → [B]\"]; nfilterfoo[label=\"g(B) → True/False\"]; cc [shape=record, label=\"B1|B3|B5\"];\n", " nreduce[label=\"reduce(h, [B]) → B\"]; nreducefoo[label=\"h(B,B,I) → B\"]; dd [shape=record, label=\"B\"];\n", " aa -- nmap -- bb -- nfilter -- cc -- nreduce -- dd; nmapfoo -- nmap; nfilterfoo -- nfilter; nreducefoo -- nreduce; } '''\n", "\n", "graphs = pydot.graph_from_dot_data(mydot)\n", "view_pydot(graphs[0])" ] }, { "cell_type": "code", "execution_count": 85, "id": "18557bc1-2c78-413f-8ba4-2a72077bd5fd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n" ] } ], "source": [ "from functools import reduce\n", "\n", "#Находим колисчество символов с самой короткой непустой строке\n", "\n", "data = [\"mklsf\", \"\", \"woiejfwe\", \"mkm\", \"oiejwefw\", \"pujskdlfjiejsmd\", \"\", \"\", \"sdfe\"]\n", "\n", "def count_symbols(s):\n", " return len(s)\n", "\n", "def fiter_empty(n):\n", " return n > 0\n", "\n", "def find_min(a,b):\n", " return min(a,b)\n", "\n", "result = reduce(find_min,filter(fiter_empty, map(count_symbols, data)), 1000)\n", "\n", "print(result)" ] }, { "cell_type": "markdown", "id": "9f6c43fd-b7d5-410c-bd7e-ca6ba0e8fd89", "metadata": {}, "source": [ "## Запуск параллельных вычислений с использованием пулов\n", "\n", "### Запуска многопоточного выполнения функции через ThreadPoolExecutor" ] }, { "cell_type": "code", "execution_count": 17, "id": "192cc894-56be-47bd-888c-3cbc576ed522", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Task 1 is complete\n", "Task 0 is complete\n", "Task 2 is complete\n", "Task 3 is complete\n", "Task 5 is complete\n", "Task 4 is complete\n", "Task 7 is complete\n", "Task 6 is complete\n", "[1, 0, 2, 3, 5, 4, 7, 6]\n" ] } ], "source": [ "from time import sleep\n", "import numpy.random as random\n", "from concurrent.futures import ThreadPoolExecutor\n", "\n", "common_data = []\n", "\n", "def work(i):\n", " sleep(random.random())\n", " common_data.append(i)\n", " # print(f'Task {i} is complete')\n", "\n", "data = list(range(8))\n", "\n", "results = []\n", "\n", "with ThreadPoolExecutor(2) as executor:\n", " executor.map(work, data)\n", "\n", "print(common_data)" ] }, { "cell_type": "markdown", "id": "e7d5e2ac-ddfe-4335-9440-20413991494f", "metadata": {}, "source": [ "### Запуска многопоточного выполнения функции через ProcessPoolExecutor" ] }, { "cell_type": "code", "execution_count": 18, "id": "b803c53d-2406-41ad-a775-bef0a8cef521", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Task 0 is completeTask 1 is complete\n", "\n", "Task 3 is completeTask 2 is complete\n", "\n", "Task 4 is completeTask 5 is complete\n", "\n", "Task 6 is completeTask 7 is complete\n", "\n", "[]\n" ] } ], "source": [ "from time import sleep\n", "import numpy.random as random\n", "from concurrent.futures import ProcessPoolExecutor\n", "\n", "#Этот пример не работет - common_data не является общей переменный для разных процессов\n", "\n", "common_data = []\n", "\n", "def work(i):\n", " sleep(random.random())\n", " common_data.append(i)\n", " # print(f'Task {i} is complete')\n", " \n", "if __name__ == '__main__':\n", " data = list(range(8))\n", " with ProcessPoolExecutor(2) as executor:\n", " executor.map(work, data)\n", " print(common_data)" ] }, { "cell_type": "markdown", "id": "5e1b13f0-1711-4a07-8941-df78011abb68", "metadata": {}, "source": [ "### Автоматический сбор результатов через return" ] }, { "cell_type": "code", "execution_count": 19, "id": "e6696dc6-53a2-438f-90cd-c5895049fed1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Task 0 is completeTask 1 is complete\n", "\n", "Task 2 is completeTask 3 is complete\n", "\n", "Task 4 is completeTask 5 is complete\n", "\n", "Task 6 is completeTask 7 is complete\n", "\n", "[0, 1, 2, 3, 4, 5, 6, 7]\n" ] } ], "source": [ "from time import sleep\n", "import numpy.random as random\n", "from concurrent.futures import ProcessPoolExecutor\n", "from multiprocessing.sharedctypes import Array\n", "\n", "def work(i):\n", " sleep(random.random())\n", " # print(f'Task {i} is complete')\n", " return i\n", " \n", "if __name__ == '__main__':\n", " data = list(range(8))\n", " with ProcessPoolExecutor(2) as executor:\n", " ft = executor.map(work, data)\n", " \n", " print(list(ft))" ] }, { "cell_type": "markdown", "id": "d8ea8950-5561-4074-ac8a-a3256687f3bf", "metadata": {}, "source": [ "### Запуска многопоточного выполнения функции через MPIPoolExecutor\n", "\n", "Для запуск данного кода нужно раскоментировать все закоментированные строки, а запуск следует производить командой `mpiexec -n 4 python -m mpi4py.futures file.py`, где 4 - число вычислительных узлов." ] }, { "cell_type": "code", "execution_count": 24, "id": "569ef35d-e912-44e4-a5f3-7ac82ecf679d", "metadata": { "scrolled": true }, "outputs": [], "source": [ "# from mpi4py import MPI\n", "# from mpi4py.futures import MPIPoolExecutor\n", "from time import sleep\n", "import numpy.random as random\n", "\n", "def work(i):\n", " sleep(random.random())\n", " return i\n", "\n", "if __name__ == '__main__':\n", " data = list(range(8))\n", " results = []\n", " #with MPIPoolExecutor(2) as executor:\n", " # s = executor.map(work, data)\n", " # print(list(s))" ] } ], "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.12.6" } }, "nbformat": 4, "nbformat_minor": 5 }