Repository files navigation

OP2

OP2 is a high-level embedded domain specific language for writing unstructured mesh algorithms with automatic parallelisation on multi-core and many-core architectures. The API is embedded in both C/C++ and Fortran.

CIDocumentation Status

This repository contains the implementation of the code translation tools and run-time support libraries, and is structured as follows:

  • op2: The C/C++ OP2 run-time libraries and Fortran bindings.
  • translator: The Python code translators for both C/C++ and Fortran.
  • apps: Example applications that demonstrate use of the API.
  • makefiles: Shared infrastructure of the GNU Make based build-system.
  • doc: LaTeX documentation source.

Documentation

Documentation is available on Read the Docs.

Quick-start

Firstly, OP2 has a varienty of toolchain dependencies that you will likely be able to obtain from your package manager or programming environment:

  • GNU Make > 4.2
  • A C/C++17 compatible compiler: Currently supported compilers are GCC, Clang, Cray, Intel, IBM XL and NVHPC.
  • (Optional) A Fortran compiler: Currently supported compilers are GFortran, Cray, Intel, IBM XL and NVHPC.
  • (Optional) An MPI implementation: Any implementation with the mpicc, mpicxx, and mpif90 wrappers is supported.
  • (Optional) NVIDIA CUDA > 11.8

In addition there are a few optional library dependencies that you will likely have to build manually, although some package managers or programming environments may be able to provide appropriate versions:

  • (Optional) (PT-)Scotch: Used for MPI mesh partitioning. Build both the sequential Scotch and parallel PT-Scotch.
  • (Optional) ParMETIS: Used for MPI mesh partitioning. Build with 32-bit indicies (-DIDXSIZE32) and without-DSCOTCH_PTHREAD.
  • (Optional) HDF5: Used for HDF5 I/O. You may build with and without --enable-parallel (depending on if you need MPI), and then specify both builds via the environment variables listed below.

Finally, to build OP2 and any of the apps:

  1. Set either OP2_COMPILER={gnu, cray, intel, xl, nvhpc}, or OP2_{C, C_CUDA, F}_COMPILER={...} depending on your compiler setup. Alternatively if there is a profile specific to the cluster you are building on in makefiles/profiles you may use e.g. OP2_PROFILE=cirrus-intel.
  2. (Optional) Set PTSCOTCH_INSTALL_PATH, PARMETIS_INSTALL_PATH, and HDF5_{SEQ, PAR}_INSTALL_PATH to the locations of the respective dependency builds containing include and lib folders. Certain build environments such as Spack, Nix and certain environment module implementations may already provided the required library directories through the environent or a compiler wrapper; if this is the case you do not need to set these environment variables.
  3. (Optional) Set CUDA_INSTALL_PATH to the location of the installed CUDA toolkit.
  4. (Optional) Set NV_ARCH to a comma separated list of NVIDIA GPU architectures (Fermi, Kepler, ..., Ampere).
  5. Run make config in the op2 directory and verify that the compilers, libraries and compilation flags are as you intend.
  6. Run make -j$(nproc) in the op2 directory to build the run-time libraries.
  7. Run make -j$(nproc) in any of the app directories to build the respective apps.

Citing

To cite OP2, please reference the following paper:

G. R. Mudalige, M. B. Giles, I. Reguly, C. Bertolli and P. H. J. Kelly, "OP2: An active library framework for solving unstructured mesh-based applications on multi-core and many-core architectures," 2012 Innovative Parallel Computing (InPar), 2012, pp. 1-12, doi: 10.1109/InPar.2012.6339594.

@INPROCEEDINGS{6339594,
author={Mudalige, G.R. and Giles, M.B. and Reguly, I. and Bertolli, C. and Kelly, P.H.J},
booktitle={2012 Innovative Parallel Computing (InPar)},
title={OP2: An active library framework for solving unstructured mesh-based applications on multi-core and many-core architectures},
year={2012},
volume={},
number={},
pages={1-12},
doi={10.1109/InPar.2012.6339594}}

About

OP2: open-source framework for the execution of unstructured grid applications on clusters of GPUs or multi-core CPUs

Resources

Stars

109 stars

Watchers

