From 47a65c552b5ab84fd174d7e9a52d19c92210cf2d Mon Sep 17 00:00:00 2001
From: Pavel Kirilin <win10@list.ru>
Date: Mon, 6 Jul 2020 03:47:04 +0400
Subject: [PATCH] Added bilateral filter.

Signed-off-by: Pavel Kirilin <win10@list.ru>
---
 Makefile                       |  13 +-
 README.md                      |  21 ++-
 bilateral/.gitignore           | 142 +++++++++++++++++
 bilateral/Makefile             |  26 ++++
 bilateral/hooks/hook-pycuda.py |   2 +
 bilateral/main.py              |  62 ++++++++
 bilateral/poetry.lock          | 276 +++++++++++++++++++++++++++++++++
 bilateral/pyproject.toml       |  19 +++
 bilateral/src/__init__.py      |   0
 bilateral/src/cpu.py           |  25 +++
 bilateral/src/gpu.py           |  48 ++++++
 bilateral/src/kernel.cu        |  21 +++
 bilateral/test_image.jpg       | Bin 0 -> 51964 bytes
 matmul/Makefile                |   6 +-
 pi/Makefile                    |   4 +-
 15 files changed, 655 insertions(+), 10 deletions(-)
 create mode 100644 bilateral/.gitignore
 create mode 100644 bilateral/Makefile
 create mode 100644 bilateral/hooks/hook-pycuda.py
 create mode 100644 bilateral/main.py
 create mode 100644 bilateral/poetry.lock
 create mode 100644 bilateral/pyproject.toml
 create mode 100644 bilateral/src/__init__.py
 create mode 100644 bilateral/src/cpu.py
 create mode 100644 bilateral/src/gpu.py
 create mode 100644 bilateral/src/kernel.cu
 create mode 100644 bilateral/test_image.jpg

diff --git a/Makefile b/Makefile
index 8cb417b..4d8e3ae 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 BIN_DIR=bin
 
-all: $(BIN_DIR)/matmul $(BIN_DIR)/pi
+all: $(BIN_DIR)/matmul $(BIN_DIR)/pi $(BIN_DIR)/bilateral
 
 $(BIN_DIR):
 	mkdir -p ./bin
@@ -17,9 +17,16 @@ pi/out:
 $(BIN_DIR)/pi: $(BIN_DIR) pi/out
 	cp ./pi/out $(BIN_DIR)/pi
 
+bilateral/out:
+	cd ./bilateral/; make
+
+$(BIN_DIR)/bilateral: $(BIN_DIR) bilateral/out
+	cp ./bilateral/out $(BIN_DIR)/bilateral
+
 clean:
-	rm -fv pi/out
-	rm -fv matmul/out
+	cd ./matmul/; make clean
+	cd ./pi; make clean
+	cd ./bilateral/; make clean
 	rm -rfv $(BIN_DIR)
 
 
diff --git a/README.md b/README.md
index 175e53b..6b12b85 100644
--- a/README.md
+++ b/README.md
@@ -26,7 +26,7 @@ The source code of solution shown in [this file](./matmul/main.cu).
 
 # The PI number calculus
 
-The problem is about how we can accelerate the approximation calculations of the Pi number using GPU using the Monte-Carlo method.
+The problem is about how we can accelerate the approximation calculations of the Pi number on GPU using the Monte-Carlo method.
 
 The source code of solution shown in [this file](./pi/main.cu).
 
@@ -39,4 +39,21 @@ The source code of solution shown in [this file](./pi/main.cu).
 | 300     | 0.045376 | 0.078464 | 0.578303           |
 | 1000    | 0.044672 | 0.097408 | 0.458607           |
 | 100000  | 0.807616 | 0.180928 | 4.46374            |
