{ "info": { "author": "Andrew R Porter", "author_email": "andrew.porter@stfc.ac.uk", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX", "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Topic :: Scientific/Engineering", "Topic :: Utilities" ], "description": "# Habakkuk #\nFortran code analysis for performance prediction\n\n## Getting started ##\n\nYou will need the 'git' revision control system and the python package\nmanager, pip, installed. You can then clone the repository to your\nlocal machine:\n\n git clone https://github.com/arporter/habakkuk.git\n\nand install it using pip (you can omit the --user flag if you have\nroot access and want to do a system-wide install):\n\n cd habakkuk\n pip install --user\n\nIf you used the --user flag then the habakkuk script will be installed\nin ~/.local/bin and the associated modules in\n~/.local/lib/pythonx.x/site-packages/habakkuk (where x.x is the\nversion of python you are using).\n\nOn redhat-based Linux systems, this should be all that is required. However, Ubuntu-based Linux systems are not generally configured to pick up locally-installed python packages. You must therefore do:\n\n export PATH=${HOME}/.local/bin:${PATH}\n export PYTHONPATH=${HOME}/.local/lib/pythonx.x/site-packages:${PYTHONPATH}\n\nHaving done this you should be all set to try the tool on\nsome Fortran code. There are various examples in src/tests/test_files.\nThe tool may be run like so:\n\n cd habakkuk\n habakkuk tests/test_files/triple_product.f90\n\nYou should then see output similar to the following:\n\n Wrote DAG to test_triple_product.gv\n Stats for DAG test_triple_product:\n 0 addition operators.\n 0 subtraction operators.\n 2 multiplication operators.\n 0 division operators.\n 0 fused multiply-adds.\n 2 FLOPs in total.\n 0 array references.\n 0 distinct cache-line references.\n Did not find any array/memory references\n Whole DAG in serial:\n Sum of cost of all nodes = 2 (cycles)\n 2 FLOPs in 2 cycles => 1.0000*CLOCK_SPEED FLOPS\n Everything in parallel to Critical path:\n Critical path contains 4 nodes, 2 FLOPs and is 2 cycles long\n FLOPS (ignoring memory accesses) = 1.0000*CLOCK_SPEED\n Wrote DAG to test_triple_product_step0.gv\n Wrote DAG to test_triple_product_step1.gv\n Wrote DAG to test_triple_product_step2.gv\n Schedule contains 2 steps:\n 0 * None (cost = 1)\n 1 * None (cost = 1)\n Estimate using computed schedule:\n Cost of schedule as a whole = 2 cycles\n FLOPS from schedule (ignoring memory accesses) = 1.0000*CLOCK_SPEED\n Estimate using perfect schedule:\n Cost if all ops on different execution ports are perfectly overlapped = 2 cycles\n e.g. at 3.85 GHz, these different estimates give (GFLOPS): \n No ILP | Computed Schedule | Perfect Schedule | Critical path\n 3.85 | 3.85 | 3.85 | 3.85\n No opportunities to fuse multiply-adds\n\nThe tool produces a Directed Acyclic Graph (DAG) for the body of the\ninner-most loop of every loop-nest it encounters. If a routine (or main\nprogram unit) contains no loops then a DAG is generated for the executable\npart of that routine. Each DAG is written to file in the dot language (e.g.\ntest_triple_product.gv in the above example). If you have dot installed\n(part of the graphviz package) then you can process these files to produce\nan image of the DAG, e.g.:\n\n cat triple_product_test.gv | dot -Tpng > triple.png\n\n## Code Metrics ##\n\n[![Coverage Status](https://coveralls.io/repos/github/arporter/habakkuk/badge.svg)](https://coveralls.io/github/arporter/habakkuk)\n\n[![Code Health](https://landscape.io/github/arporter/habakkuk/master/landscape.svg?style=flat)](https://landscape.io/github/arporter/habakkuk/master)", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://arporter.github.io/habakkuk/", "keywords": "", "license": "OSI Approved :: BSD 2-Clause License", "maintainer": "", "maintainer_email": "", "name": "Habakkuk", "package_url": "https://pypi.org/project/Habakkuk/", "platform": "", "project_url": "https://pypi.org/project/Habakkuk/", "project_urls": { "Homepage": "https://arporter.github.io/habakkuk/" }, "release_url": "https://pypi.org/project/Habakkuk/0.1.0/", "requires_dist": null, "requires_python": "", "summary": "Performance prediction for Fortran kernels.", "version": "0.1.0" }, "last_serial": 2829333, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "5525e5e6099f59cf8b732a17464fb840", "sha256": "54996304040f45065b4b17c5e7b389ff42fb72ea74ce7477a53c88b4428dedfd" }, "downloads": -1, "filename": "Habakkuk-0.1.0.tar.gz", "has_sig": false, "md5_digest": "5525e5e6099f59cf8b732a17464fb840", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48280, "upload_time": "2017-04-25T16:12:16", "url": "https://files.pythonhosted.org/packages/0d/0d/3cb3e22221a5253c7ef0d4d21effa40fccd32ae2e8622816011fefe18e30/Habakkuk-0.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5525e5e6099f59cf8b732a17464fb840", "sha256": "54996304040f45065b4b17c5e7b389ff42fb72ea74ce7477a53c88b4428dedfd" }, "downloads": -1, "filename": "Habakkuk-0.1.0.tar.gz", "has_sig": false, "md5_digest": "5525e5e6099f59cf8b732a17464fb840", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48280, "upload_time": "2017-04-25T16:12:16", "url": "https://files.pythonhosted.org/packages/0d/0d/3cb3e22221a5253c7ef0d4d21effa40fccd32ae2e8622816011fefe18e30/Habakkuk-0.1.0.tar.gz" } ] }