27 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

OP2

OP2 is a high-level embedded domain specific language for writing unstructured mesh algorithms with automatic parallelisation on multi-core and many-core architectures. The API is embedded in both C/C++ and Fortran.

CIDocumentation Status

This repository contains the implementation of the code translation tools and run-time support libraries, and is structured as follows:

  • op2: The C/C++ OP2 run-time libraries and Fortran bindings.
  • translator: The Python code translators for both C/C++ and Fortran.
  • apps: Example applications that demonstrate use of the API.
  • makefiles: Shared infrastructure of the GNU Make based build-system.
  • doc: LaTeX documentation source.

Documentation

Documentation is available on Read the Docs.

Quick-start

Firstly, OP2 has a varienty of toolchain dependencies that you will likely be able to obtain from your package manager or programming environment:

  • GNU Make > 4.2
  • A C/C++17 compatible compiler: Currently supported compilers are GCC, Clang, Cray, Intel, IBM XL and NVHPC.
  • (Optional) A Fortran compiler: Currently supported compilers are GFortran, Cray, Intel, IBM XL and NVHPC.
  • (Optional) An MPI implementation: Any implementation with the mpicc, mpicxx, and mpif90 wrappers is supported.
  • (Optional) NVIDIA CUDA > 11.8

In addition there are a few optional library dependencies that you will likely have to build manually, although some package managers or programming environments may be able to provide appropriate versions:

  • (Optional) (PT-)Scotch: Used for MPI mesh partitioning. Build both the sequential Scotch and parallel PT-Scotch.
  • (Optional) ParMETIS: Used for MPI mesh partitioning. Build with 32-bit indicies (-DIDXSIZE32) and without-DSCOTCH_PTHREAD.
  • (Optional) HDF5: Used for HDF5 I/O. You may build with and without --enable-parallel (depending on if you need MPI), and then specify both builds via the environment variables listed below.

Finally, to build OP2 and any of the apps:

  1. Set either OP2_COMPILER={gnu, cray, intel, xl, nvhpc}, or OP2_{C, C_CUDA, F}_COMPILER={...} depending on your compiler setup. Alternatively if there is a profile specific to the cluster you are building on in makefiles/profiles you may use e.g. OP2_PROFILE=cirrus-intel.
  2. (Optional) Set PTSCOTCH_INSTALL_PATH, PARMETIS_INSTALL_PATH, and HDF5_{SEQ, PAR}_INSTALL_PATH to the locations of the respective dependency builds containing include and lib folders. Certain build environments such as Spack, Nix and certain environment module implementations may already provided the required library directories through the environent or a compiler wrapper; if this is the case you do not need to set these environment variables.
  3. (Optional) Set CUDA_INSTALL_PATH to the location of the installed CUDA toolkit.
  4. (Optional) Set NV_ARCH to a comma separated list of NVIDIA GPU architectures (Fermi, Kepler, ..., Ampere).
  5. Run make config in the op2 directory and verify that the compilers, libraries and compilation flags are as you intend.
  6. Run make -j$(nproc) in the op2 directory to build the run-time libraries.
  7. Run make -j$(nproc) in any of the app directories to build the respective apps.

Citing

To cite OP2, please reference the following paper:

G. R. Mudalige, M. B. Giles, I. Reguly, C. Bertolli and P. H. J. Kelly, "OP2: An active library framework for solving unstructured mesh-based applications on multi-core and many-core architectures," 2012 Innovative Parallel Computing (InPar), 2012, pp. 1-12, doi: 10.1109/InPar.2012.6339594.

@INPROCEEDINGS{6339594,
author={Mudalige, G.R. and Giles, M.B. and Reguly, I. and Bertolli, C. and Kelly, P.H.J},
booktitle={2012 Innovative Parallel Computing (InPar)},
title={OP2: An active library framework for solving unstructured mesh-based applications on multi-core and many-core architectures},
year={2012},
volume={},
number={},
pages={1-12},
doi={10.1109/InPar.2012.6339594}}

About

OP2: open-source framework for the execution of unstructured grid applications on clusters of GPUs or multi-core CPUs

Resources

Stars

109 stars

Watchers

27 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

