Repository files navigation

OPS

OPS (Oxford Parallel library for Structured mesh solvers) is a high-level embedded domain specific language for writing multi-block structured mesh algorithms, and the corresponding software library and code translation tools to enable automatic parallelisation on multi-core and many-core architectures. The OPS API is embedded in C/C++ and Fortran.

Build StatusDocumentation Status

This repository contains the implementation of the back-end library and the code-generator, and is structured as follows:

  • ops: Implementation of the user and run-time OPS C/C++ APIs
  • apps: Application examples in C. These are examples of user application code and also include the target parallel code generated by the OPS code generator.
  • ops_translator: Python/Clang/Fparser/jinja2 based OPS code generator for C/C++/Fortran API (New code generation engine). Note: Please refer to the instructions provided on Read the Docs. for details on Python dependencies required to utilize this code generation.
  • ops_translator_legacy: Python OPS code generator for C/C++/Fortran API (Old code generation engine)
  • scripts : example scripts for setting environment variables and testing applications
  • cmake : cmake installation files
  • makefiles : makefile based installation files
  • doc: Documentation

Documentation

OPS documentation can be viewed on Read the Docs.

Citing

To cite OPS, please reference the following paper:

I. Z. Reguly, G. R. Mudalige and M. B. Giles, Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS, in IEEE Transactions on Parallel and Distributed Systems, vol. 29, no. 4, pp. 873-886, 1 April 2018, doi: 10.1109/TPDS.2017.2778161.

@ARTICLE{Reguly_et_al_2018,
author={Reguly, István Z. and Mudalige, Gihan R. and Giles, Michael B.},
journal={IEEE Transactions on Parallel and Distributed Systems}, title={Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS}, year={2018},
volume={29},
number={4},
pages={873-886},
doi={10.1109/TPDS.2017.2778161}}

Support and Contact

The preferred method of reporting bugs and issues with OPS is to submit an issue via the repository’s issue tracker. Users can also email the authors directly by contacting the OP-DSL team.

Contributing

To contribute to OPS please use the following steps :

  1. Clone this repository (on your local system)
  2. Create a new branch in your cloned repository
  3. Make changes / contributions in your new branch
  4. Submit your changes by creating a Pull Request to the develop branch of the OPS repository

The contributions in the develop branch will be merged into the master branch as we create a new release.

License

OPS is released as an open-source project under the BSD 3-Clause License. See the file called LICENSE for more information.

About

OPS is an API with associated libraries and preprocessors to generate parallel executables for applications on mulit-block structured meshes.

Resources

Stars

77 stars

Watchers

17 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

OPS

OPS (Oxford Parallel library for Structured mesh solvers) is a high-level embedded domain specific language for writing multi-block structured mesh algorithms, and the corresponding software library and code translation tools to enable automatic parallelisation on multi-core and many-core architectures. The OPS API is embedded in C/C++ and Fortran.

Build StatusDocumentation Status

This repository contains the implementation of the back-end library and the code-generator, and is structured as follows:

  • ops: Implementation of the user and run-time OPS C/C++ APIs
  • apps: Application examples in C. These are examples of user application code and also include the target parallel code generated by the OPS code generator.
  • ops_translator: Python/Clang/Fparser/jinja2 based OPS code generator for C/C++/Fortran API (New code generation engine). Note: Please refer to the instructions provided on Read the Docs. for details on Python dependencies required to utilize this code generation.
  • ops_translator_legacy: Python OPS code generator for C/C++/Fortran API (Old code generation engine)
  • scripts : example scripts for setting environment variables and testing applications
  • cmake : cmake installation files
  • makefiles : makefile based installation files
  • doc: Documentation

Documentation

OPS documentation can be viewed on Read the Docs.

Citing

To cite OPS, please reference the following paper:

I. Z. Reguly, G. R. Mudalige and M. B. Giles, Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS, in IEEE Transactions on Parallel and Distributed Systems, vol. 29, no. 4, pp. 873-886, 1 April 2018, doi: 10.1109/TPDS.2017.2778161.