-| 1000000 | 4.33581  | 1.43181  | 3.0282             |
\ No newline at end of file
+| 1000000 | 4.33581  | 1.43181  | 3.0282             |
+
+
+# The bilateral image filtering
+
+The problem is about how we can accelerate the image filtering on GPU with bilateral filter.
+
+### Input parameters:
+- img_path - path to source image_file
+- sigma_r - smoothing parameter
+- sigma_d - smoothing parameter
+
+### Calucatuion results
+| Sigma r | Sigma d | CPU time | GPU time | Acceleration ratio |
+|---------|---------|----------|----------|--------------------|
+| 40      | 90      | 8.650950 | 0.022675 | 381.51066          |
+| 75      | 75      | 9.288938 | 0.022062 | 421.02762          |
+| 0.4     | 0.4     | 9.993022 | 0.022515 | 443.82321          |
\ No newline at end of file
diff --git a/bilateral/.gitignore b/bilateral/.gitignore
new file mode 100644
index 0000000..1dbd9e5
--- /dev/null
+++ b/bilateral/.gitignore
@@ -0,0 +1,142 @@
+*.bmp
+out_imgs/*
+out
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+#  Usually these files are written by a python script from a template
+#  before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+#   For a library or package, you might want to ignore these files since the code is
+#   intended to run in multiple environments; otherwise, check them in:
+# .python-version
+
+# pipenv
+#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+#   However, in case of collaboration, if having platform-specific dependencies or dependencies
+#   having no cross-platform support, pipenv may install dependencies that don't work, or not
+#   install all needed dependencies.
+#Pipfile.lock
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
+
diff --git a/bilateral/Makefile b/bilateral/Makefile
new file mode 100644
index 0000000..d906516
--- /dev/null
+++ b/bilateral/Makefile
@@ -0,0 +1,26 @@
+EBMP_DIR=EasyBMP
+
+all: out post_install
+
+poetry:
+	pip install --user poetry
+
+out:
+		poetry run pyinstaller -F \
+			--clean \
+			--add-data 'src/kernel.cu:src' \
+			--additional-hooks-dir='./hooks/' \
+			--exclude-module='FixTk' \
+			--exclude-module='tcl' \
+			--exclude-module='tk' \
+			--exclude-module='_tkinter' \
+			--exclude-module='tkinter' \
+			--exclude-module='Tkinter' \
+			main.py
+		cp ./dist/main out
+
+post_install:
+	rm -rf ./__pycache__/ ./build/ ./dist/ main.spec
+
+clean:
+	rm -rf out out_imgs/
diff --git a/bilateral/hooks/hook-pycuda.py b/bilateral/hooks/hook-pycuda.py
new file mode 100644
index 0000000..bf41b49
--- /dev/null
+++ b/bilateral/hooks/hook-pycuda.py
@@ -0,0 +1,2 @@
+from PyInstaller.utils.hooks import copy_metadata
+datas = copy_metadata('pycuda')
diff --git a/bilateral/main.py b/bilateral/main.py
new file mode 100644
index 0000000..fb2c562
--- /dev/null
+++ b/bilateral/main.py
@@ -0,0 +1,62 @@
+import numpy as np
+from PIL import Image
+from src import gpu, cpu
+import fire
+import logging
+from pathlib import Path
+logger = logging.getLogger(__name__)
+
+
+def read_img(file_path: str) -> np.ndarray:
+    logger.debug(f'Reading image {file_path}')
+    src_img = Image.open(file_path).convert('L')
+    return np.asarray(src_img)
+
+
+def write_img(img_arr: np.ndarray, img_name: str):
+    Path('out_imgs').mkdir(exist_ok=True)
+    res_img = Image.fromarray(img_arr).convert('L')
+    filename = f'out_imgs/{img_name}.png'
+    logger.debug(f'Writing image to {filename}')
+    res_img.save(filename)
+
+
+class CLI(object):
+    def run(self,
+            img_path: str,
+            sigma_r: float = 75,
+            sigma_d: float = 75):
+        gpu_time = self.run_gpu(img_path, sigma_r, sigma_d)
+        cpu_time = self.run_cpu(img_path, sigma_r, sigma_d)
+        logger.info(f'CPU execution time: {cpu_time}')
+        logger.info(f'GPU execution time: {gpu_time}')
+        logger.info(f'Acceleration: {cpu_time / gpu_time:.5f}')
+
+    def run_gpu(self,
+                img_path: str,
+                sigma_r: float = 75,
+                sigma_d: float = 75):
+        src_img = read_img(img_path)
+        res_img, execution_time = gpu.filter_image(src_img, sigma_r, sigma_d)
+        write_img(res_img, 'gpu')
+        return execution_time
+
+    def run_cpu(self,
+                img_path: str,
+                sigma_r: float = 75,
+                sigma_d: float = 75):
+        src_img = read_img(img_path)
+        res_img, execution_time = cpu.filter_image(src_img, sigma_r, sigma_d)
+        write_img(res_img, 'cpu')
+        return execution_time
+
+
+def setup_logging():
+    logging.basicConfig(
+        format="[%(levelname)8s] %(msg)s {%(filename)s:%(lineno)s}",
+        level=logging.DEBUG)
+
+
+if __name__ == '__main__':
+    setup_logging()
+    fire.Fire(CLI)
diff --git a/bilateral/poetry.lock b/bilateral/poetry.lock
new file mode 100644
index 0000000..2a64246
--- /dev/null
+++ b/bilateral/poetry.lock
@@ -0,0 +1,276 @@
+[[package]]
+category = "main"
+description = "Python graph (network) package"
+name = "altgraph"
+optional = false
+python-versions = "*"
+version = "0.17"
+
+[[package]]
+category = "main"
+description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+name = "appdirs"
+optional = false
+python-versions = "*"
+version = "1.4.4"
+
+[[package]]
+category = "main"
+description = "Decorators for Humans"
+name = "decorator"
+optional = false
+python-versions = ">=2.6, !=3.0.*, !=3.1.*"
+version = "4.4.2"
+
+[[package]]
+category = "main"
+description = "Python 2.7 backport of the \"dis\" module from Python 3.5+"
+name = "dis3"
+optional = false
+python-versions = "*"
+version = "0.1.3"
+
+[[package]]
+category = "main"
+description = "A library for automatically generating command line interfaces."
+name = "fire"
+optional = false
+python-versions = "*"
+version = "0.3.1"
+
+[package.dependencies]
+six = "*"
+termcolor = "*"
+
+[[package]]
+category = "main"
+description = "A super-fast templating language that borrows the  best ideas from the existing templating languages."
+name = "mako"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+version = "1.1.3"
+
+[package.dependencies]
+MarkupSafe = ">=0.9.2"
+
+[package.extras]
+babel = ["babel"]
+lingua = ["lingua"]
+
+[[package]]
+category = "main"
+description = "Safely add untrusted strings to HTML/XML markup."
+name = "markupsafe"
+optional = false
+python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+version = "1.1.1"
+
+[[package]]
+category = "main"
+description = "NumPy is the fundamental package for array computing with Python."
+name = "numpy"
+optional = false
+python-versions = ">=3.6"
+version = "1.19.0"
+
+[[package]]
+category = "main"
+description = "Python Imaging Library (Fork)"
+name = "pillow"
+optional = false
+python-versions = ">=3.5"
+version = "7.2.0"
+
+[[package]]
+category = "main"
+description = "Python wrapper for Nvidia CUDA"
+name = "pycuda"
+optional = false
+python-versions = "*"
+version = "2019.1.2"
+
+[package.dependencies]
+appdirs = ">=1.4.0"
+decorator = ">=3.2.0"
+mako = "*"
+pytools = ">=2011.2"
+
+[[package]]
+category = "main"
+description = "PyInstaller bundles a Python application and all its dependencies into a single package."
+name = "pyinstaller"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+version = "3.6"
+
+[package.dependencies]
+altgraph = "*"
+dis3 = "*"
+setuptools = "*"
+
+[[package]]
+category = "main"
+description = "A collection of tools for Python"
+name = "pytools"
+optional = false
+python-versions = "~=3.6"
+version = "2020.3.1"
+
+[package.dependencies]
+appdirs = ">=1.4.0"
+decorator = ">=3.2.0"
+numpy = ">=1.6.0"
+six = ">=1.8.0"
+
+[[package]]
+category = "main"
+description = "Python 2 and 3 compatibility utilities"
+name = "six"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+version = "1.15.0"
+
+[[package]]
+category = "main"
+description = "ANSII Color formatting for output in terminal."
+name = "termcolor"
+optional = false
+python-versions = "*"
+version = "1.1.0"
+
+[metadata]
+content-hash = "df15e4cc962947ea0257fd079fe5702ea74be601b1f1afdcce9598c491df4018"
+python-versions = "^3.8"
+
+[metadata.files]
+altgraph = [
+    {file = "altgraph-0.17-py2.py3-none-any.whl", hash = "sha256:c623e5f3408ca61d4016f23a681b9adb100802ca3e3da5e718915a9e4052cebe"},
+    {file = "altgraph-0.17.tar.gz", hash = "sha256:1f05a47122542f97028caf78775a095fbe6a2699b5089de8477eb583167d69aa"},
+]
+appdirs = [
+    {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"},
+    {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"},
+]
+decorator = [
+    {file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"},
+    {file = "decorator-4.4.2.tar.gz", hash = "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"},
+]
+dis3 = [
+    {file = "dis3-0.1.3-py2-none-any.whl", hash = "sha256:61f7720dd0d8749d23fda3d7227ce74d73da11c2fade993a67ab2f9852451b14"},
+    {file = "dis3-0.1.3-py3-none-any.whl", hash = "sha256:30b6412d33d738663e8ded781b138f4b01116437f0872aa56aa3adba6aeff218"},
+    {file = "dis3-0.1.3.tar.gz", hash = "sha256:9259b881fc1df02ed12ac25f82d4a85b44241854330b1a651e40e0c675cb2d1e"},
+]
+fire = [
+    {file = "fire-0.3.1.tar.gz", hash = "sha256:9736a16227c3d469e5d2d296bce5b4d8fa8d7851e953bda327a455fc2994307f"},
+]
+mako = [
+    {file = "Mako-1.1.3-py2.py3-none-any.whl", hash = "sha256:93729a258e4ff0747c876bd9e20df1b9758028946e976324ccd2d68245c7b6a9"},
+    {file = "Mako-1.1.3.tar.gz", hash = "sha256:8195c8c1400ceb53496064314c6736719c6f25e7479cd24c77be3d9361cddc27"},
+]
+markupsafe = [
+    {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"},
+    {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"},
+    {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183"},
+    {file = "MarkupSafe-1.1.1-cp27-cp27m-win32.whl", hash = "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b"},
+    {file = "MarkupSafe-1.1.1-cp27-cp27m-win_amd64.whl", hash = "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e"},
+    {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f"},
+    {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1"},
+    {file = "MarkupSafe-1.1.1-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5"},
+    {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1"},
+    {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735"},
+    {file = "MarkupSafe-1.1.1-cp34-cp34m-win32.whl", hash = "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21"},
+    {file = "MarkupSafe-1.1.1-cp34-cp34m-win_amd64.whl", hash = "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235"},
+    {file = "MarkupSafe-1.1.1-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b"},
+    {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f"},
+    {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905"},
+    {file = "MarkupSafe-1.1.1-cp35-cp35m-win32.whl", hash = "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1"},
+    {file = "MarkupSafe-1.1.1-cp35-cp35m-win_amd64.whl", hash = "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d"},
+    {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff"},
+    {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473"},
+    {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e"},
+    {file = "MarkupSafe-1.1.1-cp36-cp36m-win32.whl", hash = "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66"},
+    {file = "MarkupSafe-1.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5"},
+    {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d"},
+    {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e"},
+    {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"},
+    {file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"},
+    {file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"},
+    {file = "MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15"},
+    {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2"},
+    {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42"},
+    {file = "MarkupSafe-1.1.1-cp38-cp38-win32.whl", hash = "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b"},
+    {file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"},
+    {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"},
+]
+numpy = [
+    {file = "numpy-1.19.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:63d971bb211ad3ca37b2adecdd5365f40f3b741a455beecba70fd0dde8b2a4cb"},
+    {file = "numpy-1.19.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:b6aaeadf1e4866ca0fdf7bb4eed25e521ae21a7947c59f78154b24fc7abbe1dd"},
+    {file = "numpy-1.19.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:13af0184177469192d80db9bd02619f6fa8b922f9f327e077d6f2a6acb1ce1c0"},
+    {file = "numpy-1.19.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:356f96c9fbec59974a592452ab6a036cd6f180822a60b529a975c9467fcd5f23"},
+    {file = "numpy-1.19.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa1fe75b4a9e18b66ae7f0b122543c42debcf800aaafa0212aaff3ad273c2596"},
+    {file = "numpy-1.19.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:cbe326f6d364375a8e5a8ccb7e9cd73f4b2f6dc3b2ed205633a0db8243e2a96a"},
+    {file = "numpy-1.19.0-cp36-cp36m-win32.whl", hash = "sha256:a2e3a39f43f0ce95204beb8fe0831199542ccab1e0c6e486a0b4947256215632"},
+    {file = "numpy-1.19.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7b852817800eb02e109ae4a9cef2beda8dd50d98b76b6cfb7b5c0099d27b52d4"},
+    {file = "numpy-1.19.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d97a86937cf9970453c3b62abb55a6475f173347b4cde7f8dcdb48c8e1b9952d"},
+    {file = "numpy-1.19.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:a86c962e211f37edd61d6e11bb4df7eddc4a519a38a856e20a6498c319efa6b0"},
+    {file = "numpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d34fbb98ad0d6b563b95de852a284074514331e6b9da0a9fc894fb1cdae7a79e"},
+    {file = "numpy-1.19.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:658624a11f6e1c252b2cd170d94bf28c8f9410acab9f2fd4369e11e1cd4e1aaf"},
+    {file = "numpy-1.19.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:4d054f013a1983551254e2379385e359884e5af105e3efe00418977d02f634a7"},
+    {file = "numpy-1.19.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:26a45798ca2a4e168d00de75d4a524abf5907949231512f372b217ede3429e98"},
+    {file = "numpy-1.19.0-cp37-cp37m-win32.whl", hash = "sha256:3c40c827d36c6d1c3cf413694d7dc843d50997ebffbc7c87d888a203ed6403a7"},
+    {file = "numpy-1.19.0-cp37-cp37m-win_amd64.whl", hash = "sha256:be62aeff8f2f054eff7725f502f6228298891fd648dc2630e03e44bf63e8cee0"},
+    {file = "numpy-1.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dd53d7c4a69e766e4900f29db5872f5824a06827d594427cf1a4aa542818b796"},
+    {file = "numpy-1.19.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:30a59fb41bb6b8c465ab50d60a1b298d1cd7b85274e71f38af5a75d6c475d2d2"},
+    {file = "numpy-1.19.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:df1889701e2dfd8ba4dc9b1a010f0a60950077fb5242bb92c8b5c7f1a6f2668a"},
+    {file = "numpy-1.19.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:33c623ef9ca5e19e05991f127c1be5aeb1ab5cdf30cb1c5cf3960752e58b599b"},
+    {file = "numpy-1.19.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:26f509450db547e4dfa3ec739419b31edad646d21fb8d0ed0734188b35ff6b27"},
+    {file = "numpy-1.19.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:7b57f26e5e6ee2f14f960db46bd58ffdca25ca06dd997729b1b179fddd35f5a3"},
+    {file = "numpy-1.19.0-cp38-cp38-win32.whl", hash = "sha256:a8705c5073fe3fcc297fb8e0b31aa794e05af6a329e81b7ca4ffecab7f2b95ef"},
+    {file = "numpy-1.19.0-cp38-cp38-win_amd64.whl", hash = "sha256:c2edbb783c841e36ca0fa159f0ae97a88ce8137fb3a6cd82eae77349ba4b607b"},
+    {file = "numpy-1.19.0-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:8cde829f14bd38f6da7b2954be0f2837043e8b8d7a9110ec5e318ae6bf706610"},
+    {file = "numpy-1.19.0.zip", hash = "sha256:76766cc80d6128750075378d3bb7812cf146415bd29b588616f72c943c00d598"},
+]
+pillow = [
+    {file = "Pillow-7.2.0-cp35-cp35m-macosx_10_10_intel.whl", hash = "sha256:1ca594126d3c4def54babee699c055a913efb01e106c309fa6b04405d474d5ae"},
+    {file = "Pillow-7.2.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:c92302a33138409e8f1ad16731568c55c9053eee71bb05b6b744067e1b62380f"},
+    {file = "Pillow-7.2.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:8dad18b69f710bf3a001d2bf3afab7c432785d94fcf819c16b5207b1cfd17d38"},
+    {file = "Pillow-7.2.0-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:431b15cffbf949e89df2f7b48528be18b78bfa5177cb3036284a5508159492b5"},
+    {file = "Pillow-7.2.0-cp35-cp35m-win32.whl", hash = "sha256:09d7f9e64289cb40c2c8d7ad674b2ed6105f55dc3b09aa8e4918e20a0311e7ad"},
+    {file = "Pillow-7.2.0-cp35-cp35m-win_amd64.whl", hash = "sha256:0295442429645fa16d05bd567ef5cff178482439c9aad0411d3f0ce9b88b3a6f"},
+    {file = "Pillow-7.2.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:ec29604081f10f16a7aea809ad42e27764188fc258b02259a03a8ff7ded3808d"},
+    {file = "Pillow-7.2.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:612cfda94e9c8346f239bf1a4b082fdd5c8143cf82d685ba2dba76e7adeeb233"},
+    {file = "Pillow-7.2.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0a80dd307a5d8440b0a08bd7b81617e04d870e40a3e46a32d9c246e54705e86f"},
+    {file = "Pillow-7.2.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:06aba4169e78c439d528fdeb34762c3b61a70813527a2c57f0540541e9f433a8"},
+    {file = "Pillow-7.2.0-cp36-cp36m-win32.whl", hash = "sha256:f7e30c27477dffc3e85c2463b3e649f751789e0f6c8456099eea7ddd53be4a8a"},
+    {file = "Pillow-7.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:ffe538682dc19cc542ae7c3e504fdf54ca7f86fb8a135e59dd6bc8627eae6cce"},
+    {file = "Pillow-7.2.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:94cf49723928eb6070a892cb39d6c156f7b5a2db4e8971cb958f7b6b104fb4c4"},
+    {file = "Pillow-7.2.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6edb5446f44d901e8683ffb25ebdfc26988ee813da3bf91e12252b57ac163727"},
+    {file = "Pillow-7.2.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:52125833b070791fcb5710fabc640fc1df07d087fc0c0f02d3661f76c23c5b8b"},
+    {file = "Pillow-7.2.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:9ad7f865eebde135d526bb3163d0b23ffff365cf87e767c649550964ad72785d"},
+    {file = "Pillow-7.2.0-cp37-cp37m-win32.whl", hash = "sha256:c79f9c5fb846285f943aafeafda3358992d64f0ef58566e23484132ecd8d7d63"},
+    {file = "Pillow-7.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d350f0f2c2421e65fbc62690f26b59b0bcda1b614beb318c81e38647e0f673a1"},
+    {file = "Pillow-7.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:6d7741e65835716ceea0fd13a7d0192961212fd59e741a46bbed7a473c634ed6"},
+    {file = "Pillow-7.2.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:edf31f1150778abd4322444c393ab9c7bd2af271dd4dafb4208fb613b1f3cdc9"},
+    {file = "Pillow-7.2.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:d08b23fdb388c0715990cbc06866db554e1822c4bdcf6d4166cf30ac82df8c41"},
+    {file = "Pillow-7.2.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:5e51ee2b8114def244384eda1c82b10e307ad9778dac5c83fb0943775a653cd8"},
+    {file = "Pillow-7.2.0-cp38-cp38-win32.whl", hash = "sha256:725aa6cfc66ce2857d585f06e9519a1cc0ef6d13f186ff3447ab6dff0a09bc7f"},
+    {file = "Pillow-7.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:a060cf8aa332052df2158e5a119303965be92c3da6f2d93b6878f0ebca80b2f6"},
+    {file = "Pillow-7.2.0-pp36-pypy36_pp73-win32.whl", hash = "sha256:25930fadde8019f374400f7986e8404c8b781ce519da27792cbe46eabec00c4d"},
+    {file = "Pillow-7.2.0.tar.gz", hash = "sha256:97f9e7953a77d5a70f49b9a48da7776dc51e9b738151b22dacf101641594a626"},
+]
+pycuda = [
+    {file = "pycuda-2019.1.2.tar.gz", hash = "sha256:ada56ce98a41f9f95fe18809f38afbae473a5c62d346cfa126a2d5477f24cc8a"},
+]
+pyinstaller = [
+    {file = "PyInstaller-3.6.tar.gz", hash = "sha256:3730fa80d088f8bb7084d32480eb87cbb4ddb64123363763cf8f2a1378c1c4b7"},
+]
+pytools = [
+    {file = "pytools-2020.3.1.tar.gz", hash = "sha256:86ebb27e8d946b30bc4479f97862066eb26e305d5ad4327230b2b2f8cbf110f9"},
+]
+six = [
+    {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"},
+    {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"},
+]
+termcolor = [
+    {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"},
+]
diff --git a/bilateral/pyproject.toml b/bilateral/pyproject.toml
new file mode 100644
index 0000000..9a37436
--- /dev/null
+++ b/bilateral/pyproject.toml
@@ -0,0 +1,19 @@
+[tool.poetry]
+name = "bilateral"
+version = "0.1.0"
+description = ""
+authors = ["Pavel Kirilin <win10@list.ru>"]
+
+[tool.poetry.dependencies]
+python = "^3.8"
+numpy = "^1.19.0"
+pyinstaller = "^3.6"
+pycuda = "^2019.1.2"
+fire = "^0.3.1"
+pillow = "^7.2.0"
+
+[tool.poetry.dev-dependencies]
+
+[build-system]
+requires = ["poetry>=0.12"]
+build-backend = "poetry.masonry.api"
diff --git a/bilateral/src/__init__.py b/bilateral/src/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/bilateral/src/cpu.py b/bilateral/src/cpu.py
new file mode 100644
index 0000000..8b20655
--- /dev/null
+++ b/bilateral/src/cpu.py
@@ -0,0 +1,25 @@
+import numpy as np
+import time
+import logging
+
+logger = logging.getLogger(__name__)
+
+
+def filter_image(image: np.ndarray, sigma_r: float, sigma_d: float):
+    result = np.zeros(image.shape)
+    logger.debug("Started CPU filtering")
+    start_time = time.time()
+    for i in range(1, image.shape[0] - 1):
+        for j in range(1, image.shape[1] - 1):
+            c = 0
+            s = 0
+            for k in range(i - 1, i + 2):
+                for l in range(j - 1, j + 2):
+                    g = np.exp(-((k - i)**2 + (l - j)**2) / sigma_d**2)
+                    r = np.exp(-(image[k, l] - image[i, j])**2 / sigma_r**2)
+                    c += g * r
+                    s += g * r * image[k, l]
+            result[i, j] = s / c
+    result_time = time.time() - start_time
+    logger.debug(f"CPU execution time: {result_time} ms")
+    return result, result_time
diff --git a/bilateral/src/gpu.py b/bilateral/src/gpu.py
new file mode 100644
index 0000000..b183a2c
--- /dev/null
+++ b/bilateral/src/gpu.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+import time
+import numpy as np
+import pkgutil
+import pycuda.autoinit
+import pycuda.driver as drv
+from pycuda.compiler import SourceModule
+
+import logging
+
+logger = logging.getLogger(__name__)
+
+
+def filter_image(image: np.ndarray, sigma_r: float, sigma_d: float):
+    kernel_code = pkgutil.get_data('src',
+                                   'kernel.cu').decode('UTF-8', 'ignore')
+    logger.debug('Read kernel code.')
+    logger.debug(kernel_code)
+    kernel = SourceModule(kernel_code)
+    N, M = image.shape
+    logger.debug("Image shape: {N}, {M}")
+    result = np.zeros((N, M), dtype=np.uint32)
+    block_size = (8, 8, 1)
+    logger.debug(f'Using block size: {block_size}')
+    grid_size = (int(np.ceil(N / block_size[0])),
+                 int(np.ceil(M / block_size[1])))
+    logger.debug(f'Using block size: {block_size}')
+    filt_gpu = kernel.get_function("filter")
+    tex = kernel.get_texref("tex")
+    tex.set_filter_mode(drv.filter_mode.LINEAR)
+    tex.set_address_mode(0, drv.address_mode.MIRROR)
+    tex.set_address_mode(1, drv.address_mode.MIRROR)
+    drv.matrix_to_texref(image.astype(np.uint32), tex, order="C")
+    start_time = time.time()
+    filt_gpu(drv.Out(result),
+             np.int32(N),
+             np.int32(M),
+             np.float32(sigma_d),
+             np.float32(sigma_r),
+             block=block_size,
+             grid=grid_size,
+             texrefs=[tex])
+    drv.Context.synchronize()
+    end_time = time.time()
+    execution_time = end_time - start_time
+    logging.info(f"Execution time: {execution_time}")
+    return result, execution_time
diff --git a/bilateral/src/kernel.cu b/bilateral/src/kernel.cu
new file mode 100644
index 0000000..19217a5
--- /dev/null
+++ b/bilateral/src/kernel.cu
@@ -0,0 +1,21 @@
+texture<unsigned int, 2, cudaReadModeElementType> tex;
+__global__ void filter(unsigned int* result, const int M, const int N, const float sigma_d, const float sigma_r)
+{
+  const int i = threadIdx.x + blockDim.x * blockIdx.x;
+  const int j = threadIdx.y + blockDim.y * blockIdx.y;
+  if ((i < M) && (j < N)) {
+      float s = 0;
+      float c = 0;
+      for (int l = i - 1; l <= i + 1; l++){
+        for (int k = j - 1; k <= j + 1; k++){
+          float img1 = tex2D(tex, k, l) / 255;
+          float img2 = tex2D(tex, i, j) / 255;
+          float g = exp(-(pow(k - i, 2) + pow(l - j, 2)) / pow(sigma_d, 2));
+          float r = exp(-pow((img1 - img2) * 255, 2) / pow(sigma_r, 2));
+          c += g * r;
+          s += g * r * tex2D(tex, k, l);
+        }
+      }
+      result[i * N + j] = s / c;
+  }
+}
diff --git a/bilateral/test_image.jpg b/bilateral/test_image.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0f93a62aeba189bcfe93c41f461526c5f613f65a
GIT binary patch
literal 51964
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

literal 0
HcmV?d00001

diff --git a/matmul/Makefile b/matmul/Makefile
index 8485037..2bb2ef8 100644
--- a/matmul/Makefile
+++ b/matmul/Makefile
@@ -2,11 +2,11 @@ OUT_FILE_NAME=out
 
 all: $(OUT_FILE_NAME)
 
-out: main.cu
-	nvcc -O3  main.cu -o $(OUT_FILE_NAME)
+$(OUT_FILE_NAME): main.cu
+	nvcc -O3  main.cu -o $@
 
 clean:
-	rm $(OUT_FILE_NAME)
+	rm -f $(OUT_FILE_NAME)
 
 run: $(OUT_FILE_NAME)
 	./$(OUT_FILE_NAME)
diff --git a/pi/Makefile b/pi/Makefile
index bd58546..92aa6c5 100644
--- a/pi/Makefile
+++ b/pi/Makefile
@@ -2,8 +2,8 @@ OUT_FILE_NAME=out
 
 all: $(OUT_FILE_NAME)
 
-out: main.cu
-	nvcc -O2 -o $(OUT_FILE_NAME) main.cu -DTHRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_CUDA
+$(OUT_FILE_NAME): main.cu
+	nvcc -O2 -o $@ main.cu -DTHRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_CUDA
 
 clean:
 	rm $(OUT_FILE_NAME)
-- 
GitLab