{ "info": { "author": "Ben van Werkhoven", "author_email": "b.vanwerkhoven@esciencecenter.nl", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Science/Research", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5", "Topic :: Scientific/Engineering", "Topic :: Software Development", "Topic :: System :: Distributed Computing" ], "description": "Kernel Tuner\n============\n\n|Build Status| |Codacy Badge| |Codacy Badge2| |PyPi Badge|\n\nKernel Tuner simplifies the software development of optimized and auto-tuned GPU programs, by enabling Python-based unit testing of GPU code and making it easy to develop scripts for auto-tuning GPU kernels. This also means no extensive changes and no new dependencies are required in the kernel code. The kernels can still be compiled and used as normal from any host programming language.\n\nKernel Tuner provides a comprehensive solution for auto-tuning GPU programs, supporting auto-tuning of user-defined parameters in both host and device code, supporting output verification of all benchmarked kernels during tuning, as well as many optimization strategies to speed up the tuning process.\n\nDocumentation\n-------------\n\nThe full documentation is available\n`here `__.\n\nInstallation\n------------\n\nThe easiest way to install the Kernel Tuner is using pip:\n\nTo tune CUDA kernels:\n\n- First, make sure you have the `CUDA Toolkit `_ installed\n- Then type: ``pip install kernel_tuner[cuda]``\n\nTo tune OpenCL kernels:\n\n- First, make sure you have an OpenCL compiler for your intended OpenCL platform\n- Then type: ``pip install kernel_tuner[opencl]``\n\nOr both:\n\n- ``pip install kernel_tuner[cuda,opencl]``\n\nMore information about how to install Kernel Tuner and its\ndependencies can be found in the `installation guide \n`__\n\nExample usage\n-------------\n\nThe following shows a simple example for tuning a CUDA kernel:\n\n.. code:: python\n\n kernel_string = \"\"\"\n __global__ void vector_add(float *c, float *a, float *b, int n) {\n int i = blockIdx.x * block_size_x + threadIdx.x;\n if (i`__.\n\nYou can find many - more extensive - example codes, in the\n`examples directory `__\nand in the `Kernel Tuner\ndocumentation pages `__.\n\nSearch strategies for tuning\n----------------------------\n\nKernel Tuner supports many optimization algorithms to accelerate the auto-tuning process. Currently \nimplemented search algorithms are: Brute Force (default), Nelder-Mead, Powell, CG, BFGS, L-BFGS-B, TNC, \nCOBYLA, SLSQP, Random Search, Basinhopping, Differential Evolution, a Genetic Algorithm, Particle Swarm \nOptimization, the Firefly Algorithm, and Simulated Annealing.\n\n.. image:: doc/gemm-amd-summary.png\n :width: 100%\n :align: center\n\nUsing a search strategy is easy, you only need to specify to ``tune_kernel`` which strategy and method \nyou would like to use, for example ``strategy=\"genetic_algorithm\"`` or ``strategy=\"basinhopping\", \nmethod=\"Powell\"``. For a full overview of the supported search strategies and methods please see the `user \napi documentation `__.\n\nTuning host and kernel code\n---------------------------\n\nIt is possible to tune for combinations of tunable parameters in\nboth host and kernel code. This allows for a number of powerfull things,\nsuch as tuning the number of streams for a kernel that uses CUDA Streams\nor OpenCL Command Queues to overlap transfers between host and device\nwith kernel execution. This can be done in combination with tuning the\nparameters inside the kernel code. See the `convolution\\_streams example\ncode `__\nand the\n`documentation `__\nfor a detailed explanation of the kernel tuner Python script.\n\n\nCorrectness verification\n------------------------\n\nOptionally, you can let the kernel tuner verify the output of every\nkernel it compiles and benchmarks, by passing an ``answer`` list. This\nlist matches the list of arguments to the kernel, but contains the\nexpected output of the kernel. Input arguments are replaced with None.\n\n.. code:: python\n\n answer = [a+b, None, None] # the order matches the arguments (in args) to the kernel\n tune_kernel(\"vector_add\", kernel_string, size, args, tune_params, answer=answer)\n\nContributing\n------------\n\nPlease see the `Contributions Guide `__.\n\nCitation\n--------\nA scientific paper about Kernel Tuner has been accepted for publication, please cite\nKernel Tuner as follows:\n\n.. code:: latex\n\n @article{kerneltuner,\n author = {Ben van Werkhoven},\n title = {Kernel Tuner: A search-optimizing GPU code auto-tuner},\n journal = {Future Generation Computer Systems},\n year = {2019},\n volume = {90},\n pages = {347-358},\n doi = {https://doi.org/10.1016/j.future.2018.08.004},\n }\n\nRelated work\n------------\n\nYou may also like `CLTune `__ by\nCedric Nugteren. CLTune is a C++ library for kernel tuning.\n\n.. |Build Status| image:: https://api.travis-ci.org/benvanwerkhoven/kernel_tuner.svg?branch=master\n :target: https://travis-ci.org/benvanwerkhoven/kernel_tuner\n.. |Codacy Badge| image:: https://api.codacy.com/project/badge/grade/016dc85044ab4d57b777449d93275608\n :target: https://www.codacy.com/app/b-vanwerkhoven/kernel_tuner\n.. |Codacy Badge2| image:: https://api.codacy.com/project/badge/coverage/016dc85044ab4d57b777449d93275608\n :target: https://www.codacy.com/app/b-vanwerkhoven/kernel_tuner\n.. |PyPi Badge| image:: https://img.shields.io/pypi/v/kernel_tuner.svg?colorB=blue \n :target: https://pypi.python.org/pypi/kernel_tuner/\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://benvanwerkhoven.github.io/kernel_tuner/", "keywords": "auto-tuning gpu computing pycuda cuda pyopencl opencl", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "kernel_tuner", "package_url": "https://pypi.org/project/kernel_tuner/", "platform": "", "project_url": "https://pypi.org/project/kernel_tuner/", "project_urls": { "Homepage": "http://benvanwerkhoven.github.io/kernel_tuner/" }, "release_url": "https://pypi.org/project/kernel_tuner/0.2.0/", "requires_dist": null, "requires_python": "", "summary": "A simple CUDA/OpenCL kernel tuner in Python", "version": "0.2.0" }, "last_serial": 4494241, "releases": { "0.1.0": [], "0.1.0b0": [ { "comment_text": "", "digests": { "md5": "cfc99037fde95aa9e33c97efa79e5066", "sha256": "b49aedb068ce58110b5ba4629703d7b388de3d18a5fc62a2a5c7dd09de2768dc" }, "downloads": -1, "filename": "kernel_tuner-0.1.0b0.tar.gz", "has_sig": false, "md5_digest": "cfc99037fde95aa9e33c97efa79e5066", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24741, "upload_time": "2016-11-02T13:03:50", "url": "https://files.pythonhosted.org/packages/a8/d9/ddad9bed30d7571d96286f1619ea5254c2c37823061bb6573a2af3a36ab4/kernel_tuner-0.1.0b0.tar.gz" } ], "0.1.0rc0": [ { "comment_text": "", "digests": { "md5": "8079ac1c105fb0f76a5ae8fc85942349", "sha256": "1e138b5a7c9fc015eecd74cf05a8ce2585a1449c38d0ac9b41bd25fe49a9b999" }, "downloads": -1, "filename": "kernel_tuner-0.1.0rc0.tar.gz", "has_sig": false, "md5_digest": "8079ac1c105fb0f76a5ae8fc85942349", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24747, "upload_time": "2016-11-08T10:39:48", "url": "https://files.pythonhosted.org/packages/50/d5/4ebd950cc0adf36690c8d1a6f30b269f5e59e0d97be9902c49ee188681dd/kernel_tuner-0.1.0rc0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "28a9f91ca564fee186076d37d361e3c6", "sha256": "df1988f78c47023e6743a4619b75ffe53aba858310daa9c54f001a20f3f32925" }, "downloads": -1, "filename": "kernel_tuner-0.1.1.tar.gz", "has_sig": false, "md5_digest": "28a9f91ca564fee186076d37d361e3c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24822, "upload_time": "2017-02-10T07:44:41", "url": "https://files.pythonhosted.org/packages/f5/6f/d4b751004297727d6244e29d651f40d6b91b8459c2b1b5b761936ba0037a/kernel_tuner-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "795eafb07aeadc2e9702cebffdd53803", "sha256": "9d0d6d084a29a73fb5e45284ab74c30e9784a3958717f7f6b261163826163dc9" }, "downloads": -1, "filename": "kernel_tuner-0.1.2.tar.gz", "has_sig": false, "md5_digest": "795eafb07aeadc2e9702cebffdd53803", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26761, "upload_time": "2017-03-29T07:03:12", "url": "https://files.pythonhosted.org/packages/b7/94/684fe811444f2d3c2e48b158334881117a25b0adc66b9a971b5f53fa52c4/kernel_tuner-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "c4419c0fc352a137b30b6da5fbbd510b", "sha256": "db8779c4d3e41233347cb62205f76958633ff64357d7578a69aa2554bdda10d0" }, "downloads": -1, "filename": "kernel_tuner-0.1.3.tar.gz", "has_sig": false, "md5_digest": "c4419c0fc352a137b30b6da5fbbd510b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26137, "upload_time": "2017-04-06T14:00:15", "url": "https://files.pythonhosted.org/packages/5d/80/c70164a514d4df90732b300a78122df2f9a4599d7729646e12d5f80f1229/kernel_tuner-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "a47cea640eca64052527d8069d9f8161", "sha256": "b180f8700b3ed0076d460cbd2002844eda48c7b22491b390d4941d18e03bae22" }, "downloads": -1, "filename": "kernel_tuner-0.1.4.tar.gz", "has_sig": false, "md5_digest": "a47cea640eca64052527d8069d9f8161", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27398, "upload_time": "2017-06-14T09:26:25", "url": "https://files.pythonhosted.org/packages/e1/e1/0f223133bd5ff2276f3a59781a45c3e1267358e9d6b82f5829189bdba94b/kernel_tuner-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "ed6e20cda8156668328d37f207065307", "sha256": "373cdfc950ace19a0b7a3c68aee168f8692418ddc1dc89cc993d09e085ac65cb" }, "downloads": -1, "filename": "kernel_tuner-0.1.5.tar.gz", "has_sig": false, "md5_digest": "ed6e20cda8156668328d37f207065307", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34856, "upload_time": "2017-07-21T14:02:21", "url": "https://files.pythonhosted.org/packages/87/06/643eb90b788ab91afa98571ba5babd1759279003d69c702c6a50403e8390/kernel_tuner-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "373c9aa7bb34b9ee4ab74cd9e5d234dc", "sha256": "02aa880be45fb2fdbded26f4e215d27949130711830065326d5800d37ef34600" }, "downloads": -1, "filename": "kernel_tuner-0.1.6.tar.gz", "has_sig": false, "md5_digest": "373c9aa7bb34b9ee4ab74cd9e5d234dc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39607, "upload_time": "2017-08-24T13:23:57", "url": "https://files.pythonhosted.org/packages/7b/df/0a05fff5167531d282997e6623878768f7b9aa78a27110e0a4b2ac6fb3ef/kernel_tuner-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "13ddb6a09eb32eb78b3e23f721d89207", "sha256": "77756ef3bd19fb67b035263e4b9908b12701eba7cf78a80337df06a4a03824f9" }, "downloads": -1, "filename": "kernel_tuner-0.1.7.tar.gz", "has_sig": false, "md5_digest": "13ddb6a09eb32eb78b3e23f721d89207", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39869, "upload_time": "2017-11-10T14:50:40", "url": "https://files.pythonhosted.org/packages/83/9a/5963d1e905ce53a77fb36aac2dc8025d0699bf28b4c4ccb69861b9d88f1a/kernel_tuner-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "634d77b20a8c1f2c33ed345f71cdb87a", "sha256": "42f0ccb2b694ce3b562322ff40f9ff924a9ccfe88e76ef8aa9e83209940c1ee3" }, "downloads": -1, "filename": "kernel_tuner-0.1.8.tar.gz", "has_sig": false, "md5_digest": "634d77b20a8c1f2c33ed345f71cdb87a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44251, "upload_time": "2017-11-23T21:02:14", "url": "https://files.pythonhosted.org/packages/53/0b/939814fc66eabe52cac7ea880176aa6a7fbf428aa5bb8e9079b116cd9c7f/kernel_tuner-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "4033037a28f82fe349815df37d2819fd", "sha256": "8dd5401f34722e1943cf1f8b26fd119d305c6ee4619dcb04de5bd1b16777d5e8" }, "downloads": -1, "filename": "kernel_tuner-0.1.9.tar.gz", "has_sig": false, "md5_digest": "4033037a28f82fe349815df37d2819fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45961, "upload_time": "2018-04-18T10:11:36", "url": "https://files.pythonhosted.org/packages/dd/b2/5f3e54ac4af9d52403cdb8c668296a967b1ab76bdd112d56e24be0d99489/kernel_tuner-0.1.9.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "24689f7d9500c1daaacd2df8256043ab", "sha256": "7f8af89e0876b69f7dc49b117fa070b988f4975bbff22c68072d6d2be0f593c1" }, "downloads": -1, "filename": "kernel_tuner-0.2.0.tar.gz", "has_sig": false, "md5_digest": "24689f7d9500c1daaacd2df8256043ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50138, "upload_time": "2018-11-16T16:18:24", "url": "https://files.pythonhosted.org/packages/7a/87/e08c2928ef2124c8e7660588d6031bc924d4b4de7337fdb7846ed6ce60ce/kernel_tuner-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "24689f7d9500c1daaacd2df8256043ab", "sha256": "7f8af89e0876b69f7dc49b117fa070b988f4975bbff22c68072d6d2be0f593c1" }, "downloads": -1, "filename": "kernel_tuner-0.2.0.tar.gz", "has_sig": false, "md5_digest": "24689f7d9500c1daaacd2df8256043ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50138, "upload_time": "2018-11-16T16:18:24", "url": "https://files.pythonhosted.org/packages/7a/87/e08c2928ef2124c8e7660588d6031bc924d4b4de7337fdb7846ed6ce60ce/kernel_tuner-0.2.0.tar.gz" } ] }