@ARTICLE{Reguly_et_al_2018,
author={Reguly, István Z. and Mudalige, Gihan R. and Giles, Michael B.},
journal={IEEE Transactions on Parallel and Distributed Systems}, title={Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS}, year={2018},
volume={29},
number={4},
pages={873-886},
doi={10.1109/TPDS.2017.2778161}}

Support and Contact

The preferred method of reporting bugs and issues with OPS is to submit an issue via the repository’s issue tracker. Users can also email the authors directly by contacting the OP-DSL team.

Contributing

To contribute to OPS please use the following steps :

  1. Clone this repository (on your local system)
  2. Create a new branch in your cloned repository
  3. Make changes / contributions in your new branch
  4. Submit your changes by creating a Pull Request to the develop branch of the OPS repository

The contributions in the develop branch will be merged into the master branch as we create a new release.

License

OPS is released as an open-source project under the BSD 3-Clause License. See the file called LICENSE for more information.

About

OPS is an API with associated libraries and preprocessors to generate parallel executables for applications on mulit-block structured meshes.

Resources

Stars

77 stars

Watchers

17 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

OPS

OPS (Oxford Parallel library for Structured mesh solvers) is a high-level embedded domain specific language for writing multi-block structured mesh algorithms, and the corresponding software library and code translation tools to enable automatic parallelisation on multi-core and many-core architectures. The OPS API is embedded in C/C++ and Fortran.

Build StatusDocumentation Status

This repository contains the implementation of the back-end library and the code-generator, and is structured as follows:

  • ops: Implementation of the user and run-time OPS C/C++ APIs
  • apps: Application examples in C. These are examples of user application code and also include the target parallel code generated by the OPS code generator.
  • ops_translator: Python/Clang/Fparser/jinja2 based OPS code generator for C/C++/Fortran API (New code generation engine). Note: Please refer to the instructions provided on Read the Docs. for details on Python dependencies required to utilize this code generation.
  • ops_translator_legacy: Python OPS code generator for C/C++/Fortran API (Old code generation engine)
  • scripts : example scripts for setting environment variables and testing applications
  • cmake : cmake installation files
  • makefiles : makefile based installation files
  • doc: Documentation

Documentation

OPS documentation can be viewed on Read the Docs.

Citing

To cite OPS, please reference the following paper:

I. Z. Reguly, G. R. Mudalige and M. B. Giles, Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS, in IEEE Transactions on Parallel and Distributed Systems, vol. 29, no. 4, pp. 873-886, 1 April 2018, doi: 10.1109/TPDS.2017.2778161.

@ARTICLE{Reguly_et_al_2018,
author={Reguly, István Z. and Mudalige, Gihan R. and Giles, Michael B.},
journal={IEEE Transactions on Parallel and Distributed Systems}, title={Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS}, year={2018},
volume={29},
number={4},
pages={873-886},
doi={10.1109/TPDS.2017.2778161}}

Support and Contact

The preferred method of reporting bugs and issues with OPS is to submit an issue via the repository’s issue tracker. Users can also email the authors directly by contacting the OP-DSL team.

Contributing

To contribute to OPS please use the following steps :

  1. Clone this repository (on your local system)
  2. Create a new branch in your cloned repository
  3. Make changes / contributions in your new branch
  4. Submit your changes by creating a Pull Request to the develop branch of the OPS repository

The contributions in the develop branch will be merged into the master branch as we create a new release.

License

OPS is released as an open-source project under the BSD 3-Clause License. See the file called LICENSE for more information.

About

OPS is an API with associated libraries and preprocessors to generate parallel executables for applications on mulit-block structured meshes.

Resources

Stars

77 stars

Watchers

17 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

OPS

OPS (Oxford Parallel library for Structured mesh solvers) is a high-level embedded domain specific language for writing multi-block structured mesh algorithms, and the corresponding software library and code translation tools to enable automatic parallelisation on multi-core and many-core architectures. The OPS API is embedded in C/C++ and Fortran.

Build StatusDocumentation Status

