Giter Club home page Giter Club logo

libprism's Introduction

README

libPRISM: An Intelligent Adaption of Prefetch and SMT Levels

Description:

libPRISM is designed to tune several hardware knobs of a processor. In its current form, libPRISM optimize the SMT level and the data prefetcher hardware knobs on a POWER8 processor for OpenMP applications.

It works on top of OpenMP, but it can be used for more programming models. See /src/wrappers folders to see how implement a new wrapper for a different programming model.
There is no need to recompile any runtime or the operating system, libPRISM does library interposition in Linux with LD_PRELOAD variable (see Usage section for more information).
libPRISM is designed to be architectural independent. But, it is coded to set specific hardware knobs on the processor where it was tested. In case you need to change how a hardware knob is modified or add more hardware knobs, please see the file src/policies/Policy.cpp

For more information, please read our published paper on ICS'17 (libPRISM: an intelligent adaptation of prefetch and SMT levels).
libPRISM is under a BSD 3-Clause License. Please refer to the file LICENSE for more information.


Usage:

LD_PRELOAD="/path/to/libPRISM/wrapper/" ./application

In OpenMP codes, it is needed to set several environment variables for a better performance: export OMP_PLACES="threads" export OMP_PROC_BIND="spread" This variables might vary when running in a different processor than POWER8.

There are several environment variables to modify the behavior of libPRISM as writing a output file with the different regions libPRISM found, modify thresholds for the algorithm, etc.
For more information please build the documentation (this is done in the bootstrap script).


Contributing:

Feel free to contribute to this project.
Google C++ style guide is used for the whole project (https://google.github.io/styleguide/cppguide.html).
Script check_style.py will check all files against the guidelines for you.
Please, respect these guidelines if possible.


Compilation:

  • mkdir build_DIR
  • run bootstrap script: $ ./bootstrap build_DIR build_DIR will contain the different available versions of the library in build_DIR/install/*/lib and the documentation in build_DIR/doc/.

One can use the linux standard autotools sequence to customize the installation:

  • run configure: $ ./configure It is possible to check the available options with the -h flag. Flag --prefix=<INSTALL_DIR> can be useful.
  • make
  • make install
  • make check

Dependencies:

  • libpfm. Point to the path with LDFLAGS/CFLAGS
  • gcc. libPRISM relies on gcc. In the case you want to use another compiler, please, correct the OpenMP flags in the configure.ac. There are hooks for OpenMP from gcc.

Requirements:

  • Permissions to modify the data prefetcher file. In a POWER8 system these files are located in /sys/devices/system/cpu/cpuX/dscr, where X goes from 0 to the number of hardware threads available in the system.

Cleanup:

run cleanup script to remove everything that can be regenerated.


Contact

Feel free to contact me at: cortega at bsc.es


libprism's People

Contributors

criort avatar cristobal-ortega avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.