OP2

OP2 is a high-level embedded domain specific language for writing unstructured mesh algorithms with automatic parallelisation on multi-core and many-core architectures. The API is embedded in both C/C++ and Fortran.

CIDocumentation Status

This repository contains the implementation of the code translation tools and run-time support libraries, and is structured as follows:

  • op2: The C/C++ OP2 run-time libraries and Fortran bindings.
  • translator: The Python code translators for both C/C++ and Fortran.
  • apps: Example applications that demonstrate use of the API.
  • makefiles: Shared infrastructure of the GNU Make based build-system.
  • doc: LaTeX documentation source.

Documentation

Documentation is available on Read the Docs.

Quick-start

Firstly, OP2 has a varienty of toolchain dependencies that you will likely be able to obtain from your package manager or programming environment:

  • GNU Make > 4.2
  • A C/C++17 compatible compiler: Currently supported compilers are GCC, Clang, Cray, Intel, IBM XL and NVHPC.
  • (Optional) A Fortran compiler: Currently supported compilers are GFortran, Cray, Intel, IBM XL and NVHPC.
  • (Optional) An MPI implementation: Any implementation with the mpicc, mpicxx, and mpif90 wrappers is supported.
  • (Optional) NVIDIA CUDA > 11.8

In addition there are a few optional library dependencies that you will likely have to build manually, although some package managers or programming environments may be able to provide appropriate versions:

  • (Optional) (PT-)Scotch: Used for MPI mesh partitioning. Build both the sequential Scotch and parallel PT-Scotch.
  • (Optional) ParMETIS: Used for MPI mesh partitioning. Build with 32-bit indicies (-DIDXSIZE32) and without-DSCOTCH_PTHREAD.
  • (Optional) HDF5: Used for HDF5 I/O. You may build with and without --enable-parallel (depending on if you need MPI), and then specify both builds via the environment variables listed below.

Finally, to build OP2 and any of the apps:

  1. Set either OP2_COMPILER={gnu, cray, intel, xl, nvhpc}, or OP2_{C, C_CUDA, F}_COMPILER={...} depending on your compiler setup. Alternatively if there is a profile specific to the cluster you are building on in makefiles/profiles you may use e.g. OP2_PROFILE=cirrus-intel.
  2. (Optional) Set PTSCOTCH_INSTALL_PATH, PARMETIS_INSTALL_PATH, and HDF5_{SEQ, PAR}_INSTALL_PATH to the locations of the respective dependency builds containing include and lib folders. Certain build environments such as Spack, Nix and certain environment module implementations may already provided the required library directories through the environent or a compiler wrapper; if this is the case you do not need to set these environment variables.
  3. (Optional) Set CUDA_INSTALL_PATH to the location of the installed CUDA toolkit.
  4. (Optional) Set NV_ARCH to a comma separated list of NVIDIA GPU architectures (Fermi, Kepler, ..., Ampere).
  5. Run make config in the op2 directory and verify that the compilers, libraries and compilation flags are as you intend.
  6. Run make -j$(nproc) in the op2 directory to build the run-time libraries.
  7. Run make -j$(nproc) in any of the app directories to build the respective apps.

Citing

To cite OP2, please reference the following paper:

G. R. Mudalige, M. B. Giles, I. Reguly, C. Bertolli and P. H. J. Kelly, "OP2: An active library framework for solving unstructured mesh-based applications on multi-core and many-core architectures," 2012 Innovative Parallel Computing (InPar), 2012, pp. 1-12, doi: 10.1109/InPar.2012.6339594.

@INPROCEEDINGS{6339594,
author={Mudalige, G.R. and Giles, M.B. and Reguly, I. and Bertolli, C. and Kelly, P.H.J},
booktitle={2012 Innovative Parallel Computing (InPar)},
title={OP2: An active library framework for solving unstructured mesh-based applications on multi-core and many-core architectures},
year={2012},
volume={},
number={},
pages={1-12},
doi={10.1109/InPar.2012.6339594}}

About

OP2: open-source framework for the execution of unstructured grid applications on clusters of GPUs or multi-core CPUs

Resources

Stars

109 stars

Watchers

27 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

OP2

OP2 is a high-level embedded domain specific language for writing unstructured mesh algorithms with automatic parallelisation on multi-core and many-core architectures. The API is embedded in both C/C++ and Fortran.

CIDocumentation Status

This repository contains the implementation of the code translation tools and run-time support libraries, and is structured as follows:

  • op2: The C/C++ OP2 run-time libraries and Fortran bindings.
  • translator: The Python code translators for both C/C++ and Fortran.
  • apps: Example applications that demonstrate use of the API.
  • makefiles: Shared infrastructure of the GNU Make based build-system.
  • doc: LaTeX documentation source.

Documentation

Documentation is available on Read the Docs.

Quick-start

Firstly, OP2 has a varienty of toolchain dependencies that you will likely be able to obtain from your package manager or programming environment:

  • GNU Make > 4.2
  • A C/C++17 compatible compiler: Currently supported compilers are GCC, Clang, Cray, Intel, IBM XL and NVHPC.
  • (Optional) A Fortran compiler: Currently supported compilers are GFortran, Cray, Intel, IBM XL and NVHPC.
  • (Optional) An MPI implementation: Any implementation with the mpicc, mpicxx, and mpif90 wrappers is supported.
  • (Optional) NVIDIA CUDA > 11.8

In addition there are a few optional library dependencies that you will likely have to build manually, although some package managers or programming environments may be able to provide appropriate versions:

  • (Optional) (PT-)Scotch: Used for MPI mesh partitioning. Build both the sequential Scotch and parallel PT-Scotch.
  • (Optional) ParMETIS: Used for MPI mesh partitioning. Build with 32-bit indicies (-DIDXSIZE32) and without-DSCOTCH_PTHREAD.
  • (Optional) HDF5: Used for HDF5 I/O. You may build with and without --enable-parallel (depending on if you need MPI), and then specify both builds via the environment variables listed below.

Finally, to build OP2 and any of the apps:

  1. Set either OP2_COMPILER={gnu, cray, intel, xl, nvhpc}, or OP2_{C, C_CUDA, F}_COMPILER={...} depending on your compiler setup. Alternatively if there is a profile specific to the cluster you are building on in makefiles/profiles you may use e.g. OP2_PROFILE=cirrus-intel.
  2. (Optional) Set PTSCOTCH_INSTALL_PATH, PARMETIS_INSTALL_PATH, and HDF5_{SEQ, PAR}_INSTALL_PATH to the locations of the respective dependency builds containing include and lib folders. Certain build environments such as Spack, Nix and certain environment module implementations may already provided the required library directories through the environent or a compiler wrapper; if this is the case you do not need to set these environment variables.
  3. (Optional) Set CUDA_INSTALL_PATH to the location of the installed CUDA toolkit.
  4. (Optional) Set NV_ARCH to a comma separated list of NVIDIA GPU architectures (Fermi, Kepler, ..., Ampere).
  5. Run make config in the op2 directory and verify that the compilers, libraries and compilation flags are as you intend.
  6. Run make -j$(nproc) in the op2 directory to build the run-time libraries.
  7. Run make -j$(nproc) in any of the app directories to build the respective apps.

Citing

To cite OP2, please reference the following paper:

G. R. Mudalige, M. B. Giles, I. Reguly, C. Bertolli and P. H. J. Kelly, "OP2: An active library framework for solving unstructured mesh-based applications on multi-core and many-core architectures," 2012 Innovative Parallel Computing (InPar), 2012, pp. 1-12, doi: 10.1109/InPar.2012.6339594.

@INPROCEEDINGS{6339594,
author={Mudalige, G.R. and Giles, M.B. and Reguly, I. and Bertolli, C. and Kelly, P.H.J},
booktitle={2012 Innovative Parallel Computing (InPar)},
title={OP2: An active library framework for solving unstructured mesh-based applications on multi-core and many-core architectures},
year={2012},
volume={},
number={},
pages={1-12},
doi={10.1109/InPar.2012.6339594}}

About

OP2: open-source framework for the execution of unstructured grid applications on clusters of GPUs or multi-core CPUs

Resources

Stars

109 stars

Watchers

27 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

OP2

OP2 is a high-level embedded domain specific language for writing unstructured mesh algorithms with automatic parallelisation on multi-core and many-core architectures. The API is embedded in both C/C++ and Fortran.

CIDocumentation Status

This repository contains the implementation of the code translation tools and run-time support libraries, and is structured as follows:

  • op2: The C/C++ OP2 run-time libraries and Fortran bindings.
  • translator: The Python code translators for both C/C++ and Fortran.
  • apps: Example applications that demonstrate use of the API.
  • makefiles: Shared infrastructure of the GNU Make based build-system.
  • doc: LaTeX documentation source.

Documentation

Documentation is available on Read the Docs.

Quick-start

Firstly, OP2 has a varienty of toolchain dependencies that you will likely be able to obtain from your package manager or programming environment:

  • GNU Make > 4.2
  • A C/C++17 compatible compiler: Currently supported compilers are GCC, Clang, Cray, Intel, IBM XL and NVHPC.
  • (Optional) A Fortran compiler: Currently supported compilers are GFortran, Cray, Intel, IBM XL and NVHPC.
  • (Optional) An MPI implementation: Any implementation with the mpicc, mpicxx, and mpif90 wrappers is supported.
  • (Optional) NVIDIA CUDA > 11.8

In addition there are a few optional library dependencies that you will likely have to build manually, although some package managers or programming environments may be able to provide appropriate versions:

  • (Optional) (PT-)Scotch: Used for MPI mesh partitioning. Build both the sequential Scotch and parallel PT-Scotch.
  • (Optional) ParMETIS: Used for MPI mesh partitioning. Build with 32-bit indicies (-DIDXSIZE32) and without-DSCOTCH_PTHREAD.
  • (Optional) HDF5: Used for HDF5 I/O. You may build with and without --enable-parallel (depending on if you need MPI), and then specify both builds via the environment variables listed below.

Finally, to build OP2 and any of the apps:

  1. Set either OP2_COMPILER={gnu, cray, intel, xl, nvhpc}, or OP2_{C, C_CUDA, F}_COMPILER={...} depending on your compiler setup. Alternatively if there is a profile specific to the cluster you are building on in makefiles/profiles you may use e.g. OP2_PROFILE=cirrus-intel.
  2. (Optional) Set PTSCOTCH_INSTALL_PATH, PARMETIS_INSTALL_PATH, and HDF5_{SEQ, PAR}_INSTALL_PATH to the locations of the respective dependency builds containing include and lib folders. Certain build environments such as Spack, Nix and certain environment module implementations may already provided the required library directories through the environent or a compiler wrapper; if this is the case you do not need to set these environment variables.
  3. (Optional) Set CUDA_INSTALL_PATH to the location of the installed CUDA toolkit.
  4. (Optional) Set NV_ARCH to a comma separated list of NVIDIA GPU architectures (Fermi, Kepler, ..., Ampere).
  5. Run make config in the op2 directory and verify that the compilers, libraries and compilation flags are as you intend.
  6. Run make -j$(nproc) in the op2 directory to build the run-time libraries.
  7. Run make -j$(nproc) in any of the app directories to build the respective apps.

Citing

To cite OP2, please reference the following paper:

G. R. Mudalige, M. B. Giles, I. Reguly, C. Bertolli and P. H. J. Kelly, "OP2: An active library framework for solving unstructured mesh-based applications on multi-core and many-core architectures," 2012 Innovative Parallel Computing (InPar), 2012, pp. 1-12, doi: 10.1109/InPar.2012.6339594.

@INPROCEEDINGS{6339594,
author={Mudalige, G.R. and Giles, M.B. and Reguly, I. and Bertolli, C. and Kelly, P.H.J},
booktitle={2012 Innovative Parallel Computing (InPar)},
title={OP2: An active library framework for solving unstructured mesh-based applications on multi-core and many-core architectures},
year={2012},
volume={},
number={},
pages={1-12},
doi={10.1109/InPar.2012.6339594}}

About

OP2: open-source framework for the execution of unstructured grid applications on clusters of GPUs or multi-core CPUs

Resources

Stars

109 stars

Watchers

27 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

OP2

OP2 is a high-level embedded domain specific language for writing unstructured mesh algorithms with automatic parallelisation on multi-core and many-core architectures. The API is embedded in both C/C++ and Fortran.

CIDocumentation Status

This repository contains the implementation of the code translation tools and run-time support libraries, and is structured as follows:

  • op2: The C/C++ OP2 run-time libraries and Fortran bindings.
  • translator: The Python code translators for both C/C++ and Fortran.
  • apps: Example applications that demonstrate use of the API.
  • makefiles: Shared infrastructure of the GNU Make based build-system.
  • doc: LaTeX documentation source.

Documentation

Documentation is available on Read the Docs.

Quick-start

Firstly, OP2 has a varienty of toolchain dependencies that you will likely be able to obtain from your package manager or programming environment:

  • GNU Make > 4.2
  • A C/C++17 compatible compiler: Currently supported compilers are GCC, Clang, Cray, Intel, IBM XL and NVHPC.
  • (Optional) A Fortran compiler: Currently supported compilers are GFortran, Cray, Intel, IBM XL and NVHPC.
  • (Optional) An MPI implementation: Any implementation with the mpicc, mpicxx, and mpif90 wrappers is supported.
  • (Optional) NVIDIA CUDA > 11.8

In addition there are a few optional library dependencies that you will likely have to build manually, although some package managers or programming environments may be able to provide appropriate versions:

  • (Optional) (PT-)Scotch: Used for MPI mesh partitioning. Build both the sequential Scotch and parallel PT-Scotch.
  • (Optional) ParMETIS: Used for MPI mesh partitioning. Build with 32-bit indicies (-DIDXSIZE32) and without-DSCOTCH_PTHREAD.
  • (Optional) HDF5: Used for HDF5 I/O. You may build with and without --enable-parallel (depending on if you need MPI), and then specify both builds via the environment variables listed below.

Finally, to build OP2 and any of the apps:

  1. Set either OP2_COMPILER={gnu, cray, intel, xl, nvhpc}, or OP2_{C, C_CUDA, F}_COMPILER={...} depending on your compiler setup. Alternatively if there is a profile specific to the cluster you are building on in makefiles/profiles you may use e.g. OP2_PROFILE=cirrus-intel.
  2. (Optional) Set PTSCOTCH_INSTALL_PATH, PARMETIS_INSTALL_PATH, and HDF5_{SEQ, PAR}_INSTALL_PATH to the locations of the respective dependency builds containing include and lib folders. Certain build environments such as Spack, Nix and certain environment module implementations may already provided the required library directories through the environent or a compiler wrapper; if this is the case you do not need to set these environment variables.
  3. (Optional) Set CUDA_INSTALL_PATH to the location of the installed CUDA toolkit.
  4. (Optional) Set NV_ARCH to a comma separated list of NVIDIA GPU architectures (Fermi, Kepler, ..., Ampere).
  5. Run make config in the op2 directory and verify that the compilers, libraries and compilation flags are as you intend.
  6. Run make -j$(nproc) in the op2 directory to build the run-time libraries.
  7. Run make -j$(nproc) in any of the app directories to build the respective apps.

Citing

To cite OP2, please reference the following paper:

G. R. Mudalige, M. B. Giles, I. Reguly, C. Bertolli and P. H. J. Kelly, "OP2: An active library framework for solving unstructured mesh-based applications on multi-core and many-core architectures," 2012 Innovative Parallel Computing (InPar), 2012, pp. 1-12, doi: 10.1109/InPar.2012.6339594.

@INPROCEEDINGS{6339594,
author={Mudalige, G.R. and Giles, M.B. and Reguly, I. and Bertolli, C. and Kelly, P.H.J},
booktitle={2012 Innovative Parallel Computing (InPar)},
title={OP2: An active library framework for solving unstructured mesh-based applications on multi-core and many-core architectures},
year={2012},
volume={},
number={},
pages={1-12},
doi={10.1109/InPar.2012.6339594}}

About

OP2: open-source framework for the execution of unstructured grid applications on clusters of GPUs or multi-core CPUs

Resources

Stars

109 stars

Watchers

27 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

OP2

OP2 is a high-level embedded domain specific language for writing unstructured mesh algorithms with automatic parallelisation on multi-core and many-core architectures. The API is embedded in both C/C++ and Fortran.

CIDocumentation Status

This repository contains the implementation of the code translation tools and run-time support libraries, and is structured as follows:

  • op2: The C/C++ OP2 run-time libraries and Fortran bindings.
  • translator: The Python code translators for both C/C++ and Fortran.
  • apps: Example applications that demonstrate use of the API.
  • makefiles: Shared infrastructure of the GNU Make based build-system.
  • doc: LaTeX documentation source.

Documentation

Documentation is available on Read the Docs.

Quick-start

Firstly, OP2 has a varienty of toolchain dependencies that you will likely be able to obtain from your package manager or programming environment:

  • GNU Make > 4.2
  • A C/C++17 compatible compiler: Currently supported compilers are GCC, Clang, Cray, Intel, IBM XL and NVHPC.
  • (Optional) A Fortran compiler: Currently supported compilers are GFortran, Cray, Intel, IBM XL and NVHPC.
  • (Optional) An MPI implementation: Any implementation with the mpicc, mpicxx, and mpif90 wrappers is supported.
  • (Optional) NVIDIA CUDA > 11.8

In addition there are a few optional library dependencies that you will likely have to build manually, although some package managers or programming environments may be able to provide appropriate versions:

  • (Optional) (PT-)Scotch: Used for MPI mesh partitioning. Build both the sequential Scotch and parallel PT-Scotch.
  • (Optional) ParMETIS: Used for MPI mesh partitioning. Build with 32-bit indicies (-DIDXSIZE32) and without-DSCOTCH_PTHREAD.
  • (Optional) HDF5: Used for HDF5 I/O. You may build with and without --enable-parallel (depending on if you need MPI), and then specify both builds via the environment variables listed below.

Finally, to build OP2 and any of the apps:

  1. Set either OP2_COMPILER={gnu, cray, intel, xl, nvhpc}, or OP2_{C, C_CUDA, F}_COMPILER={...} depending on your compiler setup. Alternatively if there is a profile specific to the cluster you are building on in makefiles/profiles you may use e.g. OP2_PROFILE=cirrus-intel.
  2. (Optional) Set PTSCOTCH_INSTALL_PATH, PARMETIS_INSTALL_PATH, and HDF5_{SEQ, PAR}_INSTALL_PATH to the locations of the respective dependency builds containing include and lib folders. Certain build environments such as Spack, Nix and certain environment module implementations may already provided the required library directories through the environent or a compiler wrapper; if this is the case you do not need to set these environment variables.
  3. (Optional) Set CUDA_INSTALL_PATH to the location of the installed CUDA toolkit.
  4. (Optional) Set NV_ARCH to a comma separated list of NVIDIA GPU architectures (Fermi, Kepler, ..., Ampere).
  5. Run make config in the op2 directory and verify that the compilers, libraries and compilation flags are as you intend.
  6. Run make -j$(nproc) in the op2 directory to build the run-time libraries.
  7. Run make -j$(nproc) in any of the app directories to build the respective apps.

Citing

To cite OP2, please reference the following paper:

G. R. Mudalige, M. B. Giles, I. Reguly, C. Bertolli and P. H. J. Kelly, "OP2: An active library framework for solving unstructured mesh-based applications on multi-core and many-core architectures," 2012 Innovative Parallel Computing (InPar), 2012, pp. 1-12, doi: 10.1109/InPar.2012.6339594.

@INPROCEEDINGS{6339594,
author={Mudalige, G.R. and Giles, M.B. and Reguly, I. and Bertolli, C. and Kelly, P.H.J},
booktitle={2012 Innovative Parallel Computing (InPar)},
title={OP2: An active library framework for solving unstructured mesh-based applications on multi-core and many-core architectures},
year={2012},
volume={},
number={},
pages={1-12},
doi={10.1109/InPar.2012.6339594}}

About

OP2: open-source framework for the execution of unstructured grid applications on clusters of GPUs or multi-core CPUs

Resources

Stars

109 stars

Watchers

27 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

OP2

OP2 is a high-level embedded domain specific language for writing unstructured mesh algorithms with automatic parallelisation on multi-core and many-core architectures. The API is embedded in both C/C++ and Fortran.

CIDocumentation Status

This repository contains the implementation of the code translation tools and run-time support libraries, and is structured as follows:

  • op2: The C/C++ OP2 run-time libraries and Fortran bindings.
  • translator: The Python code translators for both C/C++ and Fortran.
  • apps: Example applications that demonstrate use of the API.
  • makefiles: Shared infrastructure of the GNU Make based build-system.
  • doc: LaTeX documentation source.

Documentation

Documentation is available on Read the Docs.

Quick-start

Firstly, OP2 has a varienty of toolchain dependencies that you will likely be able to obtain from your package manager or programming environment:

  • GNU Make > 4.2
  • A C/C++17 compatible compiler: Currently supported compilers are GCC, Clang, Cray, Intel, IBM XL and NVHPC.
  • (Optional) A Fortran compiler: Currently supported compilers are GFortran, Cray, Intel, IBM XL and NVHPC.
  • (Optional) An MPI implementation: Any implementation with the mpicc, mpicxx, and mpif90 wrappers is supported.
  • (Optional) NVIDIA CUDA > 11.8

In addition there are a few optional library dependencies that you will likely have to build manually, although some package managers or programming environments may be able to provide appropriate versions:

  • (Optional) (PT-)Scotch: Used for MPI mesh partitioning. Build both the sequential Scotch and parallel PT-Scotch.
  • (Optional) ParMETIS: Used for MPI mesh partitioning. Build with 32-bit indicies (-DIDXSIZE32) and without-DSCOTCH_PTHREAD.
  • (Optional) HDF5: Used for HDF5 I/O. You may build with and without --enable-parallel (depending on if you need MPI), and then specify both builds via the environment variables listed below.

Finally, to build OP2 and any of the apps:

  1. Set either OP2_COMPILER={gnu, cray, intel, xl, nvhpc}, or OP2_{C, C_CUDA, F}_COMPILER={...} depending on your compiler setup. Alternatively if there is a profile specific to the cluster you are building on in makefiles/profiles you may use e.g. OP2_PROFILE=cirrus-intel.
  2. (Optional) Set PTSCOTCH_INSTALL_PATH, PARMETIS_INSTALL_PATH, and HDF5_{SEQ, PAR}_INSTALL_PATH to the locations of the respective dependency builds containing include and lib folders. Certain build environments such as Spack, Nix and certain environment module implementations may already provided the required library directories through the environent or a compiler wrapper; if this is the case you do not need to set these environment variables.
  3. (Optional) Set CUDA_INSTALL_PATH to the location of the installed CUDA toolkit.
  4. (Optional) Set NV_ARCH to a comma separated list of NVIDIA GPU architectures (Fermi, Kepler, ..., Ampere).
  5. Run make config in the op2 directory and verify that the compilers, libraries and compilation flags are as you intend.
  6. Run make -j$(nproc) in the op2 directory to build the run-time libraries.
  7. Run make -j$(nproc) in any of the app directories to build the respective apps.

Citing

To cite OP2, please reference the following paper:

G. R. Mudalige, M. B. Giles, I. Reguly, C. Bertolli and P. H. J. Kelly, "OP2: An active library framework for solving unstructured mesh-based applications on multi-core and many-core architectures," 2012 Innovative Parallel Computing (InPar), 2012, pp. 1-12, doi: 10.1109/InPar.2012.6339594.

@INPROCEEDINGS{6339594,
author={Mudalige, G.R. and Giles, M.B. and Reguly, I. and Bertolli, C. and Kelly, P.H.J},
booktitle={2012 Innovative Parallel Computing (InPar)},
title={OP2: An active library framework for solving unstructured mesh-based applications on multi-core and many-core architectures},
year={2012},
volume={},
number={},
pages={1-12},
doi={10.1109/InPar.2012.6339594}}

About

OP2: open-source framework for the execution of unstructured grid applications on clusters of GPUs or multi-core CPUs

Resources

Stars

109 stars

Watchers

27 watching

Forks

Releases

Packages

Used by

Contributors

Languages