This repository contains the implementation of the back-end library and the code-generator, and is structured as follows:

  • ops: Implementation of the user and run-time OPS C/C++ APIs
  • apps: Application examples in C. These are examples of user application code and also include the target parallel code generated by the OPS code generator.
  • ops_translator: Python/Clang/Fparser/jinja2 based OPS code generator for C/C++/Fortran API (New code generation engine). Note: Please refer to the instructions provided on Read the Docs. for details on Python dependencies required to utilize this code generation.
  • ops_translator_legacy: Python OPS code generator for C/C++/Fortran API (Old code generation engine)
  • scripts : example scripts for setting environment variables and testing applications
  • cmake : cmake installation files
  • makefiles : makefile based installation files
  • doc: Documentation

Documentation

OPS documentation can be viewed on Read the Docs.

Citing

To cite OPS, please reference the following paper:

I. Z. Reguly, G. R. Mudalige and M. B. Giles, Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS, in IEEE Transactions on Parallel and Distributed Systems, vol. 29, no. 4, pp. 873-886, 1 April 2018, doi: 10.1109/TPDS.2017.2778161.

@ARTICLE{Reguly_et_al_2018,
author={Reguly, István Z. and Mudalige, Gihan R. and Giles, Michael B.},
journal={IEEE Transactions on Parallel and Distributed Systems}, title={Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS}, year={2018},
volume={29},
number={4},
pages={873-886},
doi={10.1109/TPDS.2017.2778161}}

Support and Contact

The preferred method of reporting bugs and issues with OPS is to submit an issue via the repository’s issue tracker. Users can also email the authors directly by contacting the OP-DSL team.

Contributing

To contribute to OPS please use the following steps :

  1. Clone this repository (on your local system)
  2. Create a new branch in your cloned repository
  3. Make changes / contributions in your new branch
  4. Submit your changes by creating a Pull Request to the develop branch of the OPS repository

The contributions in the develop branch will be merged into the master branch as we create a new release.

License

OPS is released as an open-source project under the BSD 3-Clause License. See the file called LICENSE for more information.

About

OPS is an API with associated libraries and preprocessors to generate parallel executables for applications on mulit-block structured meshes.

Resources

Stars

77 stars

Watchers

17 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

OPS

OPS (Oxford Parallel library for Structured mesh solvers) is a high-level embedded domain specific language for writing multi-block structured mesh algorithms, and the corresponding software library and code translation tools to enable automatic parallelisation on multi-core and many-core architectures. The OPS API is embedded in C/C++ and Fortran.

Build StatusDocumentation Status

This repository contains the implementation of the back-end library and the code-generator, and is structured as follows:

  • ops: Implementation of the user and run-time OPS C/C++ APIs
  • apps: Application examples in C. These are examples of user application code and also include the target parallel code generated by the OPS code generator.
  • ops_translator: Python/Clang/Fparser/jinja2 based OPS code generator for C/C++/Fortran API (New code generation engine). Note: Please refer to the instructions provided on Read the Docs. for details on Python dependencies required to utilize this code generation.
  • ops_translator_legacy: Python OPS code generator for C/C++/Fortran API (Old code generation engine)
  • scripts : example scripts for setting environment variables and testing applications
  • cmake : cmake installation files
  • makefiles : makefile based installation files
  • doc: Documentation

Documentation

OPS documentation can be viewed on Read the Docs.

Citing

To cite OPS, please reference the following paper:

I. Z. Reguly, G. R. Mudalige and M. B. Giles, Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS, in IEEE Transactions on Parallel and Distributed Systems, vol. 29, no. 4, pp. 873-886, 1 April 2018, doi: 10.1109/TPDS.2017.2778161.

@ARTICLE{Reguly_et_al_2018,
author={Reguly, István Z. and Mudalige, Gihan R. and Giles, Michael B.},
journal={IEEE Transactions on Parallel and Distributed Systems}, title={Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS}, year={2018},
volume={29},
number={4},
pages={873-886},
doi={10.1109/TPDS.2017.2778161}}

Support and Contact

The preferred method of reporting bugs and issues with OPS is to submit an issue via the repository’s issue tracker. Users can also email the authors directly by contacting the OP-DSL team.

Contributing

To contribute to OPS please use the following steps :

  1. Clone this repository (on your local system)
  2. Create a new branch in your cloned repository
  3. Make changes / contributions in your new branch
  4. Submit your changes by creating a Pull Request to the develop branch of the OPS repository

The contributions in the develop branch will be merged into the master branch as we create a new release.

License

OPS is released as an open-source project under the BSD 3-Clause License. See the file called LICENSE for more information.

About

OPS is an API with associated libraries and preprocessors to generate parallel executables for applications on mulit-block structured meshes.

Resources

Stars

77 stars

Watchers

17 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

OPS

OPS (Oxford Parallel library for Structured mesh solvers) is a high-level embedded domain specific language for writing multi-block structured mesh algorithms, and the corresponding software library and code translation tools to enable automatic parallelisation on multi-core and many-core architectures. The OPS API is embedded in C/C++ and Fortran.

Build StatusDocumentation Status

This repository contains the implementation of the back-end library and the code-generator, and is structured as follows:

  • ops: Implementation of the user and run-time OPS C/C++ APIs
  • apps: Application examples in C. These are examples of user application code and also include the target parallel code generated by the OPS code generator.
  • ops_translator: Python/Clang/Fparser/jinja2 based OPS code generator for C/C++/Fortran API (New code generation engine). Note: Please refer to the instructions provided on Read the Docs. for details on Python dependencies required to utilize this code generation.
  • ops_translator_legacy: Python OPS code generator for C/C++/Fortran API (Old code generation engine)
  • scripts : example scripts for setting environment variables and testing applications
  • cmake : cmake installation files
  • makefiles : makefile based installation files
  • doc: Documentation

Documentation

OPS documentation can be viewed on Read the Docs.

Citing

To cite OPS, please reference the following paper:

I. Z. Reguly, G. R. Mudalige and M. B. Giles, Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS, in IEEE Transactions on Parallel and Distributed Systems, vol. 29, no. 4, pp. 873-886, 1 April 2018, doi: 10.1109/TPDS.2017.2778161.

@ARTICLE{Reguly_et_al_2018,
author={Reguly, István Z. and Mudalige, Gihan R. and Giles, Michael B.},
journal={IEEE Transactions on Parallel and Distributed Systems}, title={Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS}, year={2018},
volume={29},
number={4},
pages={873-886},
doi={10.1109/TPDS.2017.2778161}}

Support and Contact

The preferred method of reporting bugs and issues with OPS is to submit an issue via the repository’s issue tracker. Users can also email the authors directly by contacting the OP-DSL team.

Contributing

To contribute to OPS please use the following steps :

  1. Clone this repository (on your local system)
  2. Create a new branch in your cloned repository
  3. Make changes / contributions in your new branch
  4. Submit your changes by creating a Pull Request to the develop branch of the OPS repository

The contributions in the develop branch will be merged into the master branch as we create a new release.

License

OPS is released as an open-source project under the BSD 3-Clause License. See the file called LICENSE for more information.

About

OPS is an API with associated libraries and preprocessors to generate parallel executables for applications on mulit-block structured meshes.

Resources

Stars

77 stars

Watchers

17 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

OPS

OPS (Oxford Parallel library for Structured mesh solvers) is a high-level embedded domain specific language for writing multi-block structured mesh algorithms, and the corresponding software library and code translation tools to enable automatic parallelisation on multi-core and many-core architectures. The OPS API is embedded in C/C++ and Fortran.

Build StatusDocumentation Status

This repository contains the implementation of the back-end library and the code-generator, and is structured as follows:

  • ops: Implementation of the user and run-time OPS C/C++ APIs
  • apps: Application examples in C. These are examples of user application code and also include the target parallel code generated by the OPS code generator.
  • ops_translator: Python/Clang/Fparser/jinja2 based OPS code generator for C/C++/Fortran API (New code generation engine). Note: Please refer to the instructions provided on Read the Docs. for details on Python dependencies required to utilize this code generation.
  • ops_translator_legacy: Python OPS code generator for C/C++/Fortran API (Old code generation engine)
  • scripts : example scripts for setting environment variables and testing applications
  • cmake : cmake installation files
  • makefiles : makefile based installation files
  • doc: Documentation

Documentation

OPS documentation can be viewed on Read the Docs.

Citing

To cite OPS, please reference the following paper:

I. Z. Reguly, G. R. Mudalige and M. B. Giles, Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS, in IEEE Transactions on Parallel and Distributed Systems, vol. 29, no. 4, pp. 873-886, 1 April 2018, doi: 10.1109/TPDS.2017.2778161.

@ARTICLE{Reguly_et_al_2018,
author={Reguly, István Z. and Mudalige, Gihan R. and Giles, Michael B.},
journal={IEEE Transactions on Parallel and Distributed Systems}, title={Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS}, year={2018},
volume={29},
number={4},
pages={873-886},
doi={10.1109/TPDS.2017.2778161}}

Support and Contact

The preferred method of reporting bugs and issues with OPS is to submit an issue via the repository’s issue tracker. Users can also email the authors directly by contacting the OP-DSL team.

Contributing

To contribute to OPS please use the following steps :

  1. Clone this repository (on your local system)
  2. Create a new branch in your cloned repository
  3. Make changes / contributions in your new branch
  4. Submit your changes by creating a Pull Request to the develop branch of the OPS repository

The contributions in the develop branch will be merged into the master branch as we create a new release.

License

OPS is released as an open-source project under the BSD 3-Clause License. See the file called LICENSE for more information.

About

OPS is an API with associated libraries and preprocessors to generate parallel executables for applications on mulit-block structured meshes.

Resources

Stars

77 stars

Watchers

17 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

OPS

OPS (Oxford Parallel library for Structured mesh solvers) is a high-level embedded domain specific language for writing multi-block structured mesh algorithms, and the corresponding software library and code translation tools to enable automatic parallelisation on multi-core and many-core architectures. The OPS API is embedded in C/C++ and Fortran.

Build StatusDocumentation Status

This repository contains the implementation of the back-end library and the code-generator, and is structured as follows:

  • ops: Implementation of the user and run-time OPS C/C++ APIs
  • apps: Application examples in C. These are examples of user application code and also include the target parallel code generated by the OPS code generator.
  • ops_translator: Python/Clang/Fparser/jinja2 based OPS code generator for C/C++/Fortran API (New code generation engine). Note: Please refer to the instructions provided on Read the Docs. for details on Python dependencies required to utilize this code generation.
  • ops_translator_legacy: Python OPS code generator for C/C++/Fortran API (Old code generation engine)
  • scripts : example scripts for setting environment variables and testing applications
  • cmake : cmake installation files
  • makefiles : makefile based installation files
  • doc: Documentation

Documentation

OPS documentation can be viewed on Read the Docs.

Citing

To cite OPS, please reference the following paper:

I. Z. Reguly, G. R. Mudalige and M. B. Giles, Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS, in IEEE Transactions on Parallel and Distributed Systems, vol. 29, no. 4, pp. 873-886, 1 April 2018, doi: 10.1109/TPDS.2017.2778161.

@ARTICLE{Reguly_et_al_2018,
author={Reguly, István Z. and Mudalige, Gihan R. and Giles, Michael B.},
journal={IEEE Transactions on Parallel and Distributed Systems}, title={Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS}, year={2018},
volume={29},
number={4},
pages={873-886},
doi={10.1109/TPDS.2017.2778161}}

Support and Contact

The preferred method of reporting bugs and issues with OPS is to submit an issue via the repository’s issue tracker. Users can also email the authors directly by contacting the OP-DSL team.

Contributing

To contribute to OPS please use the following steps :

  1. Clone this repository (on your local system)
  2. Create a new branch in your cloned repository
  3. Make changes / contributions in your new branch
  4. Submit your changes by creating a Pull Request to the develop branch of the OPS repository

The contributions in the develop branch will be merged into the master branch as we create a new release.

License

OPS is released as an open-source project under the BSD 3-Clause License. See the file called LICENSE for more information.

About

OPS is an API with associated libraries and preprocessors to generate parallel executables for applications on mulit-block structured meshes.

Resources

Stars

77 stars

Watchers

17 watching

Forks

Releases

Packages

Used by

Contributors

Languages