Skip to content

Instantly share code, notes, and snippets.

@dhfromkorea
Forked from mrocklin/pipeline-cpus.ipynb
Created May 25, 2020 21:33
Show Gist options
  • Save dhfromkorea/3fb3c7d98bf90e55f0f8c5949abad701 to your computer and use it in GitHub Desktop.
Save dhfromkorea/3fb3c7d98bf90e55f0f8c5949abad701 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Accelerate real-time Python workload\n",
"\n",
"We start with a simple signals processing workload, and then accelerate it by several orders magnitude using the following libraries:\n",
"\n",
"1. Numpy\n",
"2. Numba\n",
"3. Dask\n",
"4. CuPy\n",
"5. Numba CUDA\n",
"\n",
"We eventually run a real-time streaming system on multi-GPU hardware."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"def gather_from_detector():\n",
" return np.random.random((1000, 1000))\n",
"\n",
"@numba.jit\n",
"def smooth(x):\n",
" out = np.empty_like(x)\n",
" for i in range(1, x.shape[0] - 1):\n",
" for j in range(1, x.shape[1] - 1):\n",
" out[i, j] = (x[i + -1, j + -1] + x[i + -1, j + 0] + x[i + -1, j + 1] +\n",
" x[i + 0, j + -1] + x[i + 0, j + 0] + x[i + 0, j + 1] +\n",
" x[i + 1, j + -1] + x[i + 1, j + 0] + x[i + 1, j + 1]) // 9\n",
"\n",
" return out\n",
"\n",
"def save(x, filename):\n",
" pass"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%%time\n",
"\n",
"for i in range(1000):\n",
" img = client.submit(gather_from_detector, pure=False)\n",
" img = client.submit(smooth, img)\n",
" img = client.submit(np.fft.fft2, img)\n",
" future = client.submit(save, img, \"file-\" + str(i) + \"-.dat\")\n",
" fire_and_forget(future)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from dask.distributed import Client, LocalCluster, fire_and_forget\n",
"\n",
"cluster = LocalCluster()\n",
"client = Client(cluster)\n",
"client"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import asyncio\n",
"\n",
"async def f():\n",
" while True:\n",
" img = client.submit(gather_from_detector, pure=False)\n",
" img = client.submit(smooth, img)\n",
" img = client.submit(np.fft.fft2, img)\n",
" future = client.submit(save, img, \"file-\" + str(i) + \"-.dat\")\n",
" fire_and_forget(future)\n",
" await asyncio.sleep(0.01)\n",
" \n",
"asyncio.ensure_future(f())"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"cluster.scale(8)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment