https://github.com/carv-ics-forth/scoop

A compiler and static analysis of task parallel C programs.

https://github.com/carv-ics-forth/scoop

Science Score: 23.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
  • .zenodo.json file
  • DOI references
    Found 1 DOI reference(s) in README
  • Academic publication links
    Links to: springer.com
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.1%) to scientific vocabulary
Last synced: 10 months ago · JSON representation

Repository

A compiler and static analysis of task parallel C programs.

Basic Info
  • Host: GitHub
  • Owner: CARV-ICS-FORTH
  • License: other
  • Language: C
  • Default Branch: master
  • Homepage:
  • Size: 13.4 MB
Statistics
  • Stars: 3
  • Watchers: 9
  • Forks: 4
  • Open Issues: 0
  • Releases: 0
Created over 12 years ago · Last pushed about 11 years ago

https://github.com/CARV-ICS-FORTH/scoop/blob/master/

# SCOOP v2.1.1

A compiler and static analysis of task parallel C programs.

## Citing

If SCOOP contributes to a project that leads to a scientific
publication, please acknowledge this work by citing the corresponding
paper
[Inference and Declaration of Independence in Task-Parallel Programs](http://link.springer.com/chapter/10.1007/978-3-642-45293-2_1)
(also available
[here](http://users.ics.forth.gr/~polyvios/appt2013a.pdf)).

## Annotation Syntax

    #pragma scoop start(list of variables)
    #pragma scoop finish
    #pragma scoop malloc
    #pragma scoop free
    #pragma scoop sync
    #pragma scoop barrier
    #pragma scoop wait all
    #pragma scoop wait on(list of variables)
    #pragma scoop task [in()]
                       [inout()]
                       [out()]
    
    Parameter notation:
    
      Non stride: [\[number of elements (for arrays)\]]
    
      Stride: \[Block Rows|Block Columns\]\[[Array Rows|]Array Columns\]
    
      Array Rows is optional and is totally ignored
    
      The parameter size/stride/els/elsz must be an expression, thus we
      don't allow function calls. Also there is no support for the
      conditional operator (? :)
    
    Example:
      #pragma scoop task in(a, b[4]) out(c[16])

## Setup

This section describes how to install SCOOP on your system.  We
suppose that you have checked out/cloned SCOOP under `/opt/scoop`
directory.  However the same instructions should apply for any
alternative path, simply replacing `/opt/scoop` with the desired
alternative path for the rest of this section.

###Dependencies

In order to build SCOOP you will need to install the following
packages:

* ocaml ≥ 3.11.2
* camlp4/ocaml-camlp4/ocaml-camlp4-devel
* Flex
* bison
* indent
* ncurses-devel
* emacs
* gperf


### Compile

To compile SCOOP you have to run `configure` and then `make`.

    ./configure && make

### Install

You can install SCOOP running

    sudo make install

this will create a copy of the scoop executable in
`/usr/local/bin`.

**NOTE**: You still have to keep the current directory to your system.

Alternatively you can append `/opt/scoop` to the `PATH`
variable, i.e,

    echo "export PATH=$PATH:/opt/scoop" >> $HOME/.bashrc

### Uninstall

You can uninstall SCOOP running

    sudo make uninstall

this will erase the copy of the scoop executable from
`/usr/local/bin`.

If you chose the alternative method of adding `/opt/scoop` to your
`PATH` variable, simply remove the added line from your `.bashrc`.

## Usage

    scoop --runtime= [options]  [file2 ...]

### Options

    --runtime                         SCOOP: Define the target runtime (myrmics | dummy)
    --cflags                          SCOOP: Define the flags you want to pass to gcc.
    --include-path                    SCOOP: Define the path containing the runtime header files.
    --debug-SCOOP                     SCOOP: Print debugging information.
    --trace                           SCOOP: Trace SCOOP.
    --out-name                        SCOOP: Specify the output files' prefix. e.g. (default: scoop_trans) will produce scoop_trans.c (and scoop_trans_func.c for cell)
    --pragma                          SCOOP: Specify the string constant following the pragma e.g. (default: runtime name) myrmics will recognise #pragma myrmics ... 
    --disable-sdam                    SCOOP: Disable the static dependence analysis module (SDAM)
    --myrmics-main-function           SCOOP: Specify the name of the main function for the myrmics runtime (default: main)

## Extending SCOOP

In order to add support for your runtime on the SCOOP compiler you
have to take the following steps.

1. copy `src/scoop_dummy.ml` and `src/scoop_dummy.mli` to
   `src/scoop_myruntime.ml` and `src/scoop_myruntime.mli` respectively.
1. append `scoop_myruntime` to the `SCOOP_MODULES` variable in
   `Makefile`.
1. Perform any required changes to `src/scoop_myruntime.ml`
1. Append `Scoop_myruntime.options` to `fd_extraopt` in `src/scoop.ml`
1. Add the following lines to `match !arch with` in `src/scoop.ml` `|
   "myruntime" ->` ` new Scoop_myruntime.codegen callgraph !gen_file
   !pragma_str !includePath`

## Common Errors/Limitations/Known Bugs

* Adding a semicolon at the end of `#pragma`s will make SCOOP fail,
  i.e., `#pragma scoop sync;`
* Putting `#pragma scoop barrier` at the end of a block will make
  SCOOP fail (add a semicolon right below the `#pragma` to fix it).
* **Fatal error: exception Invalid_argument("Unknown")** you probably
  have wrong argument at a call tagged with `#pragma scoop task`
* Using DEFINES or MACROS in pragmas (preprocessor doesn't process
  them)
* Putting `#pragma` directly above a declaration of a variable
  (pragmas are only supported above statements)
* Using directly the runtime API instead of the corresponding
  `#pragma` may result in SDAM not working properly.
* **Error: "segment___0" not found in the #pragma scoop task** usually
  means that the tool is renaming a variable due to previous
  declaration try renaming it manually (e.g. segment2) (This should be
  fixed by now)

Owner

  • Name: Computer Architecture and VLSI Systems (CARV) Laboratory
  • Login: CARV-ICS-FORTH
  • Kind: organization
  • Location: Heraklion, Greece

GitHub Events

Total
Last Year

Issues and Pull Requests

Last synced: 12 months ago

All Time
  • Total issues: 0
  • Total pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Total issue authors: 0
  • Total pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels