<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

 <title>hpc.social - Community Syndicated Blog</title>
 <link href="https://hpc.social/atom.xml" rel="self"/>
 <link href="https://hpc.social/"/>
 <updated>2026-03-09T22:19:23-06:00</updated>
 <id>https://hpc.social</id>
 <author>
   <name>hpc.social</name>
   <email>info@hpc.social</email>
 </author>

 
 <entry>
   <title>New Board Members van der Pas and Stotzer</title>
   <link href="https://hpc.social/2026/new-board-members-van-der-pas-and-stotzer/"/>
   <updated>2026-02-16T18:44:35-07:00</updated>
   <id>https://hpc.social/2026/new-board-members-van-der-pas-and-stotzer</id>
   <content type="html">&lt;p&gt;The OpenMP ARB welcomes Ruud van der Pas and Eric Stotzer to its Board of Directors.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/press-release/board-stotzer-vdpas/&quot;&gt;New Board Members van der Pas and Stotzer&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>OpenMP Example Book Survey</title>
   <link href="https://hpc.social/2026/openmp-example-book-survey/"/>
   <updated>2026-02-15T18:47:18-07:00</updated>
   <id>https://hpc.social/2026/openmp-example-book-survey</id>
   <content type="html">&lt;p&gt;If you have used our OpenMP API Examples book, take our survey to tell us how we can improve it.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/2026/openmp-example-book-survey/&quot;&gt;OpenMP Example Book Survey&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>New Python Subcommittee, and Anaconda joins OpenMP ARB</title>
   <link href="https://hpc.social/2026/new-python-subcommittee-and-anaconda-joins-openmp-arb/"/>
   <updated>2026-02-04T21:00:28-07:00</updated>
   <id>https://hpc.social/2026/new-python-subcommittee-and-anaconda-joins-openmp-arb</id>
   <content type="html">&lt;p&gt;Anaconda has joined the OpenMP ARB, and the OpenMP ARB has formed a new Python subcommittee to add Python as the fourth supported language in the OpenMP API.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/press-release/python-new-member-anaconda/&quot;&gt;New Python Subcommittee, and Anaconda joins OpenMP ARB&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>IWOMP 2026</title>
   <link href="https://hpc.social/2026/iwomp-2026/"/>
   <updated>2026-01-28T17:11:06-07:00</updated>
   <id>https://hpc.social/2026/iwomp-2026</id>
   <content type="html">&lt;p&gt;IWOMP 2026 Join us for IWOMP 2026 at Austrian Scientific Computing (ASC) at TU Wien in Vienna (Austria)&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/iwomp-2026/&quot;&gt;IWOMP 2026&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>OpenMP ARB Releases Technical Report 14</title>
   <link href="https://hpc.social/2025/openmp-arb-releases-technical-report-14/"/>
   <updated>2025-11-13T15:53:14-07:00</updated>
   <id>https://hpc.social/2025/openmp-arb-releases-technical-report-14</id>
   <content type="html">&lt;p&gt;The OpenMP® ARB has released Technical Report 14, a preview of version 6.1 of the OpenMP API, which will be released in 2026.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/press-release/openmp-arb-releases-tr14/&quot;&gt;OpenMP ARB Releases Technical Report 14&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Supercomputing 2025</title>
   <link href="https://hpc.social/2025/supercomputing-2025/"/>
   <updated>2025-07-29T15:28:58-06:00</updated>
   <id>https://hpc.social/2025/supercomputing-2025</id>
   <content type="html">&lt;p&gt;November 2025&lt;br /&gt;
Visit us in booth 911, attend our BOF, and attend our two tutorials at SC25 in St. Louis. See videos and more.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/sc25/&quot;&gt;Supercomputing 2025&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>IWOMP 2025</title>
   <link href="https://hpc.social/2025/iwomp-2025/"/>
   <updated>2025-07-15T00:48:20-06:00</updated>
   <id>https://hpc.social/2025/iwomp-2025</id>
   <content type="html">&lt;p&gt;IWOMP 2025 will be held at the UNC Charlotte campus in North Carolina, Oct 1 – Oct. 3, 2025.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/iwomp-2025/&quot;&gt;IWOMP 2025&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>NextSilicon joins the OpenMP</title>
   <link href="https://hpc.social/2025/nextsilicon-joins-the-openmp/"/>
   <updated>2025-06-10T10:00:58-06:00</updated>
   <id>https://hpc.social/2025/nextsilicon-joins-the-openmp</id>
   <content type="html">&lt;p&gt;June 10, 2025 — NextSilicon has joined the OpenMP ARB, a group of leading hardware and software vendors and research organizations creating the standard for the most popular shared-memory parallel programming model in use today.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/press-release/new-member-nextsilicon/&quot;&gt;NextSilicon joins the OpenMP&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>ISC 2025</title>
   <link href="https://hpc.social/2025/isc-2025/"/>
   <updated>2025-02-28T20:12:17-07:00</updated>
   <id>https://hpc.social/2025/isc-2025</id>
   <content type="html">&lt;p&gt;ISC 2025 will be held in Hamburg, Germany June 10-13, bringing together over 3,500 international attendees to exchange ideas and knowledge.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/isc2025/&quot;&gt;ISC 2025&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Status of OpenMP API 6.0 Implementations</title>
   <link href="https://hpc.social/2025/status-of-openmp-api-6-0-implementations/"/>
   <updated>2025-02-25T10:00:35-07:00</updated>
   <id>https://hpc.social/2025/status-of-openmp-api-6-0-implementations</id>
   <content type="html">&lt;p&gt;First implementations of OpenMP 6.0 features are now available in Intel® and GCC compilers.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/blog/openmp-6/&quot;&gt;Status of OpenMP API 6.0 Implementations&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>IWOMP 2025</title>
   <link href="https://hpc.social/2025/iwomp-2025/"/>
   <updated>2025-02-15T00:48:20-07:00</updated>
   <id>https://hpc.social/2025/iwomp-2025</id>
   <content type="html">&lt;p&gt;IWOMP 2025  will be held at the UNC Charlotte campus in North Carolina, US.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/iwomp-2024-2/&quot;&gt;IWOMP 2025&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>OpenMP® ARB Releases OpenMP 6.0 for Easier Programming</title>
   <link href="https://hpc.social/2024/openmp-arb-releases-openmp-6-0-for-easier-programming/"/>
   <updated>2024-11-14T18:00:41-07:00</updated>
   <id>https://hpc.social/2024/openmp-arb-releases-openmp-6-0-for-easier-programming</id>
   <content type="html">&lt;p&gt;Develop Parallel Programs Easily and More Control to Developers SC24, Atlanta, Georgia – November 14, 2024 – The OpenMP Architecture Review Board (ARB) is pleased to announce Version 6.0 of the OpenMP API Specification, a major upgrade of the OpenMP language. This new version opens up parallel programming to new applications, makes it easier to  [...]&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/home-news/openmp-arb-releases-openmp-6-0-for-easier-programming/&quot;&gt;OpenMP® ARB Releases OpenMP 6.0 for Easier Programming&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Supercomputing 2024</title>
   <link href="https://hpc.social/2024/supercomputing-2024/"/>
   <updated>2024-08-27T23:13:58-06:00</updated>
   <id>https://hpc.social/2024/supercomputing-2024</id>
   <content type="html">&lt;p&gt;November 18, 2024&lt;br /&gt;
OpenMP will be in Atlanta for Supercomputing 2024 with two tutorials, a BOF, and much more.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/sc24/&quot;&gt;Supercomputing 2024&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>OpenMP ARB Releases Public Comment Draft of OpenMP 6.0</title>
   <link href="https://hpc.social/2024/openmp-arb-releases-public-comment-draft-of-openmp-6-0/"/>
   <updated>2024-08-01T15:54:15-06:00</updated>
   <id>https://hpc.social/2024/openmp-arb-releases-public-comment-draft-of-openmp-6-0</id>
   <content type="html">&lt;p&gt;The OpenMP® Architecture Review Board (ARB) has released Technical Report 13: the final public comment draft of version 6.0 of the OpenMP API. Version 6.0 of the OpenMP API will be released in November 2024.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/home-news/openmp-arb-releases-public-comment-draft-of-openmp-6-0/&quot;&gt;OpenMP ARB Releases Public Comment Draft of OpenMP 6.0&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Asynchronous GPU Programming in OpenMP</title>
   <link href="https://hpc.social/2024/asynchronous-gpu-programming-in-openmp/"/>
   <updated>2024-06-03T21:14:21-06:00</updated>
   <id>https://hpc.social/2024/asynchronous-gpu-programming-in-openmp</id>
   <content type="html">&lt;p&gt;The Centre of Excellence on Performance Optimisation and Productivity published the recording of a webinar on Asynchronous GPU Programming in OpenMP where Christian Terboven and Michael Klemm discuss the optimization of data transfers and asynchronous offloading, hybrid OpenMP and HIP, and advanced task synchronization. Watch now.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/home-news/asynchronous-gpu-programming-in-openmp/&quot;&gt;Asynchronous GPU Programming in OpenMP&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The OpenMP ARB welcomes new member CEA</title>
   <link href="https://hpc.social/2024/the-openmp-arb-welcomes-new-member-cea/"/>
   <updated>2024-05-13T08:00:03-06:00</updated>
   <id>https://hpc.social/2024/the-openmp-arb-welcomes-new-member-cea</id>
   <content type="html">&lt;p&gt;May 13, 2024 — CEA has joined the OpenMP® ARB, a group of leading hardware and software vendors and research organizations creating the standard for the most popular shared-memory parallel programming model in use today.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/press-release/the-openmp-arb-welcomes-new-member-cea/&quot;&gt;The OpenMP ARB welcomes new member CEA&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>IWOMP 2024</title>
   <link href="https://hpc.social/2024/iwomp-2024/"/>
   <updated>2024-03-20T14:45:28-06:00</updated>
   <id>https://hpc.social/2024/iwomp-2024</id>
   <content type="html">&lt;p&gt;Sept. 23, 2024  The 20th International Workshop on OpenMP - IWOMP is the premier forum to present and discuss issues, trends, recent research ideas, and results related to parallel programming with OpenMP.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/recent-events/iwomp-2024/&quot;&gt;IWOMP 2024&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Looking forward to 2024!</title>
   <link href="https://hpc.social/2023/looking-forward-to-2024/"/>
   <updated>2023-12-22T06:16:33-07:00</updated>
   <id>https://hpc.social/2023/looking-forward-to-2024-</id>
   <content type="html">&lt;h2&gt;
  
  
  Looking forward to next year!
&lt;/h2&gt;

&lt;p&gt;This is my end-of-the year post as we all make our way into the New Year. &lt;/p&gt;

&lt;p&gt;We&apos;ve done quite a lot of things this year to help make oneAPI easier to use - a lot of the blog posts I&apos;ve written as been towards an eye to educate.&lt;/p&gt;

&lt;p&gt;We started off with some blog posts on how to use modern IDEs on Linux to write SYCL code and run them inside a container that we built, making a turn-key effort to build applications.&lt;/p&gt;

&lt;p&gt;There was the introduction to &apos;&lt;a href=&quot;https://github.com/oneapi-community/awesome-oneapi&quot;&gt;awesome oneAPI&lt;/a&gt;&apos; which showed a set of curated links to oneAPI projects showcasing all the capabilities. We have been updating it regularly, so check it out! We are definitely looking for more AI related projects - are you thinking of a project for next year? Need help? Let me know!&lt;/p&gt;

&lt;p&gt;To complement the awesome oneAPI distribution, I have recently launched the &lt;a href=&quot;https://oneapi-community.github.io/&quot;&gt;oneAPI Web Showcase&lt;/a&gt; where we hope to discover upcoming projects that people are working on and showcasing them. There are also links on the website to help you start a project.&lt;/p&gt;

&lt;p&gt;We now have community-focused documentation!!&lt;/p&gt;

&lt;p&gt;I&apos;ll have another blog post up to show how you can help with the documentation by translating the documentation into different languages so that everybody can follow along in their native language. You can see the documentation at &lt;a href=&quot;https://oneapi-community.github.io/documentation&quot;&gt;https://oneapi-community.github.io/documentation&lt;/a&gt;. We hope to grow it into a true community hub for oneAPI and SYCL. Exciting! All of these are community projects in themselves. Want to help out? Reach out or just submit a PR!&lt;/p&gt;

&lt;h2&gt;
  
  
  Goals for next year
&lt;/h2&gt;

&lt;p&gt;I want to keep building on the work we&apos;ve done in 2023. So many opportunities!! 2023 was all about meeting developers where they were. Now, it&apos;s also time to meet them where they are AND also communicate with them in their own language!!&lt;/p&gt;

&lt;p&gt;The key to  adopting open platforms is to:&lt;/p&gt;

&lt;p&gt;1) Have great documentation that&apos;s accessible in as many languages as possible.&lt;br /&gt;
2) Plenty of code samples to look at how to do things.&lt;br /&gt;
3) Great developer experience - be able to set up your environment and just go!&lt;br /&gt;
4) Amazing community that interacts with each other, is active and works together.&lt;/p&gt;

&lt;p&gt;These are all totally possible!! But, oneAPI is relatively new and still under one vendor. With the formation of the &lt;a href=&quot;https://uxlfoundation.org/&quot;&gt;UXL Foundation&lt;/a&gt;, we now have a neutral place for all vendors to congregate and work together. As a community, we should ask our hardware vendors to support level zero and be able to get all the advantages of hardware with a smooth hardware experience.&lt;/p&gt;

&lt;p&gt;So where do we want to go from here - here are my personal goals/wish list for next year!&lt;/p&gt;

&lt;p&gt;1) reproducible builds - we should be able to continuously build and test oneAPI software.&lt;br /&gt;
2) More community assistance in documentation by helping translate the docs we have - as well as having more docs around tips and tricks.&lt;br /&gt;
3) Adding more projects to Awesome oneAPI and having more PRs from the community to add their projects! :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Have a wonderful holiday season and a Happy New Year!
&lt;/h2&gt;

&lt;p&gt;With that, I wish all of you a wonderful holiday season and looking forward to great things in the oneAPI ecosystem in 2024!!&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@jamie452?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Jamie Street&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/multicolored-christmas-decors-yq68hBhi0RI?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Building oneAPI from Source</title>
   <link href="https://hpc.social/2023/building-oneapi-from-source/"/>
   <updated>2023-12-22T06:08:31-07:00</updated>
   <id>https://hpc.social/2023/building-oneapi-from-source</id>
   <content type="html">&lt;h2&gt;
  
  
  Build oneAPI completely from git
&lt;/h2&gt;

&lt;p&gt;I&apos;m back!! A few raw posts have been languishing and I decided the end of the year was the perfect time to put them out there. This will be one of three (hopefully).&lt;/p&gt;

&lt;p&gt;I&apos;m going to focus on how ￼to build oneAPI from git. This is somewhat of a return to my earlier blog post where I talked about how to build the DPC++ compiler and it included the binary versions of the openCL and level zero run time.&lt;/p&gt;

&lt;p&gt;That&apos;s all well and good but let&apos;s consider how we could build the run time from git completely. The ability to do reproducible builds is going to be important later when we dive into buildimg packaging that is up to date and available on any Linux distro.&lt;/p&gt;

&lt;p&gt;The build only supports Intel hardware at this point since level zero doesn&apos;t support NVidia or AMD GPUs. If you are looking for such support, you might consider Codeplay&apos;s plugins that will allow you to use NVidia and AMD hardware. &lt;/p&gt;

&lt;p&gt;These blog pages typically only focus on what we can do from an open source perspective and won&apos;t really focus on anything that has binary blobs if we can avoid it.&lt;/p&gt;

&lt;p&gt;DISCLAIMER: Please don&apos;t use this set up for a production environment. It is not well tested. If you find any problems, please reach out in the comments so that I can help debug and update the blog post appropriately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up the build environment
&lt;/h2&gt;

&lt;p&gt;I like to use containers which makes it easy to quickly set up and automate using distrobox.&lt;/p&gt;

&lt;p&gt;You should be able to use whatever Linux distribution you want as long as you can install distrobox. You can, of course, use a virtual machine to accomplish this. I&apos;ve used Vagrant successfully.&lt;/p&gt;

&lt;p&gt;Assuming that you have distrobox installed - let&apos;s get to it.&lt;/p&gt;

&lt;p&gt;Decide where you want to have the build for instance: ~/src/oneapi-build.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ distrobox create --image docker.io/library/ubuntu 20.04 --name &quot;oneAPIBuild&quot;
$ distrobox enter oneAPIBuild
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You should now be in a container running Ubuntu 20.04.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install the appropriate packages
&lt;/h3&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ sudo apt-get install -y build-essential git libssl-dev flex bison libz-dev python3-mako python3-pip automake autoconf libtool pkg-config ruby
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You will need a recent version of cmake for the builds. The one that comes with 20.04 is too old.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$  wget https://github.com/Kitware/CMake/releases/download/v3.28.1/cmake-3.28.1.tar.gz
$ tar xvfpz cmake-3.28.1.tar.gz
$ cd cmake-3.28.1
$ ./boostrap
$ ./configure
$ make 
$ sudo make install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now you should have everything you need for the build.&lt;/p&gt;

&lt;h3&gt;
  
  
  Understanding the oneAPI Build
&lt;/h3&gt;

&lt;p&gt;There are a number of prerequisites before you start the build. Here is a graphic of how the oneAPI build is put together.&lt;/p&gt;

&lt;p&gt;The order of build is:&lt;/p&gt;

&lt;p&gt;1) Intel Graphics Engine and i￼ts relevant prerequisites which consist of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intel Graphics Compiler (igc)

&lt;ol&gt;
&lt;li&gt;SPIRV Headers&lt;/li&gt;
&lt;li&gt;SPIRV Tools&lt;/li&gt;
&lt;li&gt;copy of the llvm project&lt;/li&gt;
&lt;li&gt;vc-intrinsics&lt;/li&gt;
&lt;li&gt;intel graphcis compiler
2) ocl-icd
3) GMMLib
4) NEO - Intel Compute Runtime - NEO is the primary GPU graphics driver and uses OpenCL to talk to the GPU.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Has the following pre-requisites:

&lt;ol&gt;
&lt;li&gt;Intel graphics compiler (IGC)&lt;/li&gt;
&lt;li&gt;GMMLib
6) Level Zero
7) DPC++ SYCL Compiler
8) oneTBB Library&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That&apos;s the progression to get the full build going.&lt;/p&gt;

&lt;h3&gt;
  
  
  Intel Graphics Engine
&lt;/h3&gt;

&lt;p&gt;Let&apos;s start building the first prerequisites for the NEO which is the Intel Graphics Engine:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ mkdir igc-workspace &amp;amp;&amp;amp; cd igc-workspace
$ git clone https://github.com/KhronosGroup/SPIRV-Headers.git --depth 1

$ git clone https://github.com/KhronosGroup/SPIRV-Tools.git --depth 1

$ git clone -b llvmorg-14.0.5 https://github.com/llvm/llvm-project llvm-project --depth 1

$ git clone -b ocl-open-140 https://github.com/intel/opencl-clang llvm-project/llvm/projects/opencl-clang --depth 1

$ git clone -b llvm_release_140 https://github.com/KhronosGroup/SPIRV-LLVM-Translator llvm-project/llvm/projects/llvm-spirv --depth 1

$ git clone https://github.com/intel/vc-intrinsics --depth 1

$ git clone https://github.com/intel/intel-graphics-compiler igc --depth 1

$ mkdir build &amp;amp;&amp;amp; cd build
$ cmake ../igc -DCMAKE_INSTALL_PREFIX=&quot;/usr/local&quot;
$ make -j `nproc`
$ sudo make install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;It should build cleanly. If it doesn&apos;t - please check any errors and make sure you have all the prerequisites.&lt;/p&gt;

&lt;h3&gt;
  
  
  ocl-icd
&lt;/h3&gt;

&lt;p&gt;ocl-icd is an OpenCL loader - and is used to link opencl software when compiling. Make sure you are back in your usual oneapi-build directory.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ pwd
~/src/oneapi-build
$ git clone https://github.com/OCL-dev/ocl-icd --depth 1
$ cd ocl-icd
$ ./bootstrap
$ ./configure
$ make
$ sudo make install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Install GMMLib
&lt;/h3&gt;

&lt;p&gt;NEO requires GMMLib as one of its prerequisites so we will build that now.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ pwd
~/src/oneapi-build
$ git clone https://github.com/intel/gmmlib --depth 1
$ cd gmmlib
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=&quot;/usr/local&quot;
$ make
$ sudo make install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Install NEO
&lt;/h3&gt;

&lt;p&gt;NEO is the Intel Compute Runtime and is necessary for the SYCL based applications to talk to the GPU. Go back to your ~/src/oneapi-build directory.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ pwd 
~/src/oneapi-build # please note this output will be different for you
$ mkdir neo-workspace
$ cd neo-workspace
$ git clone https://github.com/intel/compute-runtime neo –depth 1
$ cd neo
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=&quot;/usr/local&quot;
$ make
$ sudo make install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Install level-zero
&lt;/h2&gt;

&lt;p&gt;This is the main part of oneAPI and interfaces with NEO or other run times. Since NEO is the only one at the moment - it will only work with Intel devices.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ pwd
~/src/oneapi-build
$ git clone https://github.com/oneapi-src/level-zero --depth 1
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=&quot;/usr/local&quot;
$ make
$ sudo make install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Install the DPC++ Compiler
&lt;/h2&gt;

&lt;p&gt;Now to build the SYCL Compiler.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ pwd
~/src/oneapi-build
$ mkdir sycl_workspace &amp;amp;&amp;amp; cd sycl_workspace
$ export DPCPP_HOME=`pwd`
$ git clone https://github.com/intel/llvm.git -b sycl --depth 1
$ python3 $DPCPP_HOME/llvm/buildbot/configure.py --cmake-opt CMAKE_BUILD_PREFIX=&quot;/usr/local&quot;
$ python3 $DPCPP_HOME/llvm/buildbot/compile.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Install oneTBB
&lt;/h2&gt;

&lt;p&gt;Finally, we need to install oneTBB&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ pwd
~/src/oneapi-build
$ git clone https://github.com/oneapi-src/oneTBB --depth 1
$ cd oneTBB
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=&quot;/usr/local&quot;
$ make
$ make install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Set the LD_LIBRARY_PATH
&lt;/h2&gt;

&lt;p&gt;We need to make sure that the linker can find the proper libraries. The easiest way is to either set the LD_LIBRARY_PATH in your .bashrc or put it in /etc/environment.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ export LD_LIBRARY_PATH=&quot;/usr/local/lib&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Test the environment
&lt;/h2&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ cd ~/src
$ mkdir simple-oneapi-app
$ cd simple-oneapi-app
$ cat &amp;gt; simple-oneapi-app.cpp
#include &amp;lt;sycl/sycl.hpp&amp;gt;

int main() {
  // Creating buffer of 4 ints to be used inside the kernel code
  sycl::buffer&amp;lt;sycl::cl_int, 1&amp;gt; Buffer(4);

  // Creating SYCL queue
  sycl::queue Queue;

  // Size of index space for kernel
  sycl::range&amp;lt;1&amp;gt; NumOfWorkItems{Buffer.size()};

  // Submitting command group(work) to queue
  Queue.submit([&amp;amp;](sycl::handler &amp;amp;cgh) {
    // Getting write only access to the buffer on a device
    auto Accessor = Buffer.get_access&amp;lt;sycl::access::mode::write&amp;gt;(cgh);
    // Executing kernel
    cgh.parallel_for&amp;lt;class FillBuffer&amp;gt;(
        NumOfWorkItems, [=](sycl::id&amp;lt;1&amp;gt; WIid) {
          // Fill buffer with indexes
          Accessor[WIid] = (sycl::cl_int)WIid.get(0);
        });
  });

  // Getting read only access to the buffer on the host.
  // Implicit barrier waiting for queue to complete the work.
  const auto HostAccessor = Buffer.get_access&amp;lt;sycl::access::mode::read&amp;gt;();

  // Check the results
  bool MismatchFound = false;
  for (size_t I = 0; I &amp;lt; Buffer.size(); ++I) {
    if (HostAccessor[I] != I) {
      std::cout &amp;lt;&amp;lt; &quot;The result is incorrect for element: &quot; &amp;lt;&amp;lt; I
                &amp;lt;&amp;lt; &quot; , expected: &quot; &amp;lt;&amp;lt; I &amp;lt;&amp;lt; &quot; , got: &quot; &amp;lt;&amp;lt; HostAccessor[I]
                &amp;lt;&amp;lt; std::endl;
      MismatchFound = true;
    }
  }

  if (!MismatchFound) {
    std::cout &amp;lt;&amp;lt; &quot;The results are correct!&quot; &amp;lt;&amp;lt; std::endl;
  }

  return MismatchFound;
}

$ clang++ -fsycl simple-oneapi-app.cpp -o simple-oneapi-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;When you run the app you should get &quot;Results are correct!&quot;.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ ./simple-oneapi-app
Results are correct!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now you&apos;ve successfully built oneAPI from source!&lt;/p&gt;

&lt;p&gt;Let me know if you have any issues with the instructions in the comments.&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@exdigy?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Dominik Lückmann&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/blue-and-red-cargo-ship-4aOhA4ptIY4?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Supercomputing 2023 - HPC Social Summary!</title>
   <link href="https://hpc.social/2023/supercomputing-2023-hpc-social-summary/"/>
   <updated>2023-11-17T00:00:00-07:00</updated>
   <id>https://hpc.social/2023/supercomputing-2023-hpc-social-summary-</id>
   <content type="html">&lt;p&gt;What a week! We participated in person and virtually for &lt;a href=&quot;https://sc23.supercomputing.org/&quot;&gt;Supercomputing 2023&lt;/a&gt; in Denver. While we cannot cover all the exciting happenings, we will review a brief set of events of interest here.&lt;/p&gt;

&lt;h2 id=&quot;hpc-social-virtual-noodles-award&quot;&gt;HPC Social Virtual Noodles Award&lt;/h2&gt;

&lt;p&gt;This year we launched the first &lt;a href=&quot;https://hpc.social/noodles-award/&quot;&gt;HPC Social Noodles Award&lt;/a&gt;, a celebration of our frustrations and comical takes on the events of the year. THe top noodle was, of course, the whole CentOS debacle, followed by a few gripes about software and vendors, and the funny noodles starting at item 7 and on.&lt;/p&gt;

&lt;h2 id=&quot;beowulf-bash&quot;&gt;Beowulf Bash&lt;/h2&gt;

&lt;p&gt;HPC Social was present (and giving out stickers) at the &lt;a href=&quot;https://beowulfbash.com/&quot;&gt;bash&lt;/a&gt; this year! The branding was… excellent.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;/assets/img/posts/sc23/bash.png&quot; src=&quot;https://hpc-social.github.io/assets/img/posts/sc23/bash.png&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;i-want-to-run-my-mpi&quot;&gt;I Want to Run my MPI&lt;/h2&gt;

&lt;p&gt;This was a parody music video made by community leader &lt;a href=&quot;https://github.com/vsoch&quot;&gt;@vsoch&lt;/a&gt; to celebrate a generic HPC technology (MPI) in the high performance community!&lt;/p&gt;

&lt;p&gt;She made an effort to engage others to participate, and was only moderately successful to get a few shared pictures. It would be a fun idea if others wanted to participate to a greater extent at some future Supercomputing!&lt;/p&gt;

&lt;h2 id=&quot;official-greeting&quot;&gt;Official Greeting&lt;/h2&gt;

&lt;p&gt;The “official” greeting for SC23 was tapping someone on the shoulder, as &lt;a href=&quot;https://twitter.com/HPC_Guru/status/1723539957124604325&quot;&gt;announced by HPC Guru&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;/assets/img/posts/sc23/shoulder-tap.jpeg&quot; src=&quot;https://hpc-social.github.io/assets/img/posts/sc23/shoulder-tap.jpeg&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;texas-tech-tiny-cluster&quot;&gt;Texas Tech Tiny Cluster!&lt;/h2&gt;

&lt;p&gt;Our very own Alan Sill hosted a booth to show up a tiny cluster! While Raspberry Pi clusters have been around for a long time and useful in hobbyist activities, training, home automation, and training, this was one of the first such small clusters running Fedora 39 as a natively installed OS on the head node and Enterprise Linux (in this case Rocky) on the worker nodes. More to come as other mainline popular cluster tools like Warewulf, Spack and/or EasyBuild, and Slurm and/or Flux schedulars are added.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;/assets/img/posts/sc23/tiny-cluster-1.jpg&quot; src=&quot;https://hpc-social.github.io/assets/img/posts/sc23/tiny-cluster-1.jpg&quot; /&gt;
&lt;img alt=&quot;/assets/img/posts/sc23/tiny-cluster-2.jpg&quot; src=&quot;https://hpc-social.github.io/assets/img/posts/sc23/tiny-cluster-2.jpg&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;the-hpc-social-community&quot;&gt;The HPC Social Community&lt;/h2&gt;

&lt;p&gt;And finally, we close with a few shots shared in the HPC Social slack! We love our community! ❤️&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;/assets/img/posts/sc23/jarett-share.jpg&quot; src=&quot;https://hpc-social.github.io/assets/img/posts/sc23/jarett-share.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Felix (finally) got his “I am HPC Guru” pin!&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;/assets/img/posts/sc23/felix.jpeg&quot; src=&quot;https://hpc-social.github.io/assets/img/posts/sc23/felix.jpeg&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Supercomputing 2023</title>
   <link href="https://hpc.social/2023/supercomputing-2023/"/>
   <updated>2023-11-12T18:22:52-07:00</updated>
   <id>https://hpc.social/2023/supercomputing-2023</id>
   <content type="html">&lt;p&gt;November 12, 2023&lt;br /&gt;
OpenMP will be in Denver for Supercomputing 2023 with four tutorials, a BOF, and more.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/sc23/&quot;&gt;Supercomputing 2023&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>OpenMP ARB Releases Technical Report 12</title>
   <link href="https://hpc.social/2023/openmp-arb-releases-technical-report-12/"/>
   <updated>2023-11-09T07:30:51-07:00</updated>
   <id>https://hpc.social/2023/openmp-arb-releases-technical-report-12</id>
   <content type="html">&lt;p&gt;The OpenMP® Architecture Review Board (ARB) has released Technical Report 12, the second preview of version 6.0 of the OpenMP API, which will be released in 2024.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/press-release/openmp-arb-releases-technical-report-12/&quot;&gt;OpenMP ARB Releases Technical Report 12&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Fortran Package Manager and OpenMP</title>
   <link href="https://hpc.social/2023/fortran-package-manager-and-openmp/"/>
   <updated>2023-10-11T17:35:25-06:00</updated>
   <id>https://hpc.social/2023/fortran-package-manager-and-openmp</id>
   <content type="html">&lt;p&gt;The Fortran Package Manager, or fpm, is a community-driven, open-source build tool and package manager for the Fortran language. fpm makes it easy for beginners to develop applications. It streamlines project setup by quickly and easily generating Fortran project templates, facilitating rapid prototyping.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/blog/fortran-package-manager-and-openmp/&quot; rel=&quot;nofollow&quot;&gt;Fortran Package Manager and OpenMP&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>oneAPI moves to Unified Acceleration Foundation (UXL)</title>
   <link href="https://hpc.social/2023/oneapi-moves-to-unified-acceleration-foundation-uxl/"/>
   <updated>2023-09-30T03:36:38-06:00</updated>
   <id>https://hpc.social/2023/oneapi-moves-to-unified-acceleration-foundation-uxl-</id>
   <content type="html">&lt;p&gt;As accelerators have become more prevalent in the industry there has been a bifurcation in the industry which typically resolves itself. Initially there has been many efforts by a myriad of vendors in the GPU accelerator space with various degrees of openness.&lt;/p&gt;

&lt;p&gt;For a long period of time, incubation of the oneAPI ecosystem started at Intel through both DPC++ SYCL compiler, and the publishing of open specifications of oneAPI and their open source implementations. While the messaging around the specs were that they were open to all contributors – it could be hard to feel comfortable especially for competitors to enter spaces where the perception is that it isn’t a true neutral space. &lt;/p&gt;

&lt;p&gt;With oneAPI spec’s now under the aegis of the Linux Foundation the spec and the open source implementations will be well managed under established norms. There is now a true center of gravity to work together as equal partners on the oneAPI spec and their open source implementations.&lt;/p&gt;

&lt;p&gt;We can now focus on driving a true industry driven standard on heterogeneous computing under the UXL Foundation and have some serious collaboration to finally use all your hardware. This will herald a sustainable ecosystem that we can all be proud of.&lt;/p&gt;

&lt;p&gt;There are still challenges going forward. How our toolchains work together under UXL Foundation is going to be important going forward. We can address these concerns by vigorously participating in the UXL Foundation. Creating an open ecosystem is always challenging as many many partners need to agree and align on goals and processes. Listening to each other and the community is going to be key going forward.&lt;/p&gt;

&lt;p&gt;With all that being said - I hope that you will take the time to look at what has been established so far. We have a humble beginning but with your help and participation we can take it to the next level. For further reading, please see &lt;a href=&quot;https://uxlfoundation.org/&quot;&gt;https://uxlfoundation.org/&lt;/a&gt;. Looking forward to seeing you all there.&lt;/p&gt;

&lt;p&gt;Cover image: Photo by &lt;a href=&quot;https://unsplash.com/@sunburned_surveyor?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Scott Blake&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/DodJfxuH46I?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>IWOMP 2023</title>
   <link href="https://hpc.social/2023/iwomp-2023/"/>
   <updated>2023-09-12T21:35:36-06:00</updated>
   <id>https://hpc.social/2023/iwomp-2023</id>
   <content type="html">&lt;p&gt;Sept. 12, 2023  The 19th International Workshop on OpenMP - IWOMP is the premier forum to present and discuss issues, trends, recent research ideas, and results related to parallel programming with OpenMP.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/recent-events/iwomp-2021-2/&quot;&gt;IWOMP 2023&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Migrating reduction operations to SYCL in a molecular docking application</title>
   <link href="https://hpc.social/2023/migrating-reduction-operations-to-sycl-in-a-molecular-docking-application/"/>
   <updated>2023-08-10T22:30:31-06:00</updated>
   <id>https://hpc.social/2023/migrating-reduction-operations-to-sycl-in-a-molecular-docking-application</id>
   <content type="html">&lt;p&gt;I completed porting of a molecular docking application from CUDA to SYCL using the Intel® DPC++ Compatibility Tool (Compatibility Tool) in June 2021. Let me share selected techniques that I used without delving into the details of the docking application. If you want to learn how to use this tool to migrate CUDA applications to SYCL, please refer to [1].&lt;/p&gt;

&lt;p&gt;The Compatibility Tool adds comments in the code where manual migration may be required. Typically, the manual changes required fall into two categories. First, changes are required for the code to compile and make the code functionally correct. Other changes are necessary to get better performance. Here, I will cover code that uses the operation of &apos;reduction&apos;. Reductions are frequently used in High Performance Computing and scientific applications and can be performance hotspots. The first example finds the sum of integers and the second finds the minimum of floats and the identifier of the run that corresponds to the minimum.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integer Reductions to find the number of evaluations
&lt;/h2&gt;

&lt;p&gt;The  docking application performs integer reductions to keep a running count of the number of score evaluations. This reduction is  implemented as a multi-line macro in CUDA as shown below.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight cuda&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;#define REDUCEINTEGERSUM(value, pAccumulator)     
&lt;/span&gt;    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;threadIdx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;     
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;     
        &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pAccumulator&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;     
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;     
    &lt;span class=&quot;n&quot;&gt;__threadfence&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;     
    &lt;span class=&quot;n&quot;&gt;__syncthreads&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;     
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__any_sync&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mh&quot;&gt;0xffffffff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;     
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;     
        &lt;span class=&quot;kt&quot;&gt;uint32_t&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tgx&lt;/span&gt;            &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;threadIdx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;warpmask&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;     
        &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;                  &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;__shfl_sync&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mh&quot;&gt;0xffffffff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tgx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;^&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;     
        &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;                  &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;__shfl_sync&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mh&quot;&gt;0xffffffff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tgx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;^&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;     
        &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;                  &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;__shfl_sync&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mh&quot;&gt;0xffffffff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tgx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;^&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;     
        &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;                  &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;__shfl_sync&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mh&quot;&gt;0xffffffff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tgx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;^&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;     
        &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;                  &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;__shfl_sync&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mh&quot;&gt;0xffffffff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tgx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;^&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;     
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tgx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;     
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;     
            &lt;span class=&quot;n&quot;&gt;atomicAdd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pAccumulator&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;     
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;     
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;     
    &lt;span class=&quot;n&quot;&gt;__threadfence&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;     
    &lt;span class=&quot;n&quot;&gt;__syncthreads&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;     
    &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pAccumulator&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;     
    &lt;span class=&quot;n&quot;&gt;__syncthreads&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Let us review what this code is doing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The code is called for each work item (thread) in a work group (warp)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;*pAccumulator&lt;/em&gt; is where the final sum is stored summing across all work items&lt;/li&gt;
&lt;li&gt;The combination of &lt;em&gt;__threadfence()&lt;/em&gt; and &lt;em&gt;__syncthreads()&lt;/em&gt; guarantees memory consistency and synchronizes threads in the warp at the point of the call.&lt;/li&gt;
&lt;li&gt;The &lt;em&gt;__any_sync()&lt;/em&gt; call executes the block for those non-exited threads for which &lt;em&gt;&apos;value != 0&apos;&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The following &lt;em&gt;__shfl_sync&lt;/em&gt; calls do a tree-wise summing with the final sum available in the first thread in the warp in variable &lt;em&gt;value&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;em&gt;value&lt;/em&gt; is then added to the Accumulator atomically with &lt;em&gt;atomicAdd&lt;/em&gt; and finally all threads assign the sum to the &lt;em&gt;value&lt;/em&gt; variable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more details about these CUDA calls please refer to [2].&lt;/p&gt;

&lt;p&gt;The Compatibility tool was not able to automatically migrate this code with the following comments.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;/*
DPCT1023:40: The DPC++ sub-group does not support mask options for sycl::ext::oneapi::any_of.

DPCT1023:41: The DPC++ sub-group does not support mask options for shuffle.

DPCT1007:39: Migration of this CUDA API is not supported by the Intel(R) DPC++ Compatibility Tool.
*/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;However, SYCL supports a rich set of functions for performing reductions. In this case, the reduce_over_group() function in SYCL can be used to create the same functionality as the above code as follows.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;
#define REDUCEINTEGERSUM(value, pAccumulator)     
        int val = sycl::reduce_over_group(item_ct1.get_group(), value, std::plus&amp;lt;&amp;gt;());      
        *pAccumulator = val;     
        item_ct1.barrier(sycl::access::fence_space::local_space);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The &lt;em&gt;sycl::reduce_over_group&lt;/em&gt; is a collective function. The usage of this function simplifies the macro. The function takes the group, the value to be reduced, and the reduction operation which in this case is plus or summation. The function can adapt to varied sizes of work groups in SYCL and will use the best available optimizations available per the compiler and run-time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding the minimum energy
&lt;/h2&gt;

&lt;p&gt;In another part of the application, a block of CUDA threads perform shuffles to find the minimum of scores &lt;em&gt;v0&lt;/em&gt; and the corresponding identifier &lt;em&gt;k0&lt;/em&gt; of the run in the simulation that is the minimum score. The CUDA code calls a macro WARPMINIMUM2 (not shown) which in turn calls another macro WARPMINIMUMEXCHANGE (shown) with &lt;em&gt;mask&lt;/em&gt; set to 1, 2, 4, 8, and 16.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight cuda&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;#define WARPMINIMUMEXCHANGE(tgx, v0, k0, mask)     
&lt;/span&gt;    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;     
        &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v1&lt;/span&gt;    &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;     
        &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;k1&lt;/span&gt;      &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;k0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;     
        &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;otgx&lt;/span&gt;    &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tgx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;^&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mask&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;     
        &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v2&lt;/span&gt;    &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;__shfl_sync&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mh&quot;&gt;0xffffffff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;otgx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;     
        &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;k2&lt;/span&gt;      &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;__shfl_sync&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mh&quot;&gt;0xffffffff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;k0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;otgx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;     
        &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;flag&lt;/span&gt;    &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;v1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;^&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tgx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;otgx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;v1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;     
        &lt;span class=&quot;n&quot;&gt;k0&lt;/span&gt;          &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;flag&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;k1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;k2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;     
        &lt;span class=&quot;n&quot;&gt;v0&lt;/span&gt;          &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;flag&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;     
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The &lt;em&gt;__shfl_sync&lt;/em&gt; provides a way of moving a value from one thread to other threads in the warp in one instruction. In this code snippet &lt;em&gt;__shfl_sync&lt;/em&gt; gets the &lt;em&gt;v0&lt;/em&gt; or &lt;em&gt;k0&lt;/em&gt; value from the thread identified by the &lt;em&gt;otgx&lt;/em&gt; mask and saves it in &lt;em&gt;v2&lt;/em&gt;, &lt;em&gt;k2&lt;/em&gt; variables. We then compare &lt;em&gt;v1&lt;/em&gt; with &lt;em&gt;v2&lt;/em&gt; to set &lt;em&gt;flag&lt;/em&gt; and eventually store the minimum in &lt;em&gt;v0&lt;/em&gt; and the run identifier for this minimum in &lt;em&gt;k0&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Compatibility Tool could not completely migrate this code and included this comment as the reason it could not. However, Compatibility Tool correctly replaced the &lt;em&gt;__shfl_sync&lt;/em&gt; call with SYCL &lt;em&gt;shuffle&lt;/em&gt; call as shown in the below diff which shows the manual change.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;/*
DPCT1023:57: The DPC++ sub-group does not support mask options for shuffle.
*/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This comment indicates that the &lt;em&gt;shuffle&lt;/em&gt; call in SYCL does not use a mask as shown below.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight diff&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;#define&lt;/span&gt; WARPMINIMUMEXCHANGE(tgx, v0, k0, mask)     
        {     
                float v1 = v0;     
                int k1 = k0;     
                int otgx = tgx ^ mask;     
&lt;span class=&quot;gd&quot;&gt;-               float v2 = item_ct1.get_sub_group().shuffle(energy, otgx);     
&lt;/span&gt;&lt;span class=&quot;gi&quot;&gt;+               float v2 = item_ct1.get_sub_group().shuffle(v0, otgx);  
&lt;/span&gt;&lt;span class=&quot;gd&quot;&gt;-               int k2 = item_ct1.get_sub_group().shuffle(bestID, otgx);     
&lt;/span&gt;&lt;span class=&quot;gi&quot;&gt;+               int k2 = item_ct1.get_sub_group().shuffle(k0, otgx);     
&lt;/span&gt;                int flag = ((v1 &amp;lt; v2) ^ (tgx &amp;gt; otgx)) &amp;amp;&amp;amp; (v1 != v2);     
                k0 = flag ? k1 : k2;     
                v0 = flag ? v1 : v2;     
        }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In this case, Compatibility Tool performed incorrect variable substitution for &lt;em&gt;v0&lt;/em&gt; and &lt;em&gt;k0&lt;/em&gt; in the shuffle calls using &lt;em&gt;energy&lt;/em&gt; and &lt;em&gt;bestID&lt;/em&gt; variables from the caller function. We manually fixed this by replacing &lt;em&gt;energy&lt;/em&gt; with &lt;em&gt;v0&lt;/em&gt; and &lt;em&gt;bestID&lt;/em&gt; with &lt;em&gt;k0&lt;/em&gt;. This bug has been fixed in recent versions of the Compatibility Tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;In summary, reduction operations in CUDA applications may not be migrated correctly by the Compatibility Tool. Review the comments provided by the tool to understand if manual migration is necessary and what change might be required. A good understanding of the original CUDA code will then help to make manual changes to develop functionally correct code in SYCL.&lt;/p&gt;

&lt;p&gt;[1] &lt;a href=&quot;https://www.intel.com/content/www/us/en/docs/dpcpp-compatibility-tool/get-started-guide/2023-1/overview.html&quot;&gt;https://www.intel.com/content/www/us/en/docs/dpcpp-compatibility-tool/get-started-guide/2023-1/overview.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] &lt;a href=&quot;https://developer.nvidia.com/blog/using-cuda-warp-level-primitives/&quot;&gt;https://developer.nvidia.com/blog/using-cuda-warp-level-primitives/&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>IWOMP 2023</title>
   <link href="https://hpc.social/2023/iwomp-2023/"/>
   <updated>2023-07-17T21:35:36-06:00</updated>
   <id>https://hpc.social/2023/iwomp-2023</id>
   <content type="html">&lt;p&gt;Sept. 12-15, 2023  The 19th International Workshop on OpenMP - IWOMP is the premier forum to present and discuss issues, trends, recent research ideas, and results related to parallel programming with OpenMP.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/iwomp-2021-2/&quot; rel=&quot;nofollow&quot;&gt;IWOMP 2023&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Supercomputing 2023</title>
   <link href="https://hpc.social/2023/supercomputing-2023/"/>
   <updated>2023-07-17T18:22:52-06:00</updated>
   <id>https://hpc.social/2023/supercomputing-2023</id>
   <content type="html">&lt;p&gt;November 12-16, 2023&lt;br /&gt;
OpenMP will be in Denver for Supercomputing 2023 with four tutorials, a BOF, and more.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/sc23/&quot; rel=&quot;nofollow&quot;&gt;Supercomputing 2023&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Awesome oneAPI announced!</title>
   <link href="https://hpc.social/2023/awesome-oneapi-announced/"/>
   <updated>2023-06-22T20:37:53-06:00</updated>
   <id>https://hpc.social/2023/awesome-oneapi-announced-</id>
   <content type="html">&lt;p&gt;One of the ways that I feel we should engage when building community for&lt;br /&gt;
a relatively new ecosystem like oneAPI is the ability to showcase it&apos;s&lt;br /&gt;
capabilities. We know that AI especially generative AI have captured&lt;br /&gt;
the hearts and minds of many especially being able to build interesting&lt;br /&gt;
visuals using prompts. As well, GPU offloading, and learning algorithms&lt;br /&gt;
also have gained traction in this space as well.&lt;/p&gt;

&lt;p&gt;We talk about the &lt;a href=&quot;https://www.turing.com/kb/ultimate-guide-to-democratization-in-ai&quot;&gt;democratization of&lt;br /&gt;
AI&lt;/a&gt;&lt;br /&gt;
and its important in the emerging new chapter of AI. There is no better&lt;br /&gt;
time and greater need to build things on an open spec&apos;d platform where&lt;br /&gt;
it&apos;s clear what is going and out and that the conversations are public,&lt;br /&gt;
the decisions are public.&lt;/p&gt;

&lt;p&gt;An open spec&apos;d platform is no good if it doesn&apos;t show&lt;br /&gt;
&lt;em&gt;utility&lt;/em&gt;. Developers aren&apos;t going to consume your platform if you&lt;br /&gt;
cannot show viability, ease of use, and performance. So to show utility,&lt;br /&gt;
we worked on building a curated list of projects that show examples of&lt;br /&gt;
the utility of oneAPI, but also provide projects that are worth spending&lt;br /&gt;
time being part of. Some of these projects might surprise you in that&lt;br /&gt;
they use oneAPI like Blender.&lt;/p&gt;

&lt;p&gt;Some of you might have heard of the &apos;awesome&apos; lists&lt;br /&gt;
concept which are lists of github repos that are great&lt;br /&gt;
examples of using that subject matter. For instance, &lt;a href=&quot;https://github.com/bharathgs/Awesome-pytorch-list&quot;&gt;Awesome&lt;br /&gt;
Pytorch&lt;/a&gt; is a good&lt;br /&gt;
example of a list that shows cool projects that use pytorch. The list&lt;br /&gt;
is meant to be simple, developer friendly, and easy to navigate.&lt;/p&gt;

&lt;p&gt;We were inspired by these lists as they seem like a great way to find your&lt;br /&gt;
way to good projects. So we created our own &apos;awesome&apos; list of projects&lt;br /&gt;
for SYCL and oneAPI. So without further ado, feel free to check out&lt;br /&gt;
&lt;a href=&quot;https://github.com/oneapi-community/awesome-oneapi&quot;&gt;awesome oneAPI&lt;/a&gt;. We&lt;br /&gt;
would of course love feedback and if you have projects that might fit&lt;br /&gt;
this list, please fork and submit a PR! Questions are welcome, you can&lt;br /&gt;
reach me on mastodon at @&lt;a href=&quot;mailto:sri@mast.hpc.social&quot;&gt;sri@mast.hpc.social&lt;/a&gt; or if you&apos;re on dev.to -&lt;br /&gt;
just hit the comments!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The hpc.social project - talk at EasyBuild Users Meeting</title>
   <link href="https://hpc.social/2023/the-hpc-social-project-talk-at-easybuild-users-meeting/"/>
   <updated>2023-05-01T00:00:00-06:00</updated>
   <id>https://hpc.social/2023/the-hpc-social-project-talk-at-easybuild-users-meeting</id>
   <content type="html">&lt;p&gt;In case you missed it, &lt;a href=&quot;https://github.com/alansill&quot;&gt;Alan&lt;/a&gt; and &lt;a href=&quot;https://github.com/vsoch&quot;&gt;vsoch&lt;/a&gt;
presented the hpc.social at the annual EasyBuild User’s meeting:&lt;/p&gt;

&lt;p&gt;In this talk they share the origins of the project, the current project, and
prompt for questions or ideas about desire for the future. As a result of the talk,
the &lt;a href=&quot;https://hpc.social/events/&quot;&gt;hpc.social events&lt;/a&gt; page has already been refactored
to properly show the HPC Huddle community feed, and other communities that have ical
feeds are welcome to contribute their event feeds there.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>OpenMP® ARB adds new member Samsung</title>
   <link href="https://hpc.social/2023/openmp-arb-adds-new-member-samsung/"/>
   <updated>2023-04-13T12:00:36-06:00</updated>
   <id>https://hpc.social/2023/openmp-arb-adds-new-member-samsung</id>
   <content type="html">&lt;p&gt;The OpenMP Architecture Review Board (ARB) today announced that Samsung has joined the board.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/press-release/openmp-arb-adds-new-member-samsung/&quot; rel=&quot;nofollow&quot;&gt;OpenMP® ARB adds new member Samsung&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Using oneAPI AI Toolkits from Intel and Accenture Part 2</title>
   <link href="https://hpc.social/2023/using-oneapi-ai-toolkits-from-intel-and-accenture-part-2/"/>
   <updated>2023-03-31T23:21:33-06:00</updated>
   <id>https://hpc.social/2023/using-oneapi-ai-toolkits-from-intel-and-accenture-part-2</id>
   <content type="html">&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This is part 2 of our blog series. These posts are really about inspiring others to think of cool projects to do with oneAPI. In the last blog post, we discussed several toolkits that I thought were interesting. If someone produced an idea that uses those toolkits – I would love to know!!&lt;br /&gt;
In this blog post, I want to focus on two other AI toolkits and how to use them. &lt;br /&gt;
There is one other aspect that we should consider when looking at these toolkits: what do you believe might be unintended consequences?? As an exercise, I am going to go over these toolkits, but I would love to hear what you might believe are unintended consequences that have the potential to be overlooked. &lt;/p&gt;

&lt;h2&gt;
  
  
  Personalized Retail Experiences with Enhanced Customer Segmentation
&lt;/h2&gt;

&lt;p&gt;Accenture has over 30 toolkits to showcase oneAPI, with more to come.  In this post, I am going to look at this idea of using AI to personalize your shopping experience. I think all of us who do any kind of online shopping know the importance of providing a personalized shopping experience. First, we must understand how one might implement a personal shopping experience. &lt;br /&gt;
Today, retailers have an incredible amount of data at their disposal. The analytics market is worth up to $20 billion around the world and is growing at a 19.3 percent Compound Annual Growth Rate (CAGR). Retailers are eager to understand customer behavior so that they can provide a better shopping experience and thus drive brand loyalty. &lt;/p&gt;

&lt;p&gt;To access the AI toolkit clone the github repository:&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ git clone https://github.com/oneapi-src/customer-segmentation&lt;/code&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;The reference kit will show how to analyze customer purchasing data and segment it into clusters based on customer behavior. It will also show you how to optimize the reference solution using the Intel Scikit-Learn extension.&lt;/p&gt;

&lt;p&gt;The reference example uses an experimental dataset. The dataset is a set of 500k transactions covering 4000 customers from a UK multinational online retailer over a period of a year. The dataset is fed into &lt;a href=&quot;https://en.wikipedia.org/wiki/K-means_clustering&quot;&gt;KMeans&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/DBSCAN&quot;&gt;DBSCAN&lt;/a&gt; algorithms to label cluster based on different customer behaviors.&lt;/p&gt;

&lt;p&gt;Try it out and send me some feedback. Also, keep in mind the challenge of what could go wrong. (disclaimer: I don’t know myself - I’m curious to hear theories)&lt;/p&gt;

&lt;h2&gt;
  
  
  Faster session Notes with Speech-to-Text AI for Healthcare Providers
&lt;/h2&gt;

&lt;p&gt;My second example is going back to healthcare. Always a fun one. The same challenge as in the previous one.&lt;/p&gt;

&lt;p&gt;The premise for this is that mental health providers are required to document their sessions using progress notes. These recorded sessions then need to be transcribed into written notes, and be stored for later reference.&lt;/p&gt;

&lt;p&gt;Managing these notes can take quite a bit of time. The idea, then, is to take these recorded notes and feed them to a speech-to-text AI algorithm and provide a summary. This summary can then be used to coordinate care, creating a paper trail, compliance, and keeping track of the state of the client.&lt;/p&gt;

&lt;p&gt;By reducing the book keeping, a therapist would have more time for their patients or the capacity to see more patients. Given the shortage of mental health professionals, being able to be more efficient and allowing more “human”contact  time will help mental health professionals provide their clients with better care.&lt;/p&gt;

&lt;p&gt;You can find the code for this implementation at:&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ git clone  https://github.com/oneapi-src/ai-transcribe&lt;/code&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;The high level overview of this implementation is something like this. The conversion from speech to text is achieved by using a sequence-to-sequence framework called Fairseq. Sequence-to-sequence modeling is a type of machine learning that is commonly built to create summaries, text translations and so on. It was initially conceived by Google. &lt;a href=&quot;https://github.com/facebookresearch/fairseq&quot;&gt;Fairseq&lt;/a&gt; is an open source  sequence-to-sequence framework from Facebook.&lt;/p&gt;

&lt;p&gt;The process is described like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Take your dataset of unstructured audio samples&lt;/li&gt;
&lt;li&gt;Run it through a data preprocessing using Fairseq modeling&lt;/li&gt;
&lt;li&gt;Using &lt;a href=&quot;https://www.geeksforgeeks.org/generative-adversarial-network-gan/&quot;&gt;GAN&lt;/a&gt; you create a trained model using both the training data and the pre-processing data.&lt;/li&gt;
&lt;li&gt;Apply &lt;a href=&quot;https://www.datacamp.com/blog/what-is-machine-learning-inference&quot;&gt;inference&lt;/a&gt; to generate the text.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think one of the more interesting parts of this pipeline is the GAN - which is described as two algorithms: one as a generator and the other as a test. The two work against each other until they both end up with the same dataset that, ostensibly, is accurate.&lt;/p&gt;

&lt;p&gt;One other piece that is missing as part of training the algorithm is a database of English text corpus data. This database contains speech audio files and text transcription. It is used to create a relationship between an audio signal and phonemes as part of speech recognition.&lt;/p&gt;

&lt;p&gt;Where GAN comes in is that a neural network is trained to generate what it thinks are the representations of the phonemes as opposed to the real world data obtained from the corpus data. The other neural network is trained on the corpus data and acts as the validator - as the two neural networks work with each other - the generator portion of the neural network will finally produce the results as expected by the other neural network.&lt;/p&gt;

&lt;p&gt;It is through this that we can validate that the output is correct.&lt;/p&gt;

&lt;p&gt;The entire software to do this is all open source - I would love to hear from people who have tried it and share what their results were!&lt;/p&gt;

&lt;p&gt;I think it would be interesting to train this with humans to determine how accurate it is so you can fully train the corpus and generator algorithm for better results.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;I’ve reviewed two Accenture toolkits that demonstrate how AI can be used practically with real examples. Being a newcomer in this area, there is so much that I don’t know. Ironically, I use chatGPT to help explain some of the salient bits about how GAN works vis-a-vis audio data to really understand what was happening, especially in regards to mapping with words and phonemes.&lt;/p&gt;

&lt;p&gt;Looking forward to people’s responses to this post and enjoying a great conversation about AI, its potential uses and applications by using real world examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  Call to Action
&lt;/h2&gt;

&lt;p&gt;Has this blog post inspired you to write something based on the oneAPI AI toolkits? Let me know - I would love to know how it works out for you!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Training AI with oneAPI part 1</title>
   <link href="https://hpc.social/2023/training-ai-with-oneapi-part-1/"/>
   <updated>2023-03-30T05:54:13-06:00</updated>
   <id>https://hpc.social/2023/training-ai-with-oneapi-part-1</id>
   <content type="html">&lt;h2&gt;
  
  
  oneAPI and AI
&lt;/h2&gt;

&lt;p&gt;My last few blog posts were pretty fun to write. I&apos;m going to change subjects today and talk about AI. We&apos;ll learn about what resources are around for those of you who know the particulars about AI and want to start a project, but are interested in delving deeper into the capabilities. &lt;/p&gt;

&lt;h2&gt;
  
  
  Accenture and Intel
&lt;/h2&gt;

&lt;p&gt;It should be no surprise that Intel is the largest stakeholder in oneAPI, if you&apos;ve done any kind of research on oneAPI at all. Intel&apos;s interest is creating a performative software stack that runs well, not just on Intel platforms, but on any platform. oneAPI&apos;s purpose is to be able to take advantage of all the hardware you have on your system and not just the GPU or CPU. &lt;/p&gt;

&lt;p&gt;Let&apos;s talk about oneAPI and the AI toolkits that have been released over the past 8 months or so. Intel worked with Accenture to release some open source &quot;recipes&quot; for AI. If you&apos;ve always wanted to delve into AI but have problems on starting a project - this is a great place to ponder what kind of a project you&apos;d want to write based on what problems it solves. These AI kits are a one-stop shop of everything you&apos;d need to get started, including the training data! &lt;/p&gt;

&lt;h2&gt;
  
  
  oneAPI AI Toolkits
&lt;/h2&gt;

&lt;p&gt;The Intel and Accenture tool kits are all released as open source and can be found on github. The tool kits span a number of industries from telecommunications to health &amp;amp; life sciences to retail and more. They provide a great showcase on how AI is being used today in different industries and what problems they are solving. &lt;/p&gt;

&lt;p&gt;The best part of these tool kits is how comprehensive they are. You&apos;ll have everything you need to get the toolkit working smoothly, including the source code and training data. &lt;/p&gt;

&lt;p&gt;In this blog post, I&apos;ll focus on two reference kits and explain how they work. The github page for them is fairly self-explanatory but it&apos;s still worth going over them. &lt;/p&gt;

&lt;h2&gt;
  
  
  Disease Prediction
&lt;/h2&gt;

&lt;p&gt;The first reference kit is &lt;a href=&quot;https://github.com/oneapi-src/disease-prediction&quot;&gt;disease prediction&lt;/a&gt;. This toolkit will look through patient records and look for a possible disease indication. The interesting part of this is the use of NLP (Natural Language Processing) to sort through unstructured data located in patient records. &lt;/p&gt;

&lt;p&gt;NLP has been used by healthcare for quite some time - but only now has there been significant investment by healthcare payers. NLP can be used in other areas as well. For instance, understanding what kind of dosage of medication that a patient should take based on their particular genetics! By training on the data of millions of patients, one could really understand the unique properties of the health of individuals and act accordingly. &lt;/p&gt;

&lt;p&gt;There is also an interesting social change - the ability to objectively look at patients and their needs, especially women&apos;s health needs, means that we can create prediction models based on symptoms that can be followed up on. It&apos;s possible to reduce bias in care through such a system - as long as the AI employed is not biased. &lt;/p&gt;

&lt;p&gt;To actually pore through patient records, you&apos;d need an NLP that is already pre-trained on reading words. Normally, you&apos;d have to have an algorithm and then use a large number of data sets to get to a point where you&apos;d be able to read natural language. This is why they use the &lt;a href=&quot;https://en.wikipedia.org/wiki/BERT_(language_model)&quot;&gt;BERT&lt;/a&gt; language model. More accurately, a specialized form of BERT called clinicalBERT which includes clinical jargon and medical references. &lt;/p&gt;

&lt;p&gt;If you&apos;ve followed the text of the github repo - the process is pretty simple.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You have the clinicalBERT language model which you would use to train your AI using the data from clinical records. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The language model then creates an association with symptoms to predicted disease probabilities. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now you have a model that you can apply to any set of symptoms with an output of predicted probabilities. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The process of applying data to a model is called &lt;em&gt;model inference&lt;/em&gt; &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We won&apos;t go through the process of building the software and training it here. The &lt;a href=&quot;https://github.com/oneapi-src/disease-prediction&quot;&gt;repo&lt;/a&gt; has some clear steps in how to train your model. &lt;/p&gt;

&lt;p&gt;The prerequisites require Python and PyTorch v1.11. The repo also goes on to describe how to optionally use the Intel extensions for Python for better performance. I&apos;d like to also add that these extensions exist temporarily while the process of upstreaming to main line python continues. Rather than wait, the community can enjoy the optimizations now, rather than at some future date. &lt;/p&gt;

&lt;p&gt;There are some instructions to do some bench marking - if you&apos;re interested in seeing how well it works on various other platforms. &lt;/p&gt;

&lt;h2&gt;
  
  
  Increase Mortgage Loan Default Risk Prediction Speed
&lt;/h2&gt;

&lt;p&gt;Next, I&apos;ll focus on banking and loans. Banks use AI prediction models to determine risk. This is an interesting case study and I&apos;d like to see some comments about this particular scenario because I expect that some of you will have opinions! &lt;/p&gt;

&lt;p&gt;The problem statement here is that in Q4 2021, mortgage delinquencies were 4.65% and outstanding balances of unpaid principals was approximately $2.6 trillion dollars. The average time to complete a foreclosure process was 941 days, leading to a result of approximately $7.6 billion in foreclosure costs alone. &lt;/p&gt;

&lt;p&gt;What this kit offers is the ability to manage default risk, handle larger data sets, and reduce the underwriting wait time. The kit will improve customer service quality and speed up loan processing. &lt;/p&gt;

&lt;p&gt;So, let&apos;s take a look at the github repo for &lt;a href=&quot;https://github.com/oneapi-src/loan-default-risk-prediction&quot;&gt;Loan Default Risk Prediction using XGBoost&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;This reference solution follows a similar idea. &lt;a href=&quot;https://en.wikipedia.org/wiki/XGBoost&quot;&gt;XGBoost&lt;/a&gt; XBoost is part of a family of machine learning algorithms that uses decision trees. Specifically, XGBoost uses &lt;a href=&quot;https://en.wikipedia.org/wiki/Gradient_boosting&quot;&gt;gradient boosting&lt;/a&gt; which instead of using one decision tree, it uses an ensemble of &lt;a href=&quot;https://en.wikipedia.org/wiki/Decision_tree_learning&quot;&gt;decision trees&lt;/a&gt;. A decision tree is nothing more than a model that tries to make a prediction basted on a selection of data. &lt;/p&gt;

&lt;p&gt;With that background in mind, you can look at the intended data set that is being used with the kind of parameters. &lt;/p&gt;

&lt;p&gt;To make it even more interesting, a modification was made to the data set by adding synthetic bias_variable. The idea is to add bias value for each loan - the value is generated randomly. The reason is to demonstrate bias between a protected class and a privileged class. It isn&apos;t used as part of training the model. &lt;/p&gt;

&lt;p&gt;Another thing that&apos;s wonderful about this AI toolkit is how it demonstrates bias model. The section about &quot;Fairness Evaluation&quot; goes into some length about whether the algorithm is fair. This is an important consideration when training AI models and is an area of active research. While AI can be a powerful tool, it can also be a tool that can augment inequalities and inequities and, when used in decision making, can exacerbate and preserve these existing inequalities. &lt;/p&gt;

&lt;p&gt;To use the toolkit, you&apos;ll need Python v3.9 and XGBoost v0.81 and clone the repo:&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone https://www.github.com/oneapi-src/loan-default-risk-prediction&lt;/code&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;use the bash script to set up the environment. &lt;/p&gt;

&lt;p&gt;Follow the instructions in the repo on how to get the model running. &lt;/p&gt;

&lt;p&gt;I will leave it up to the reader to run this model. Specifically run it many times and observe the fairness metric and see how that changes. &lt;/p&gt;

&lt;h2&gt;
  
  
  Call to Action
&lt;/h2&gt;

&lt;p&gt;What do you think about the ease of using these tool kits so far? I would love to hear your thoughts and see if the results were intriguing to you. The bias factor in the last AI toolkit is something that intrigues me - is the model of fairness really fair? How would you change any of these models? &lt;/p&gt;

&lt;p&gt;Hit me up on the comments, let&apos;s have a conversation! &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>SiFive joins the OpenMP® effort</title>
   <link href="https://hpc.social/2023/sifive-joins-the-openmp-effort/"/>
   <updated>2023-03-14T09:00:24-06:00</updated>
   <id>https://hpc.social/2023/sifive-joins-the-openmp-effort</id>
   <content type="html">&lt;p&gt;SiFive joins the OpenMP Architecture Review Board (ARB), a group of leading hardware vendors, software vendors and research organizations, in creating the standard for the most popular shared-memory parallel programming model in use today.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/press-release/sifive-joins-the-openmp-effort/&quot; rel=&quot;nofollow&quot;&gt;SiFive joins the OpenMP® effort&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Embedded Systems and the OpenMP® API</title>
   <link href="https://hpc.social/2023/embedded-systems-and-the-openmp-api/"/>
   <updated>2023-03-14T09:00:22-06:00</updated>
   <id>https://hpc.social/2023/embedded-systems-and-the-openmp-api</id>
   <content type="html">&lt;p&gt;Embedded systems are used in fields as diverse as telecommunication systems, robotics, automotive, and medical applications. They are very heterogeneous and consist of multicore systems and accelerators.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/blog/embedded-systems-and-the-openmp-api/&quot; rel=&quot;nofollow&quot;&gt;Embedded Systems and the OpenMP® API&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Modern Software Development Tools and oneAPI Part 3</title>
   <link href="https://hpc.social/2023/modern-software-development-tools-and-oneapi-part-3/"/>
   <updated>2023-02-28T02:19:25-07:00</updated>
   <id>https://hpc.social/2023/modern-software-development-tools-and-oneapi-part-3</id>
   <content type="html">&lt;p&gt;This is the third part in the series. Part 1 is &lt;a href=&quot;https://dev.to/oneapi/modern-software-development-tools-and-oneapi-part-1-40km&quot;&gt;here&lt;/a&gt; and Part 2 is &lt;a href=&quot;https://dev.to/oneapi/modern-software-development-tools-and-oneapi-part-2-4bjp&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Welcome to the third, and likely the final, post in this blog series! To recap, in the last blog post we talked about build systems particularly &lt;a href=&quot;https://mesonbuild.com/&quot;&gt;meson&lt;/a&gt; Before that, we talked about building a container that contains the pure open source elements of the oneAPI developer environment and use it to build a simple oneAPI SYCL program.&lt;/p&gt;

&lt;p&gt;In this post, we&apos;re going to take our key learnings from the last two blog posts and use them to build a true user-friendly experience where you can write code using a modern IDE and compile and run them inside a container like you might be used to on other platforms like Windows and MacOS.&lt;/p&gt;

&lt;p&gt;First, allow us to introduce you to this modern IDE - &apos;GNOME Builder&apos;. &lt;a href=&quot;https://apps.gnome.org/app/org.gnome.Builder/&quot;&gt;GNOME Builder&lt;/a&gt; is an IDE developed for &lt;a href=&quot;https://www.gnome.org/&quot;&gt;GNOME&lt;/a&gt; desktop. It is integrated to be able to write GNOME and GTK applications easily with all the modern features one would expect from a IDE, and then some.&lt;/p&gt;

&lt;p&gt;It has an impressive set of features - the author, Christian Hergert, wrote it because he was [frustrated (&lt;a href=&quot;https://foundation.gnome.org/2015/01/09/interview-with-christian-hergert-about-builder-an-ide-for-gnome-2/&quot;&gt;https://foundation.gnome.org/2015/01/09/interview-with-christian-hergert-about-builder-an-ide-for-gnome-2/&lt;/a&gt;)  with the state of IDEs on the Linux platform. GNOME Builder is not just an IDE, but a complete showcase of what a non-trivial application written in GNOME can do.&lt;/p&gt;

&lt;p&gt;This blog post is about oneAPI - why use an IDE that is optimized for using GNOME to build applications?&lt;/p&gt;

&lt;p&gt;Great question. The desktop ecosystem (GNOME and &lt;a href=&quot;https://kde.org/&quot;&gt;KDE&lt;/a&gt; has been focused on distribution of apps through a container technology called &lt;a href=&quot;https://flatpak.org&quot;&gt;flatpak&lt;/a&gt;. Flatpak allows you to have an runtime that contains everything to run a GNOME (or KDE) application. There is an associated SDK that contains all the tools needed to build the application. GNOME Builder is the first IDE that integrates this idea of containerized applications into the user experience. With Builder, you only need the application - you don&apos;t need a compiler, profiler, or development libraries - it integrates all that inside a container. This means that you don&apos;t need to think about how to setup a developer environment for any GNOME application.&lt;/p&gt;

&lt;p&gt;The containers in the past have been flatpak based containers. But it turns out that you can leverage GNOME Builder to use any container created by podman, toolbox, or distrobox.&lt;/p&gt;

&lt;p&gt;In essence, the first blog post in this series mimicked what flatpak already does: which is a container that contains everything you need to build an oneAPI application/program instead of a GNOME one.&lt;/p&gt;

&lt;p&gt;In a bit of circularity that you might find amusing - we will use flatpak to get the application and then use another comtainer to build our sample application that uses Meson.&lt;/p&gt;

&lt;p&gt;If you have not read the first two blog posts, this might be a good time to stop and read those first because we&apos;ll be using the container we created in the first blog post and the build system we used in the second blog post. It&apos;s also important  you  use a distro like Fedora or openSUSE that supports flatpak out of the box.&lt;/p&gt;

&lt;p&gt;With the pre-requisites out of the way, let&apos;s first start by installing GNOME Builder. You can use any desktop you want, but I will be using GNOME here as it is what I usually run, please translate accordingly.&lt;/p&gt;

&lt;p&gt;Here are the steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First make sure you add the flathub flatpak respository:
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;$  flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo&lt;/code&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install GNOME Builder:
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;$ flatpak install flathub org.gnome.Builder&lt;/code&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run GNOME builder either through your desktop launch options. For GNOME, hit the meta key (usually Windows key) and then type in &quot;Builder&quot; - GNOME Builder should be your first,  and likely only, option. You can also run it from the command line:,
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;$ flatpak run org.gnome.Builder&lt;/code&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;You should now have GNOME Builder running on your machine!&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a Project
&lt;/h2&gt;

&lt;p&gt;The first step is to create a project.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;article-body-image-wrapper&quot; href=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--AbJZDlQG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pqle4qghdklomilmrz04.png&quot;&gt;&lt;img alt=&quot;Image description&quot; height=&quot;723&quot; src=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--AbJZDlQG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pqle4qghdklomilmrz04.png&quot; width=&quot;880&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select &quot;Create New Project...&quot; &lt;/p&gt;

&lt;p&gt;You will be presented with a new screen where you put in the details for the project. Let&apos;s call our project &quot;oneapi-simple&quot;.&lt;/p&gt;

&lt;p&gt;Next we need to select the application-id. Application-ids are generally a reverse DNS type of string usually based on a hostname. I have my own domain, so I usually use that. But you can use whateer you like. In this case, I am going to use me.ramkrishna.oneapisimple.&lt;/p&gt;

&lt;p&gt;We want to use C++, so under Language change it to C++. Note that the Template section has now changed to &apos;Command Line Tool&apos; Which is exactly what we want.&lt;/p&gt;

&lt;p&gt;Here is a filled-out screenshot of the window from Builder:&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;article-body-image-wrapper&quot; href=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--X-xgaUOr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dx974pybl1jmypllto76.png&quot;&gt;&lt;img alt=&quot;Image description&quot; height=&quot;728&quot; src=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--X-xgaUOr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dx974pybl1jmypllto76.png&quot; width=&quot;880&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We now create the project! Selected the &quot;Create Project&quot; and we are now ready to continue.&lt;/p&gt;

&lt;p&gt;GNOME Builder has two sections - the sidebar and the main editor window. The side bar will have our files and so click on &quot;src&quot; and you should see two files - main.cpp and meson.buid.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup the build system
&lt;/h2&gt;

&lt;p&gt;You will notice that the project is already set up to use meson by default. Meson is the preferred build system for GNOME. Meson was created by someone from the GNOME community and thus is already well trusted. &lt;br /&gt;
In the application space, meson has proven to be quite popular replacement for autotools.&lt;/p&gt;

&lt;p&gt;Let&apos;s leave main.cpp alone for now, and focus on meson.build. If you click on meson.build, you&apos;ll see that it looks like this:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;oneapi_simple_sources = [
  &apos;main.cpp&apos;,
]

oneapi_simple_deps = [
]

executable(&apos;oneapi-simple&apos;, oneapi_simple_sources,
  dependencies: oneapi_simple_deps,
  install: true,
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This meson.build is set up to compile a generic project with the g++ compiler. So that&apos;s not going to work. If you read the previous blog post, we went through what we would need to make it work with the SYCL compiler.&lt;/p&gt;

&lt;p&gt;Replace the contents of meson.build with this:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;simple_oneapi_sources = files(&apos;main.cpp&apos;)

simple_oneapi_deps = [
]

executable(&apos;simple-oneapi&apos;, simple_oneapi_sources,
  link_args:&apos;-fsycl&apos;,
  cpp_args:&apos;-fsycl&apos;,
  dependencies: simple_oneapi_deps,
  install: true, install_dir: &apos;/var/home/sri/Projects/oneapi-simple/bin&apos;
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;For the SYCL compiler, we need some extra linker flags. We&apos;re actually missing something even more important and that&apos;s the setup for the compiler itself!&lt;/p&gt;

&lt;p&gt;Click on the &apos;meson.build&apos; file in the top level - which should be right next to the &apos;COPYING&apos; file. You&apos;ll notice that every time you open a new file, it creates a new tab in the editor view. You can easily switch to each file by clicking on the tab.&lt;/p&gt;

&lt;p&gt;Let&apos;s take a look at it. It should look like this.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;project(&apos;oneapi-simple&apos;, [&apos;cpp&apos;, &apos;c&apos;],
          version: &apos;0.1.0&apos;,
    meson_version: &apos;&amp;gt;= 0.59.0&apos;,
  default_options: [ &apos;warning_level=2&apos;, &apos;werror=false&apos;, &apos;cpp_std=gnu++2a&apos;, ],
)

subdir(&apos;src&apos;)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The important part here is that we are identifying that this project is C++. All of this is correct and there is nothing more to be done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set up our source
&lt;/h2&gt;

&lt;p&gt;Now, that we have the build set up. It&apos;s time to replace the code in main.cpp. Currently, the code looks like:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

int main() {
    std::cout &amp;lt;&amp;lt; &quot;Hello World\n&quot;;

    return 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We are going to replace it with:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;#include &amp;lt;sycl/sycl.hpp&amp;gt;

int main() {
  // Creating buffer of 4 ints to be used inside the kernel code
  sycl::buffer&amp;lt;sycl::cl_int, 1&amp;gt; Buffer(4);

  // Creating SYCL queue
  sycl::queue Queue;

  // Size of index space for kernel
  sycl::range&amp;lt;1&amp;gt; NumOfWorkItems{Buffer.size()};

  // Submitting command group(work) to queue
  Queue.submit([&amp;amp;](sycl::handler &amp;amp;cgh) {
    // Getting write only access to the buffer on a device
    auto Accessor = Buffer.get_access&amp;lt;sycl::access::mode::write&amp;gt;(cgh);
    // Executing kernel
    cgh.parallel_for&amp;lt;class FillBuffer&amp;gt;(
        NumOfWorkItems, [=](sycl::id&amp;lt;1&amp;gt; WIid) {
          // Fill buffer with indexes
          Accessor[WIid] = (sycl::cl_int)WIid.get(0);
        });
  });

  // Getting read only access to the buffer on the host.
  // Implicit barrier waiting for queue to complete the work.
  const auto HostAccessor = Buffer.get_access&amp;lt;sycl::access::mode::read&amp;gt;();

  // Check the results
  bool MismatchFound = false;
  for (size_t I = 0; I &amp;lt; Buffer.size(); ++I) {
    if (HostAccessor[I] != I) {
      std::cout &amp;lt;&amp;lt; &quot;The result is incorrect for element: &quot; &amp;lt;&amp;lt; I
                &amp;lt;&amp;lt; &quot; , expected: &quot; &amp;lt;&amp;lt; I &amp;lt;&amp;lt; &quot; , got: &quot; &amp;lt;&amp;lt; HostAccessor[I]
                &amp;lt;&amp;lt; std::endl;
      MismatchFound = true;
    }
  }

  if (!MismatchFound) {
    std::cout &amp;lt;&amp;lt; &quot;The results are correct!&quot; &amp;lt;&amp;lt; std::endl;
  }

  return MismatchFound;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;OK - now we have everything. But we can&apos;t quite compile yet. Right now, if you tried to compile this - it won&apos;t work. The reason is, the build is currently set up for native build&apos;. Which means it will try to use the toolchain on the host system. On the host system, we don&apos;t have any of the oneAPI libraries or the SYCL compiler. So it won&apos;t find anything. Everything we wanted is encapsulated in a container.&lt;/p&gt;

&lt;p&gt;This is why GNOME Builder is especially suited to do this exercise on Linux because you set the run and build environment to any podman (or docker) container.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set the build and run environment to our SYCL container.
&lt;/h2&gt;

&lt;p&gt;Refer to the&lt;br /&gt;
&lt;a href=&quot;https://dev.to/oneapi/modern-software-development-tools-and-oneapi-part-1-40km&quot;&gt;first&lt;/a&gt;&lt;br /&gt;
blog post on how to setup the build and run container.&lt;/p&gt;

&lt;p&gt;In that blog post, we named our container - &apos;oneapi&apos;. It should container the SYCL compiler that we&lt;br /&gt;
built and all the accompanying libraries to build our simple SYCL program.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;article-body-image-wrapper&quot; href=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--f-dAEe_z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/clukhlkv1bb36bmbet59.png&quot;&gt;&lt;img alt=&quot;Image description&quot; height=&quot;616&quot; src=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--f-dAEe_z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/clukhlkv1bb36bmbet59.png&quot; width=&quot;880&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To set the build type - we need to move our cursor to the widget at the top in the center next to the&lt;br /&gt;
hammer icon. Click on the down arrow, and then select &apos;Configure Project&apos;, there is a keyboard shortcut&lt;br /&gt;
&quot;alt+,&quot; (hold alt and then comma) and the window should pop up.&lt;/p&gt;

&lt;p&gt;Select &quot;Default&quot; at the bottom of the dialog box.&lt;/p&gt;

&lt;p&gt;Under Build Environment, you want to change that from &apos;Host Operating System&apos; to &apos;oneapi&apos;. If &apos;oneapi&apos;,&lt;br /&gt;
does not appear on your list of choices then you have not created the container using distrobox. You&lt;br /&gt;
should refer to the first blog post in the series for testing.&lt;/p&gt;

&lt;p&gt;At this point, we have our build system using our container - but we aren&apos;t done yet. The problem now is&lt;br /&gt;
that the build system will explicitly use c++ instead of the SYCL compiler. To override using the native toolchain, we generally use an environmental variable. This is generally not recommended but for sake of simplicity, we will use it for now. In another blog post, we can revisit the issue. For the impatient, it requires that you use the native file feature of meson - see &lt;a href=&quot;https://mesonbuild.com/Machine-files.html&quot;&gt;https://mesonbuild.com/Machine-files.html&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For now, we will use Builder&apos;s ability to set shell environment variables to set the CXX and other&lt;br /&gt;
critical environment variables.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;article-body-image-wrapper&quot; href=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--IN7cA_Nq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uv0t38nizjris20yn15n.png&quot;&gt;&lt;img alt=&quot;Image description&quot; height=&quot;261&quot; src=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--IN7cA_Nq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uv0t38nizjris20yn15n.png&quot; width=&quot;880&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on &apos;Add Variables&apos; and set the following key value pairs (be sure to replace the paths to the&lt;br /&gt;
correct paths):&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;DPCPP_HOME=/var/home/your_login/src/dpcplusplus
PATH=/usr/bin:/usr/sbin:/usr/local/bin:/home/yourlogin/bin:/home/yourlogin/.local/bin:/var/home/yourlogin/src/dpcplusplus/llvm/build/bin
LD_LIBRARY_PATH=/var/home/yourlogin/src/dpcplusplus/llvm/build/lib
CC=clang
CXX=clang++
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Your config should look like this:&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;article-body-image-wrapper&quot; href=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--WEj27cVk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hu8gd5dcfeqwplid9bfs.png&quot;&gt;&lt;img alt=&quot;Image description&quot; height=&quot;559&quot; src=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--WEj27cVk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hu8gd5dcfeqwplid9bfs.png&quot; width=&quot;880&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The environment variables that are set are mirrored from the environment variables we had to set when we set up a simple oneapi codebase inside the container in the first blog post. We are merely recreating it.&lt;/p&gt;

&lt;p&gt;At this point, you can click on the &quot;hammer&quot; icon and GNOME Builder should proceed to properly build the source code. It will give two warnings that you can safely ignore at this point.&lt;/p&gt;

&lt;p&gt;To execute the program, you need to hit the right pointing triangle(it looks like a &quot;play&quot; button) and it will try to execute it.&lt;/p&gt;

&lt;p&gt;You&apos;ll note that it was not able to execute. &lt;/p&gt;

&lt;p&gt;That&apos;s becasue when it is running it doesn&apos;t set the LD_LIBRARY_PATH&lt;br /&gt;
inside the container. Since build environment is using non-standard paths we have to do a trick to set everything up so that it can find the libraries it needs.&lt;/p&gt;

&lt;p&gt;So, to mitigate that we need to create a wrapper script that will set the LD_LIBRARY_PATH before executing. In another blog post, we will work on something a litte more clever. This will do for now.&lt;/p&gt;

&lt;p&gt;Let&apos;s call the script &apos;run-oneapi.sh&apos;. Here is the very simple code for it:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/sh&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/var/home/sri/src/dpcplusplus/llvm/build/lib&quot;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt; /var/home/sri/Projects/oneapi-simple/bin/oneapi-simple
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Install it somewhere within your PATH environment. I have mine in ~/Projects/oneapi-simple/bin where the&lt;br /&gt;
run time binary gets built and installed.&lt;/p&gt;

&lt;p&gt;Once you have that, you need to let builder know how to run it.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;article-body-image-wrapper&quot; href=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--eHBmLO5f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6zi26imjcw56opdh30cl.png&quot;&gt;&lt;img alt=&quot;Image description&quot; height=&quot;616&quot; src=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--eHBmLO5f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6zi26imjcw56opdh30cl.png&quot; width=&quot;880&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first step is to go back to the build configuration menu, use the keyboard shortcut ALT-, and then select &quot;Command&quot; on the far left column.&lt;/p&gt;

&lt;p&gt;Select &quot;Create Command&quot; and then fill in the dialog box like this:&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;article-body-image-wrapper&quot; href=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--tPf9uj8X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dobm6erppuvh8pw03s1n.png&quot;&gt;&lt;img alt=&quot;Image description&quot; height=&quot;880&quot; src=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--tPf9uj8X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dobm6erppuvh8pw03s1n.png&quot; width=&quot;880&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you&apos;ve added that, you are ready to configure the run command to use this script.&lt;/p&gt;

&lt;p&gt;&lt;a class=&quot;article-body-image-wrapper&quot; href=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--NmukZYYg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v4b84d8z97wb2ni19yec.png&quot;&gt;&lt;img alt=&quot;Image description&quot; height=&quot;616&quot; src=&quot;https://res.cloudinary.com/practicaldev/image/fetch/s--NmukZYYg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v4b84d8z97wb2ni19yec.png&quot; width=&quot;880&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on &apos;Applications&apos;&lt;/p&gt;

&lt;p&gt;On the first line you&apos;ll see &quot;Run Command&quot; which will be set to &quot;Automatically Discover&quot;. Use the drop down list to select &quot;Run-oneapi&quot;.&lt;/p&gt;

&lt;p&gt;Close the dialog box, and you will now have setup Builder to build and run. Since, everything is already cached. You will need to re-run the build.&lt;/p&gt;

&lt;p&gt;Select the drop down list next to the hammer icon and select &quot;Rebuild&quot;. This will rebuild the source from scratch and clear out all the cache.&lt;/p&gt;

&lt;p&gt;You will now be setup to run.&lt;/p&gt;

&lt;p&gt;Click on the play icon next to the hammer icon and it should now properly build and run.&lt;/p&gt;

&lt;p&gt;Congratulations - you have now succesfully set up building an oneAPI build on GNOME Builder.&lt;/p&gt;

&lt;p&gt;There are a lot of ways to go from here. I would love to hear if anybody actually set this up and give some feedback on whether you were able to make this work and what further plans you have. &lt;/p&gt;

&lt;p&gt;There are definitely some improvements that need to be done. Since this set up doesn&apos;t actually work to ship an application.&lt;/p&gt;

&lt;p&gt;This ends third in the series. I might revisit. I would love to get feedback, improvements and whether you all are hacking code using GNOME Builder!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>2023 ECP COMMUNITY BOF DAYS</title>
   <link href="https://hpc.social/2023/2023-ecp-community-bof-days/"/>
   <updated>2023-02-14T14:19:57-07:00</updated>
   <id>https://hpc.social/2023/2023-ecp-community-bof-days</id>
   <content type="html">&lt;p&gt;The Exascale Computing Project (ECP) 2023 Community Birds-of-a-Feather (BOF) Days will take place February 14–16, with multiple sessions each day.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/past-events/2023/2023-ecp-community-bof-days/&quot; rel=&quot;nofollow&quot;&gt;2023 ECP COMMUNITY BOF DAYS&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Modern Software Development Tools and oneAPI Part 2</title>
   <link href="https://hpc.social/2023/modern-software-development-tools-and-oneapi-part-2/"/>
   <updated>2023-01-10T23:08:36-07:00</updated>
   <id>https://hpc.social/2023/modern-software-development-tools-and-oneapi-part-2</id>
   <content type="html">&lt;h1&gt;
  
  
  Modern Software Development Tools and oneAPI Part 2
&lt;/h1&gt;

&lt;p&gt;This is part 2 of using a modern open source toolchain to build oneAPI based applications. If this is the first time you&apos;re seeing this post, you can read part one &lt;a href=&quot;https://dev.to/oneapi/modern-software-development-tools-and-oneapi-part-1-40km&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In part one, we talked about how easy it is to put a container together that will allow you to have everything you need to compile and build an oneAPI application. However, the sample code was compiled simply with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;clang++ -fsycl simple-oneapi.cpp -o simple-sycl&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Not particularly interesting, is it?&lt;/p&gt;

&lt;p&gt;This post will focus on building this same code using &lt;a href=&quot;https://mesonbuild.com/&quot;&gt;Meson&lt;/a&gt;. Meson focuses on simplicity, is a build system generator, but has a concept of back-ends where it can generate whatever the back-end defines. Together with the backend creates a featureful build system. Currently, the default back-end is the fabulous ninja on the Linux platform. Ninja is a command runner that is extremely fast compared to something like Make. Meson also supports xcode and vscode as back-ends allowing to easily use Meson on MacOS and Windows.&lt;/p&gt;

&lt;p&gt;Meson just recently hit 1.0 after ten years of development. A wonderful milestone. You can read about it in this &lt;a href=&quot;https://nibblestew.blogspot.com/2022/12/after-exactly-10-years-meson-100-is-out.html&quot;&gt;blog post&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Meson and Ninja
&lt;/h2&gt;

&lt;p&gt;To get Meson working, we first need to install its prerequisites. This is fairly easy to do, assuming that you are not in the oneAPI container.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ distrobox enter oneapi
$ pip3 install --user meson
$ pip3 install --user ninja
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You are, of course, welcome to install them site-wide so you don&apos;t clutter up your home directory and also, have a clear delineation between toolchain in the container and in your regular host. Make sure that you set your PATH to include /usr/local/bin.&lt;/p&gt;

&lt;p&gt;Now we have Meson and the ninja build system ready to go!&lt;/p&gt;

&lt;h2&gt;
  
  
  Building a simple sycl app with Meson
&lt;/h2&gt;

&lt;p&gt;Let&apos;s start with a fresh directory. The sample sycl code is simple and easy enough to turn into a Meson-based project. Please keep in mind that this is not meant to be a complete tutorial on Meson. If you have questions, please respond to the blog post and I will do my best to answer.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ mkdir -p $HOME/src/simple-oneapi
$ cd $HOME/src/simple-oneapi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The first thing to do is to write a meson.build file in the top level directory. The meson.build file will contain the following:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;project(&apos;simple-oneapi&apos;, [&apos;cpp&apos;, &apos;c&apos;],
        version: &apos;0.1.0&apos;,
    meson_version: &apos;&amp;gt;= 0.59.0&apos;,
  default_options: [ &apos;warning_level=2&apos;, &apos;werror=false&apos;, &apos;cpp_std=gnu++2a&apos;, ],
)
subdir(&apos;src&apos;)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This file will define the project and its prerequisites. From here, you can see that we are defining a project that will use the C++ language version and requires a Meson version above 0.59.0. You can also define what the default compiler options are for the project. Finally, it defines that there are other sub directories with code.&lt;/p&gt;

&lt;p&gt;For those who use make, it should be familiar to have each sub-directory have its own meson.build files to define how the code in that directory will be built. This will be no different.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ mkdir src
$ cd src
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Since we defined a src sub-directory, we&apos;re going to go ahead and create one and then add our simple oneapi source code and a meson file.&lt;/p&gt;

&lt;p&gt;Create a file called simple-oneapi.cpp with this source code:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight cpp&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;sycl/sycl.hpp&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;
&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// Creating buffer of 4 ints to be used inside the kernel code&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;sycl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;buffer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sycl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cl_int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;// Creating SYCL queue&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;sycl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;queue&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Queue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;// Size of index space for kernel&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;sycl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;range&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NumOfWorkItems&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()};&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;// Submitting command group(work) to queue&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Queue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;submit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;](&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sycl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;handler&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cgh&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// Getting write only access to the buffer on a device&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;auto&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Accessor&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get_access&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sycl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;access&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cgh&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// Executing kernel&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;cgh&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;parallel_for&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;FillBuffer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;NumOfWorkItems&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;](&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sycl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;WIid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// Fill buffer with indexes&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;Accessor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WIid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sycl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cl_int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WIid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;// Getting read only access to the buffer on the host.&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// Implicit barrier waiting for queue to complete the work.&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;auto&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HostAccessor&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get_access&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sycl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;access&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mode&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;// Check the results&lt;/span&gt;
  &lt;span class=&quot;kt&quot;&gt;bool&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MismatchFound&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;size_t&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;I&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;I&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Buffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;HostAccessor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;The result is incorrect for element: &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;I&lt;/span&gt;
                &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot; , expected: &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;I&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot; , got: &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HostAccessor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
                &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;MismatchFound&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MismatchFound&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;The results are correct!&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MismatchFound&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Your src directory should look like:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ ls
simple-oneapi.cpp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now, we are going to create a meson.build file to handle compiling simple-oneapi.cpp.&lt;/p&gt;

&lt;p&gt;Recall that we compiled this source code using clang++ -fsycl - so we&apos;re going to have to duplicate that behavior.&lt;/p&gt;

&lt;p&gt;Create a meson.build file with this content:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight python&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;simple_oneapi_sources&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;files&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;simple-oneapi.cpp&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;simple_oneapi_deps&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;executable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;simple-oneapi&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;simple_oneapi_sources&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;link_args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;-fsycl&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;cpp_args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;-fsycl&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;dependencies&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;simple_oneapi_deps&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;install_dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;/var/home/sri/Projects/simple-oneapi/bin&apos;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This demonstrates how easy to understand the syntax of Meson is, and it contributes quite a bit to maintainability, especially if your build system gets more complex. &lt;/p&gt;

&lt;h3&gt;
  
  
  Define our source code
&lt;/h3&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight python&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;simple_oneapi_sources&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;files&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;main.cpp&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This tells Meson what source files you have. It&apos;ll be a comma delineated list of sources.&lt;/p&gt;

&lt;p&gt;You can define more source code files like so:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight python&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;simple_oneapi_sources&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;files&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;simple-oneapi.cpp&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;aux1.cpp&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Define our dependencies
&lt;/h3&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight python&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;simple_oneapi_deps&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This will be a list of dependencies for this project. In this case, we don&apos;t have any dependencies as this is a fairly simple example.&lt;/p&gt;

&lt;p&gt;The dependencies are generally discovered through &lt;code&gt;pkg-config&lt;/code&gt;. If you wanted to add a dependency, it would look something like this:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight python&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;simple_oneapi_deps&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;dependency&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;zlib&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;dependency&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;cups&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;pkg-config&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;See, the Meson documentation on &lt;a href=&quot;https://mesonbuild.com/Dependencies.html&quot;&gt;dependencies&lt;/a&gt; for more information on dependencies.&lt;/p&gt;

&lt;p&gt;Getting back to our example:&lt;/p&gt;

&lt;h3&gt;
  
  
  Defining the final compile
&lt;/h3&gt;

&lt;p&gt;We now want to create a binary executable that will ultimately put our sources and the required dependencies and compile them all together.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight python&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;executable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;simple-oneapi&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;simple_oneapi_sources&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;link_args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;-fsycl&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;cpp_args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;-fsycl&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;dependencies&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;simple_oneapi_deps&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;install_dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;/var/home/sri/Projects/simple-oneapi/bin&apos;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We define our executable to be the sources we have defined, with the linker and pre-processor flags required. Finally, a location of where to put the resulting binary when we want to install it.&lt;/p&gt;

&lt;p&gt;That&apos;s pretty much it. What made this tricky is that SYCL is a define-your-own-environment and so, we were not able to take advantage of a lot of the built-ins that Meson has. Instead, we had to set everything up manually. For instance, the link_args was required in order to compile the object files in the final compile.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up our build system
&lt;/h2&gt;

&lt;p&gt;We now have all the elements to put together our build system and getting our compile going. Let&apos;s see how we can do that.&lt;/p&gt;

&lt;p&gt;Let&apos;s go back to the top directory of our project.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ cd ~/src/simple-oneapi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;To create this build system, we need to make sure that we set the right compiler. In this case, we are using clang++. Most of you should already be familiar with using environment variables to set up the environments.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ CC=clang CXX=clang++ meson setup builddir
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Meson does not support in-tree source code builds, so you must always define a build directory.&lt;/p&gt;

&lt;p&gt;The result should look like this:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;The Meson build system
Version: 1.0.0
Source &lt;span class=&quot;nb&quot;&gt;dir&lt;/span&gt;: /var/home/sri/Projects/simple-oneapi
Build &lt;span class=&quot;nb&quot;&gt;dir&lt;/span&gt;: /var/home/sri/Projects/simple-oneapi/builddir
Build &lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;: native build
Project name: simple-oneapi
Project version: 0.1.0
C compiler &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;the host machine: clang &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;clang 16.0.0 &lt;span class=&quot;s2&quot;&gt;&quot;clang version 16.0.0 (https://github.com/intel/llvm 08be083e07b1fd6437267e26adb92f1b647d57dd)&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
C linker &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;the host machine: clang ld.bfd 2.34
C++ compiler &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;the host machine: clang++ &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;clang 16.0.0 &lt;span class=&quot;s2&quot;&gt;&quot;clang version 16.0.0 (https://github.com/intel/llvm 08be083e07b1fd6437267e26adb92f1b647d57dd)&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
C++ linker &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;the host machine: clang++ ld.bfd 2.34
Host machine cpu family: x86_64
Host machine cpu: x86_64
Build targets &lt;span class=&quot;k&quot;&gt;in &lt;/span&gt;project: 1

Found ninja-1.11.1.git.kitware.jobserver-1 at /var/home/sri/.local/bin/ninja
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We are now ready to build this simple oneapi project.&lt;/p&gt;

&lt;p&gt;To build our project, we simply do:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ cd builddir
$ ninja
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The resultant binary will be built in the src/ directory. Alternatively, if you want to be consistent especially if you&apos;re using the same codebase to build on windows and let Meson figure out which backend to use.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ cd builddir
$ meson compile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You can find the results in the src/ directory.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight plaintext&quot;&gt;&lt;code&gt;$ cd src
$ ./simple-oneapi
The results are correct!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;So, now we have successfully built a simple oneapi binary using Meson!!&lt;/p&gt;

&lt;p&gt;There are several possibilities to using Meson as a build system. Meson integrates well with CMake and other build systems, so you would not have to rebuild your system from scratch.&lt;/p&gt;

&lt;p&gt;The greatest advantage of Meson is speed and simplicity on the Linux platform.&lt;/p&gt;

&lt;p&gt;Interested in learning more about Meson and being part of the community? Find out more at &lt;a href=&quot;https://mesonbuild.com/&quot;&gt;https://mesonbuild.com/&lt;/a&gt;. There is a Meson community on Matrix - &lt;a href=&quot;https://matrix.to/#/#mesonbuild:matrix.org&quot;&gt;https://matrix.to/#/#mesonbuild:matrix.org&lt;/a&gt;. I also highly encourage you to read Jussi Pakkane’ blog at &lt;a href=&quot;https://nibblestew.blogspot.com/&quot;&gt;https://nibblestew.blogspot.com/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the next and final blog post, we&apos;ll talk about how we can use GNOME Builder in conjunction with our container and Meson to finally put a user-friendly developer environment to write oneAPI applications on the Linux platform.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Modern Software Development Tools and oneAPI Part 1</title>
   <link href="https://hpc.social/2022/modern-software-development-tools-and-oneapi-part-1/"/>
   <updated>2022-12-31T23:50:26-07:00</updated>
   <id>https://hpc.social/2022/modern-software-development-tools-and-oneapi-part-1</id>
   <content type="html">&lt;p&gt;This will be the last blog post for this year (unless, I manage to get a second one in by the stroke of midnight tomorrow!).&lt;br /&gt;
I wanted to end 2022 with a departure from the last two blog posts. In this one, we&apos;re going to be looking at oneAPI toolchain from a different perspective.&lt;/p&gt;

&lt;p&gt;I wanted to build a pure oneAPI environment that uses two things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A different build system than your usual CMake &lt;em&gt;and&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;an opportunity to use a Linux based IDE to write code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most HPC code runs on Linux in Data center. Linux is known for using arcane tools like VIM or Emacs and a build system. Sure, you can use VScode on Linux and that can be a viable option. However, I am an open-source person; I live and breathe the ideology and I am a true believer. oneAPI is an open platform, and we should use it on an open platform.&lt;/p&gt;

&lt;p&gt;The two pieces of software I want to introduce you all is GNOME Builder and Meson. &lt;/p&gt;

&lt;h2&gt;
  
  
  GNOME Builder
&lt;/h2&gt;

&lt;p&gt;GNOME Builder is an IDE that is primarily targeted at building GNOME-based applications. Unlike your typical IDE, GNOME Builder uses containers for building software internally. Containers in these case are flatpak SDKs - containers that contain everything you need to build an application. With GNOME Builder, you can get started writing code without the tedium of installing the entire software development toolchain you&apos;d need to build said applications. That means, you aren&apos;t going to need to install a compiler, linker, libraries and anything else. Everything is all-inclusive - much like a vacation resort in Cancun, say! :-)&lt;/p&gt;

&lt;p&gt;Back to Builder! oneAPI is not one of the options for building software inside GNOME Builder. GNOME Builder includes containers to build against GNOME software.&lt;/p&gt;

&lt;p&gt;GNOME Builder is the brainchild of Christian Hergert, a long time Free Software programmer who was frustrated with the current state of tools to build software within the application community and started the Builder project about 7 years ago and was initially funded by a kickstarter. Through some great luck, Christian is now paid by Red Hat to help build GNOME Builder as well as improving the application building story on Linux and other platforms.&lt;/p&gt;

&lt;p&gt;There is something wonderfully intriguing about Builder which is why I&apos;m highlighting it here and why I picked it as the IDE of choice to write oneAPI-related code.&lt;/p&gt;

&lt;h3&gt;
  
  
  This one special trick
&lt;/h3&gt;

&lt;p&gt;Builder will allow you to use a podman or docker container to run everything. So in this case, we&apos;re going to create that all-inclusive experience! Once you&apos;ve done the work of building a container with all the oneAPI tools into it, others can then re-use the container as a fixed environment and other folx can clone the project you are working on and then easily collaborate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meson
&lt;/h2&gt;

&lt;p&gt;The next piece of software I wanted to highlight is Meson. Meson is a build system that is written in python and &lt;em&gt;tries&lt;/em&gt; to be an intuitive system that &lt;em&gt;tries&lt;/em&gt; to do the right thing through easily understandable syntax. For those of you who have ever used autoconf - this was the application community&apos;s response to autoconf.&lt;/p&gt;

&lt;p&gt;Autoconf during its heyday was a massive boon to those who were writing code that could work on many different UNIX and Linux distributions. However, autoconf was difficult to figure out and most folx simply copy from another project and then move on. Writing anything sophisticated required extensive, expended effort.&lt;/p&gt;

&lt;p&gt;In my personal opinion, build systems are really hard to get right and there are so many oddities in how we build software that a build system has to get right, in order to be effective.&lt;/p&gt;

&lt;p&gt;Meson is written by Finnish programmer, Jussi Pakkanen, who was frustrated with the current state of build systems and their arcane configuration syntax and sometimes rather unexpected behaviors!&lt;/p&gt;

&lt;p&gt;Meson can be better described as a system that generates the configurations for build systems to use. It isn&apos;t a full-fledged build system like Make or CMake. In fact, you could easily re-use CMake configuration files in Meson. It has a concept of a backend and can generate config for Xcode on MacOS, VScode on Windows and Ninja on Linux systems. Meson easily integrates with profilers and debuggers and is designed not to build within source tree but in a designed build area.&lt;/p&gt;

&lt;p&gt;For those not familiar with ninja, it is an extremely fast build system that has been shown to be effective in building software very quickly!!&lt;/p&gt;

&lt;h2&gt;
  
  
  Build an oneAPI Container
&lt;/h2&gt;

&lt;p&gt;In this first part, we will focus on building an oneAPI container based on the Ubuntu 20.04 LTS release since that is what oneAPI works optimally on.&lt;/p&gt;

&lt;p&gt;I will be using Fedora 37 SilverBlue edition. I like SilverBlue as it is built with containerized environments in mind. It allows you to build different container environments that you can enter and exit from on the command line and still easily integrate with the desktop.&lt;/p&gt;

&lt;p&gt;Let&apos;s start then with building our oneAPI environment so that it will be able to run a simple oneAPI sample program.&lt;/p&gt;

&lt;p&gt;Staying true to the spirit of open-source, I will build this environment from source and only use what&apos;s available on GitHub.&lt;/p&gt;

&lt;p&gt;To start, find and install the &apos;distrobox&apos; tool on your distro.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;dnf install distrobox -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Distrobox allows you to create containerized environments from the command line.&lt;/p&gt;

&lt;p&gt;I use podman as I live in the Fedora world. Podman is a command line compatible version of Docker. It&apos;s reasonable that the following could be done through a Dockerfile but the oneAPI libraries changes often enough that this blog post would become stale in short order.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ distrobox create oneapi -i docker.io/library/ubuntu:20.04&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This will create a container called oneapi with an Ubuntu 20.04 setup.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ distrobox enter oneapi&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Will let you enter the container.&lt;/p&gt;

&lt;p&gt;The beauty of distrobox is that you are in this container, it has mounted your home directory and you have essentially inherited your desktop system but the container is Ubuntu - and so you can use the Ubuntu distro tools to install software. Pretty neat, huh?&lt;/p&gt;

&lt;p&gt;The first step is to build the DPC++ oneAPI compiler from source. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ mkdir -p ~/src/sycl_workspace&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can use whatever area you want. I&apos;m following this &lt;a href=&quot;https://intel.github.io/llvm-docs/GetStartedGuide.html#create-dpc-workspace&quot;&gt;guide&lt;/a&gt; to build the compiler.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prequisites
&lt;/h3&gt;

&lt;p&gt;Let&apos;s first grab our pre-requisites for building.&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ apt install git python3 ninja gcc c++ libstdc++ libstdc++-9-dev python3-pip python3-distutils python-distutils-extra python3-psutil -y&lt;br /&gt;
$ pip3 install meson&lt;br /&gt;
$ pip3 install ninja&lt;/code&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;Now that we have our build environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Build DPC++ Compiler
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;$ cd ~/src/sycl_workspace&lt;br /&gt;
$ export DPCPP_HOME=`pwd`&lt;br /&gt;
$ git clone https://github.com/intel/llvm -b sycl&lt;/code&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;We can start the actual build:&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ python $DPCPP_HOME/llvm/buildbot/configure.py&lt;br /&gt;
$ python $DPCPP_HOME/llvm/buildbot/compile.py&lt;/code&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;At the end of this exercise, you should have a working oneAPI DPC++ compiler.&lt;/p&gt;

&lt;p&gt;But we aren&apos;t done yet - we still need to add some of the oneAPI libraries and runtimes to make our simple oneAPI example work.&lt;/p&gt;

&lt;p&gt;We first need to install our low level runtimes: the things that recognizes accelerators. For now, we&apos;ll use the ones that recognize the x86 Intel processors as that is what is on my laptop right now.&lt;/p&gt;

&lt;p&gt;We will first need to identify the latest versions of the runtimes we need to download. You need to look this up in the &lt;a href=&quot;https://github.com/intel/llvm/blob/sycl/buildbot/dependency.conf&quot;&gt;dependency.conf&lt;/a&gt;.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo mkdir&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; /opt/intel 
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo mkdir&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; /etc/OpenCL/vendors/intel_fpgaemu.icd
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /tmp
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;wget https://github.com/intel/llvm/releases/download/2022-WW50/oclcpuexp-2022.15.12.0.01_rel.tar.gz
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;wget https://github.com/intel/llvm/releases/download/2022-WW50/fpgaemu-2022.15.12.0.01_rel.tar.gz
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;bash
&lt;span class=&quot;c&quot;&gt;# cd /opt/intel&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# mkdir oclfpgaemu-&amp;lt;fpga_version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# cd oclfpgaemu-&amp;lt;fpga_version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# tar xvfpz /tmp/fpgaemu-2022.15.12.0.01_rel.tar.gz&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# cd ..&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# mkdir oclcpuexp_&amp;lt;cpu_version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# cd oclcpuexp-&amp;lt;cpu_version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# tar xvfpz /tmp/oclcpuexp-&amp;lt;cpu_version&amp;gt;&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# cd ..&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now to create some configuration files.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# pwd&lt;/span&gt;
/opt/intel
&lt;span class=&quot;c&quot;&gt;# echo  /opt/intel/oclfpgaemu_&amp;lt;fpga_version&amp;gt;/x64/libintelocl_emu.so &amp;gt;&lt;/span&gt;
  /etc/OpenCL/vendors/intel_fpgaemu.icd
&lt;span class=&quot;c&quot;&gt;# echo /opt/intel/oclcpuexp_&amp;lt;cpu_version&amp;gt;/x64/libintelocl.so &amp;gt;&lt;/span&gt;
  /etc/OpenCL/vendors/intel_expcpu.icd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We&apos;ll need to grab a release of oneTBB from &lt;a href=&quot;https://github.com/oneapi-src/oneTBB/releases&quot;&gt;github&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /tmp
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;wget https://github.com/oneapi-src/oneTBB/releases/download/v2021.7.0/oneapi-tbb-2021.7.0-lin.tgz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;and now extract it.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /opt/intel
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;bash
&lt;span class=&quot;c&quot;&gt;# tar xvfpz /tmp/oneapi-tbb-2021.7.0-lin.tgz&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We&apos;ll need to reference some of the libraries in the oneTBB directory in our build.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# ln -s /opt/intel/oneapi-tbb-&amp;lt;tbb_version&amp;gt;/lib/intel64/gcc4.8/libtbb.so /opt/intel/oclfpgaemu_&amp;lt;fpga_version&amp;gt;/x64&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# ln -s /opt/intel/oneapi-tbb-&amp;lt;tbb_version&amp;gt;/lib/intel64/gcc4.8/libtbbmalloc.so /opt/intel/oclfpgaemu_&amp;lt;fpga_version&amp;gt;/x64&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# ln -s /opt/intel/oneapi-tbb-&amp;lt;tbb_version&amp;gt;/lib/intel64/gcc4.8/libtbb.so.12 /opt/intel/oclfpgaemu_&amp;lt;fpga_version&amp;gt;/x64&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# ln -s /opt/intel/oneapi-tbb-&amp;lt;tbb_version&amp;gt;/lib/intel64/gcc4.8/libtbbmalloc.so.2 /opt/intel/oclfpgaemu_&amp;lt;fpga_version&amp;gt;/x64&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# ln -s /opt/intel/oneapi-tbb-&amp;lt;tbb_version&amp;gt;/lib/intel64/gcc4.8/libtbb.so /opt/intel/oclcpuexp_&amp;lt;cpu_version&amp;gt;/x64&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# ln -s /opt/intel/oneapi-tbb-&amp;lt;tbb_version&amp;gt;/lib/intel64/gcc4.8/libtbbmalloc.so /opt/intel/oclcpuexp_&amp;lt;cpu_version&amp;gt;/x64&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# ln -s /opt/intel/oneapi-tbb-&amp;lt;tbb_version&amp;gt;/lib/intel64/gcc4.8/libtbb.so.12 /opt/intel/oclcpuexp_&amp;lt;cpu_version&amp;gt;/x64&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# ln -s /opt/intel/oneapi-tbb-&amp;lt;tbb_version&amp;gt;/lib/intel64/gcc4.8/libtbbmalloc.so.2 /opt/intel/oclcpuexp_&amp;lt;cpu_version&amp;gt;/x64&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now we need to configure the library paths:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# echo /opt/intel/oclfpgaemu_&amp;lt;fpga_version&amp;gt;/x64 &amp;gt; /etc/ld.so.conf.d/libintelopenclexp.conf&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# echo /opt/intel/oclcpuexp_&amp;lt;cpu_version&amp;gt;/x64 &amp;gt;&amp;gt; /etc/ld.so.conf.d/libintelopenclexp.conf&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# ldconfig -f /etc/ld.so.conf.d/libintelopenclexp.conf&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;and we&apos;re done! Now we need to make sure that this toolchain actually works. So run this test.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make sure you are not root.&lt;/strong&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;python &lt;span class=&quot;nv&quot;&gt;$DPCPP_HOME&lt;/span&gt;/llvm/buildbot/check.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you come back with no failure then, congratulations, you&apos;re in good shape!! Sometimes, there might be a few missing dependencies, especially when it comes to python.&lt;/p&gt;

&lt;p&gt;We are now ready to create a simple SYCL application and test. I&apos;m going to re-use the one that is located on &lt;a href=&quot;https://intel.github.io/llvm-docs/GetStartedGuide.html#run-simple-dpc-application&quot;&gt;Github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let&apos;s create our workspace and build this sample project.&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; ~/src/simple-oneapi/
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; ~/src/simple-oneapi
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$DPCPP_HOME&lt;/span&gt;/llvm/build/bin:&lt;span class=&quot;nv&quot;&gt;$PATH&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$DPCPP_HOME&lt;/span&gt;/llvm/build/lib:&lt;span class=&quot;nv&quot;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; simple-oneapi.cpp

&lt;span class=&quot;c&quot;&gt;#include &amp;lt;sycl/sycl.hpp&amp;gt;&lt;/span&gt;

int main&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  // Creating buffer of 4 ints to be used inside the kernel code
  sycl::buffer&amp;lt;sycl::cl_int, 1&amp;gt; Buffer&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;4&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  // Creating SYCL queue
  sycl::queue Queue&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  // Size of index space &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;kernel
  sycl::range&amp;lt;1&amp;gt; NumOfWorkItems&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;Buffer.size&lt;span class=&quot;o&quot;&gt;()}&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  // Submitting &lt;span class=&quot;nb&quot;&gt;command &lt;/span&gt;group&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;work&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; to queue
  Queue.submit&lt;span class=&quot;o&quot;&gt;([&lt;/span&gt;&amp;amp;]&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;sycl::handler &amp;amp;cgh&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    // Getting write only access to the buffer on a device
    auto Accessor &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; Buffer.get_access&amp;lt;sycl::access::mode::write&amp;gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;cgh&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    // Executing kernel
    cgh.parallel_for&amp;lt;class FillBuffer&amp;gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;
        NumOfWorkItems, &lt;span class=&quot;o&quot;&gt;[=](&lt;/span&gt;sycl::id&amp;lt;1&amp;gt; WIid&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
          // Fill buffer with indexes
          Accessor[WIid] &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;sycl::cl_int&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;WIid.get&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;0&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;})&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;})&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  // Getting &lt;span class=&quot;nb&quot;&gt;read &lt;/span&gt;only access to the buffer on the host.
  // Implicit barrier waiting &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;queue to &lt;span class=&quot;nb&quot;&gt;complete &lt;/span&gt;the work.
  const auto HostAccessor &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; Buffer.get_access&amp;lt;sycl::access::mode::read&amp;gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  // Check the results
  bool MismatchFound &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;size_t I &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 0&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; I &amp;lt; Buffer.size&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; ++I&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;HostAccessor[I] &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; I&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
      std::cout &amp;lt;&amp;lt; &lt;span class=&quot;s2&quot;&gt;&quot;The result is incorrect for element: &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;
                &amp;lt;&amp;lt; &quot; , expected: &quot; &amp;lt;&amp;lt; I &amp;lt;&amp;lt; &quot; , got: &quot; &amp;lt;&amp;lt; HostAccessor[I]
                &amp;lt;&amp;lt; std::endl;
      MismatchFound = true;
    }
  }

  if (!MismatchFound) {
    std::cout &amp;lt;&amp;lt; &quot;The results are correct!&quot; &amp;lt;&amp;lt; std::endl;
  }

  return MismatchFound;
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Let&apos;s build our simple oneapi source code!&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;clang++ &lt;span class=&quot;nt&quot;&gt;-fsycl&lt;/span&gt; simple-sycl-app.cpp &lt;span class=&quot;nt&quot;&gt;-o&lt;/span&gt; simple-sycl-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;It should compile and run without any errors.&lt;/p&gt;

&lt;p&gt;If all works as anticipated, you should have a working setup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting up the container to code SYCL when you enter
&lt;/h3&gt;

&lt;p&gt;Now, the next step is to make this container useful when you enter and have it always ready to build a sycl app.&lt;/p&gt;

&lt;p&gt;Exit out of the container using the &apos;exit&apos; command and you should be back on the host operating system.&lt;/p&gt;

&lt;p&gt;Type:&lt;br /&gt;
&lt;code&gt;$ uname -a&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;On my system, I get:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Linux fedora 6.0.13-300.fc37.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Dec 14 16:15:19 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Re-enter the container:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;distrobox enter oneapi
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;uname&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-a&lt;/span&gt;
Linux oneapi.fedora 6.0.13-300.fc37.x86_64 &lt;span class=&quot;c&quot;&gt;#1 SMP PREEMPT_DYNAMIC Wed Dec 14 16:15:19 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You will notice that after &quot;Linux&quot; when you are in the container, there is a &quot;oneapi&quot; prefix to fedora.&lt;/p&gt;

&lt;p&gt;We can take advantage of that. Let&apos;s make sure that when we enter the container that we can set things up from the shell perspective to be ready to write SYCL code.&lt;/p&gt;

&lt;p&gt;Add this bit to your .bashrc:&lt;br /&gt;
&lt;/p&gt;

&lt;div class=&quot;highlight js-code-highlight&quot;&gt;
&lt;pre class=&quot;highlight shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;oneapi&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;``&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;uname&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-a&lt;/span&gt; | &lt;span class=&quot;nb&quot;&gt;grep&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-c&lt;/span&gt; oneapi&lt;span class=&quot;sb&quot;&gt;``&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$oneapi&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-gt&lt;/span&gt; 0 &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;then
   &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Initializing oneAPI&quot;&lt;/span&gt;
   &lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;DPCPP_HOME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/var/home/sri/src/dpcplusplus&quot;&lt;/span&gt;
   &lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$PATH&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;:/var/home/sri/.local/bin:&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$DPCPP_HOME&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/llvm/build/bin&quot;&lt;/span&gt;
   &lt;span class=&quot;nb&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$DPCPP_HOME&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/llvm/build/lib&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Make sure you replace &apos;sri&apos; with your your login details&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now when we enter the &apos;oneapi&apos; container our environment will be properly initialized.&lt;/p&gt;

&lt;p&gt;Let&apos;s stop here, and we&apos;ll pick it up in the next post. The next post will focus on creating a meson setup around this simple oneapi code. Part 3 will focus on taking our meson configured source code and using GNOME Builder to build it. Stay tuned!&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href=&quot;https://unsplash.com/@imattsmart?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;iMattSmart&lt;/a&gt; on &lt;a href=&quot;https://unsplash.com/photos/sm0Bkoj5bnA?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Community Map</title>
   <link href="https://hpc.social/2022/community-map/"/>
   <updated>2022-11-23T00:00:00-07:00</updated>
   <id>https://hpc.social/2022/community-map</id>
   <content type="html">&lt;p&gt;[{‘type’: ‘text/html’, ‘language’: ‘en’, ‘base’: ‘https://hpc-social.github.io/news/2022/community-map/’, ‘value’: ‘&amp;lt;p&amp;gt;After an evening coding session, we are happy to announce that the &lt;a href=&quot;https://hpc.social/map/&quot;&gt;community map&lt;/a&gt;\n (&lt;a href=&quot;https://github.com/hpc-social/map&quot;&gt;and associated automation&lt;/a&gt;) is live!\nThis post will capture the screenshot of the first set of entries, which is what\nwe wanted to write about. This was only announced days ago (and we only have a few entries)\nbut we are taken aback by the (so far) geographic diversity of the HPC community!\nSo far with a small number of entries, we are hitting the community in Europe,\nthe United States, and even South America. This is awesome!&amp;lt;/p&amp;gt;
\n\n&amp;lt;p&amp;gt;Finally, we’ve added a new field for a &lt;em&gt;group URL&lt;/em&gt; to the map &lt;a href=&quot;https://hpc.social/projects/map/&quot;&gt;form page&lt;/a&gt; ! \nIf you’ve already provided your group don’t worry - we looked it up for you, but future groups will\nbe able to provide their group website URLs to automatically appear on the map\nalongside the popup. What fun would it be to browse groups without being able\nto look closer? 🤔️&amp;lt;/p&amp;gt;
\n\n&amp;lt;p&amp;gt;We have more to come, but this is a quick update before the break. Happy\nholiday break to our HPC community, whether you eat turkey or not, do something else,\nor are just using it as a glorious time to rest or do fun things. 🎉️&amp;lt;/p&amp;gt;
‘}]&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Welcome to HPC.social!</title>
   <link href="https://hpc.social/2022/welcome-to-hpc-social/"/>
   <updated>2022-11-20T00:00:00-07:00</updated>
   <id>https://hpc.social/2022/welcome-to-hpc-social-</id>
   <content type="html">&lt;p&gt;[{‘type’: ‘text/html’, ‘language’: ‘en’, ‘base’: ‘https://hpc-social.github.io/news/2022/welcome/’, ‘value’: ‘&amp;lt;p&amp;gt;We are excited to announce the launch of our community, where we hope to connect\nHPC practitioners and friends alike, and provide useful resources for the community.&amp;lt;/p&amp;gt;
‘}]&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>How the SYCL spec gets updated</title>
   <link href="https://hpc.social/2022/how-the-sycl-spec-gets-updated/"/>
   <updated>2022-11-18T21:59:08-07:00</updated>
   <id>https://hpc.social/2022/how-the-sycl-spec-gets-updated</id>
   <content type="html">&lt;h2&gt;
  
  
  What is SYCL?
&lt;/h2&gt;

&lt;p&gt;From the KHRONOS website (&lt;a href=&quot;https://www.khronos.org/sycl/&quot;&gt;https://www.khronos.org/sycl/&lt;/a&gt;) &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;SYCL (pronounced &apos;sickle&apos;) is a royalty-free, cross-platform abstraction layer that enables code for heterogeneous processors to be written using standard ISO C++ with the host and kernel code for an application contained in the same source file. &lt;/p&gt;

&lt;/blockquote&gt;

&lt;p&gt;In short, SYCL is a C++ extension offered as an industry replacement to CUDA. SYCL allows you to run on many kinds of accelerators like FPGAs, GPUs, and CPUs&apos;- you could scale it from a Raspberry Pi to the latest GPUs and CPUIs on the market. &lt;/p&gt;

&lt;p&gt;We will not go too much into SYCL from a code perspective. That will be the focus of future blog posts. In this post, we focus on how SYCL gets updated as an industry standard. &lt;/p&gt;

&lt;h2&gt;
  
  
  KHRONOS
&lt;/h2&gt;

&lt;p&gt;The caretaker of the SYCL spec is &lt;a href=&quot;https://www.khronos.org/&quot;&gt;Khronos&lt;/a&gt; a non-profit standards body that is home to several projects focused on graphics, machine learning, parallel computing, VR and visual computing. You will note that all these pieces work together to build frameworks. Some of the more visible ones that you might be familiar with are openGL and Vulkan. &lt;/p&gt;

&lt;p&gt;Khronos consists of members who represent industry players from companies, non-profits, and individuals. Every project will have a set of members.   &lt;/p&gt;

&lt;h2&gt;
  
  
  How a feature becomes part of the spec
&lt;/h2&gt;

&lt;p&gt;Let us start with how a feature gets introduced into the spec. Usually the process of adding a feature starts when a member company identifies a problem or an idea internally through feedback, bug reports, or strategic direction. &lt;/p&gt;

&lt;p&gt;Once that feature is fleshed out, it is introduced to the SYCL working group. The working group then discusses the proposal as to how the feature evolves, and the proposal gets iterated on until people are satisfied with the changes. The feature is then integrated into the spec. &lt;/p&gt;

&lt;p&gt;Once the feature is in the SYCL spec, the working group will ratify the feature with a vote. The vote is important because it means that the output of that feature is now under the protection of the Khronos group, which means that if another member objects because of an IP issue later they will not have grounds to do so, and the implementation of the feature is protected.  &lt;/p&gt;

&lt;h3&gt;
  
  
  What happens before a member goes to the working group?
&lt;/h3&gt;

&lt;p&gt;Most of the time, the member company already implemented the feature they were looking to integrate into the spec to ensure that the desired feature solves the problem at hand. This also assures the working group that the feature can be implemented. &lt;/p&gt;

&lt;p&gt;As a specific example, Intel, when they want to design a feature to extend the SYCL spec, they start a branch in the DPG++ GitHub area and then work on it publicly. Once the implementation is complete, it is considered ready for submission to the working group. &lt;/p&gt;

&lt;h2&gt;
  
  
  What happens after approval?
&lt;/h2&gt;

&lt;p&gt;After the approval of the preliminary draft of the new spec  which contains the new features, the draft is open for public comments. Usually, there is a 30-45 -day period where Khronos members can inspect the new version of the spec, file IP claims against it, or offer changes. An iterative process happens when public feedback is used to make more changes and clean up. Finally, the new changes are ratified, and the feature implementation is put into the spec. &lt;/p&gt;

&lt;p&gt;Keep in mind that this is all happening in parallel as other member projects are also targeting the same spec with their own features. &lt;/p&gt;

&lt;h2&gt;
  
  
  Getting the final stamp of approval
&lt;/h2&gt;

&lt;p&gt;Once you have finished ratifying the spec and produced a working implementation of the feature you will need to do a performance run using an included conformance suite provided by Khronos. Once that passes, you will be able to put the Khronos logo on your implementation of the updated spec.&lt;/p&gt;

&lt;p&gt;That is a summary of how SYCL is updated through a standards body like Khronos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;I hope this gives you a birds eye view of the process of how the SYCL spec is updated. If you have questions - please ask in the comments! If anyone is interested in Khronos membership - happy to direct.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Supercomputing 2022</title>
   <link href="https://hpc.social/2022/supercomputing-2022/"/>
   <updated>2022-11-13T02:47:14-07:00</updated>
   <id>https://hpc.social/2022/supercomputing-2022</id>
   <content type="html">&lt;p&gt;OpenMP was in Dallas for Supercomputing 2022. We will have four tutorials, a BOF, and more.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/sc22/&quot; rel=&quot;nofollow&quot;&gt;Supercomputing 2022&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>OpenMP ARB Releases Technical Report 11</title>
   <link href="https://hpc.social/2022/openmp-arb-releases-technical-report-11/"/>
   <updated>2022-11-10T18:20:32-07:00</updated>
   <id>https://hpc.social/2022/openmp-arb-releases-technical-report-11</id>
   <content type="html">&lt;p&gt;The OpenMP® Architecture Review Board (ARB) has released Technical Report 11, the first preview of the future version 6.0 of the OpenMP API and version 5.2.1 of the collection of programming examples.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/press-release/openmp-arb-releases-technical-report-11/&quot; rel=&quot;nofollow&quot;&gt;OpenMP ARB Releases Technical Report 11&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Understanding the CaRCC Facings</title>
   <link href="https://hpc.social/2022/understanding-the-carcc-facings/"/>
   <updated>2022-10-03T18:30:38-06:00</updated>
   <id>https://hpc.social/2022/understanding-the-carcc-facings</id>
   <content type="html">&lt;p&gt;One of the biggest challenges we face as an organization supporting the research computing and data (RCD) profession is defining what it means to &lt;em&gt;be&lt;/em&gt; an RCD professional. Although it’s clear our profession is growing and very much in-demand, the lines between RCD and other types of jobs are often blurred, and our professional titles rarely reflect the breadth of what we do. Supporting the needs of researchers is distinct and often very different from providing enterprise technology services to a general user population (even though many of us do both and overlap certainly exists). The Campus Research Computing Consortium (CaRCC) focuses on the challenges and opportunities unique to providing computational, data, and other related services to researchers.&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;Am I an RCD professional?&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Most of us would agree that the people who manage university supercomputers are RCD professionals, but am I an RCD professional if I help researchers navigate data and my title is Librarian or Data Scientist? Am I an RCD professional if I’m a programmer who develops software that supports a research project? Am I an RCD professional if I’m not involved in hands-on technical work but do outreach and education to help researchers find and use technology and data resources?&amp;nbsp;&lt;/p&gt;

&lt;p&gt;If you are supporting researchers in any way through systems, software, data, security, networking, data center operations, or education and consulting, &lt;strong&gt;yes &amp;#8211;you &lt;/strong&gt;&lt;strong&gt;&lt;em&gt;are &lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;an RCD professional!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;span id=&quot;more-4515&quot;&gt;&lt;/span&gt;&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;Okay, so I’m an RCD professional. How do I find “my people” within this broad and diverse profession?&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;We segment the RCD profession into five (non-mutually exclusive) focus areas that we call “Facings” – as in “this is what/whom I’m facing much of the time.” Most of us do things related to more than one of the Facings.&amp;nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;What or whom are you facing?&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Use these descriptions to help you find your own RCD peer groups or to better understand &lt;a href=&quot;https://carcc.org/rcd-professionalization/facings/&quot;&gt;the Facings&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Researcher-Facing&lt;/strong&gt; &lt;strong&gt;RCD Professionals&lt;/strong&gt; – We work directly with researchers in areas such as outreach, education, training, consulting, facilitation, liaising, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Systems-Facing&lt;/strong&gt; &lt;strong&gt;RCD Professionals&lt;/strong&gt; – We work with systems – including systems administration, planning, engineering, networking, optimization, systems and network security, instruments and sensors, middleware, and the like.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data-Facing RCD Professionals&lt;/strong&gt; – We are responsible for data discovery, curation, management, publishing/sharing, data science, data security, and data-related&amp;nbsp;functions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Software-Facing RCD Professionals&lt;/strong&gt; – We are involved in software development, engineering portability, installation, optimization, support, and related activities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strategy and Policy-Facing RCD Professionals&lt;/strong&gt; – We help set organizational policies, develop programs and personnel management strategies, lead service evaluations, and work in areas related to funding, finances, security policy, or other strategic initiatives.&amp;nbsp;&amp;nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;I get it! Now what?&amp;nbsp;&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Once you’ve found your Facings, &lt;a href=&quot;https://carcc.org/people-network/&quot;&gt;join the People Network&lt;/a&gt; and sign up to join your Facings’ meetings and discussions. CaRCC is an open and inclusive community; we actively encourage and welcome new members!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>IWOMP 2022- International Workshop on OpenMP</title>
   <link href="https://hpc.social/2022/iwomp-2022-international-workshop-on-openmp/"/>
   <updated>2022-08-09T22:34:26-06:00</updated>
   <id>https://hpc.social/2022/iwomp-2022-international-workshop-on-openmp</id>
   <content type="html">&lt;p&gt;September 27 - 30&lt;br /&gt;
at the University of Tennessee at Chattanooga, USA,&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/iwomp-2022/&quot; rel=&quot;nofollow&quot;&gt;IWOMP 2022: International Workshop on OpenMP&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>ECP SOLLVE organizes a bi-weekly session for assistance with OpenMP technical problems</title>
   <link href="https://hpc.social/2022/ecp-sollve-organizes-a-bi-weekly-session-for-assistance-with-openmp-technical-problems/"/>
   <updated>2022-06-17T19:04:39-06:00</updated>
   <id>https://hpc.social/2022/ecp-sollve-organizes-a-bi-weekly-session-for-assistance-with-openmp-technical-problems</id>
   <content type="html">&lt;p&gt;Every two weeks  |  Teleconference&lt;br /&gt;
Dedicated office hours every two weeks from 10:30 a.m. to 11:30 a.m. central time&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/ecp-sollve-openmp-monthly-teleconference-2/&quot; rel=&quot;nofollow&quot;&gt;ECP SOLLVE organizes a bi-weekly session for assistance with OpenMP technical problems&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>2021 RCD Capabilities Model Community Data report now available</title>
   <link href="https://hpc.social/2022/2021-rcd-capabilities-model-community-data-report-now-available/"/>
   <updated>2022-05-25T17:49:57-06:00</updated>
   <id>https://hpc.social/2022/2021-rcd-capabilities-model-community-data-report-now-available</id>
   <content type="html">&lt;p&gt;The second &lt;a href=&quot;https://zenodo.org/record/6502962#.Yoe-Ky1h2_w&quot;&gt;Research Computing and Data (RCD) Capabilities Model Community Dataset report&lt;/a&gt; is now available through &lt;a href=&quot;http://rcd-nexus.org/&quot;&gt;CaRCC’s RCD Nexus&lt;/a&gt; as part of a project funded by the National Science Foundation. The report aggregates assessments contributed by 51 higher education institutions, providing insight into the current state of support for RCD.&lt;/p&gt;

&lt;p&gt;Report data is intended to support strategic planning and decision-making for campus leadership, funding agencies, RCD leaders, and others interested in advanced technologies that enable research.&amp;nbsp;&amp;nbsp;&lt;/p&gt;

&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-4199&quot; height=&quot;268&quot; src=&quot;https://carcc.org/wp-content/uploads/2022/05/ScatterGraphSmall.png&quot; width=&quot;579&quot; /&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;The &lt;a href=&quot;https://zenodo.org/record/6502962#.Yo5XjC1h2_x&quot;&gt;RCD Capabilities Model Community Dataset report &lt;/a&gt;is now available. &lt;/figcaption&gt;&lt;/figure&gt;

&lt;p&gt;Themes that emerged from the 2021 data include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There is generally stronger support for Researcher-Facing, System-Facing, and Strategy and Policy-Facing areas, than for Data-Facing and Software-Facing capabilities.&lt;/li&gt;



&lt;li&gt;R1 institutions have much higher levels of coverage than other Carnegie Classifications, particularly in certain areas.&lt;/li&gt;



&lt;li&gt;EPSCoR institutions have significant gaps in capabilities coverage relative to institutions in other states, including dramatic gaps in certain areas of Data-Facing support.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;“This level of data has never before been readily available to the RCD community,” said Patrick Schmitz, co-principal investigator on the RCD Nexus project. “We were intrigued to see that institutions who completed a second assessment in 2021 saw a marked increase in their capabilities related to RCD strategy and policy. It’s possible the assessment is already helping them improve their programs. We will work to continue expanding the dataset in the coming years, and are pleased to offer the RCD community a solid baseline dataset to help inform strategic planning.”&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This material is based upon work supported by the National Science Foundation under &lt;a href=&quot;https://www.nsf.gov/awardsearch/showAward?AWD_ID=2100003&quot;&gt;Grant OAC-2100003&lt;/a&gt;. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation&lt;/em&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>OpenMP BOF at ECP Community Days</title>
   <link href="https://hpc.social/2022/openmp-bof-at-ecp-community-days/"/>
   <updated>2022-05-11T21:04:13-06:00</updated>
   <id>https://hpc.social/2022/openmp-bof-at-ecp-community-days</id>
   <content type="html">&lt;p&gt;The video recording of the OpenMP BOF at the Exascale Computing Project community event on May 11 is now available.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/2022-ecp-community-bof-days/&quot; rel=&quot;nofollow&quot;&gt;OpenMP BOF at ECP Community Days&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>OpenMP Offload in Applications of the Exascale Computing Project</title>
   <link href="https://hpc.social/2022/openmp-offload-in-applications-of-the-exascale-computing-project/"/>
   <updated>2022-05-06T15:54:38-06:00</updated>
   <id>https://hpc.social/2022/openmp-offload-in-applications-of-the-exascale-computing-project</id>
   <content type="html">&lt;p&gt;This blog post describes the strategy used to implement the OpenMP offload functionality in these DoE projects.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/blog/openmp-offload-in-exascale-computing-applications/&quot; rel=&quot;nofollow&quot;&gt;OpenMP Offload in Applications of the Exascale Computing Project&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>OpenMP ARB Appoints Jack Dongarra to its Board of Directors</title>
   <link href="https://hpc.social/2022/openmp-arb-appoints-jack-dongarra-to-its-board-of-directors/"/>
   <updated>2022-04-28T20:18:57-06:00</updated>
   <id>https://hpc.social/2022/openmp-arb-appoints-jack-dongarra-to-its-board-of-directors</id>
   <content type="html">&lt;p&gt;The OpenMP ARB welcomes Jack Dongarra to its Board of Directors. His insights and guidance will greatly benefit the Board.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/press-release/openmp-arb-appoints-jack-dongarra-to-its-board-of-directors/&quot; rel=&quot;nofollow&quot;&gt;OpenMP ARB Appoints Jack Dongarra to its Board of Directors&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Webinar-  Large-Scale Materials Science Codes Porting Strategies on GPU Architectures, the BerkeleyGW Case Study</title>
   <link href="https://hpc.social/2022/webinar-large-scale-materials-science-codes-porting-strategies-on-gpu-architectures-the-berkeleygw-case-study/"/>
   <updated>2022-04-20T05:15:48-06:00</updated>
   <id>https://hpc.social/2022/webinar-large-scale-materials-science-codes-porting-strategies-on-gpu-architectures-the-berkeleygw-case-study</id>
   <content type="html">&lt;p&gt;This webinar discusses our experiences porting BerkeleyGW to three different GPU programming models (CUDA, OpenACC, and OpenMP Target) with various GPU vendor architectures.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/berkeleygw-case-study/&quot; rel=&quot;nofollow&quot;&gt;Webinar:  Large-Scale Materials Science Codes Porting Strategies on GPU Architectures, the BerkeleyGW Case Study&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>ECP OpenMP Virtual Hackathon 2022</title>
   <link href="https://hpc.social/2022/ecp-openmp-virtual-hackathon-2022/"/>
   <updated>2022-04-08T06:04:45-06:00</updated>
   <id>https://hpc.social/2022/ecp-openmp-virtual-hackathon-2022</id>
   <content type="html">&lt;p&gt;April 8-13. Join us for this hackathon where the goal is to port, optimize and evolve applications towards the latest OpenMP versions&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/past-events/2022-past-events/ecp-openmp-virtual-hackathon-2022/&quot; rel=&quot;nofollow&quot;&gt;ECP OpenMP Virtual Hackathon 2022&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Webinar- Using OpenMP to Harness GPUs for Core-Collapse Supernova Simulations with GenASiS</title>
   <link href="https://hpc.social/2022/webinar-using-openmp-to-harness-gpus-for-core-collapse-supernova-simulations-with-genasis/"/>
   <updated>2022-02-18T01:14:49-07:00</updated>
   <id>https://hpc.social/2022/webinar-using-openmp-to-harness-gpus-for-core-collapse-supernova-simulations-with-genasis</id>
   <content type="html">&lt;p&gt;Join us for a webinar introducing how to use OpenMP to harness the awesome computational power of GPUs with GenASiS for scientific simulations of core-collapse supernovas.&lt;/p&gt;

&lt;p&gt;The post &lt;a href=&quot;https://www.openmp.org/events/webinar-openmp-gpu-genasis/&quot; rel=&quot;nofollow&quot;&gt;Webinar: Using OpenMP to Harness GPUs for Core-Collapse Supernova Simulations with GenASiS&lt;/a&gt; appeared first on &lt;a href=&quot;https://www.openmp.org&quot; rel=&quot;nofollow&quot;&gt;OpenMP&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 

</feed>
