<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Using SYCL to create hash table in Intel® oneAPI DPC++/C++ Compiler</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-DPC-C-Compiler/Using-SYCL-to-create-hash-table/m-p/1582394#M3561</link>
    <description>&lt;P&gt;hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am working to use SYCL to create hash table, similar to the code in following page.&lt;/P&gt;&lt;P&gt;&lt;A href="https://developer.nvidia.com/blog/maximizing-performance-with-massively-parallel-hash-maps-on-gpus/" target="_blank" rel="noopener"&gt;https://developer.nvidia.com/blog/maximizing-performance-with-massively-parallel-hash-maps-on-gpus/&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=""&gt;auto&lt;/SPAN&gt; &lt;SPAN class=""&gt;[&lt;/SPAN&gt;&lt;SPAN class=""&gt;old_k&lt;/SPAN&gt;&lt;SPAN class=""&gt;,&lt;/SPAN&gt;&lt;SPAN class=""&gt; old_v&lt;/SPAN&gt;&lt;SPAN class=""&gt;]&lt;/SPAN&gt; &lt;SPAN class=""&gt;=&lt;/SPAN&gt;&lt;SPAN class=""&gt; buckets&lt;/SPAN&gt;&lt;SPAN class=""&gt;[&lt;/SPAN&gt;&lt;SPAN class=""&gt;i&lt;/SPAN&gt;&lt;SPAN class=""&gt;].&lt;/SPAN&gt;&lt;SPAN class=""&gt;load&lt;/SPAN&gt;&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;memory_order_relaxed&lt;/SPAN&gt;&lt;SPAN class=""&gt;);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class=""&gt;// if the bucket is empty we can attempt to insert the pair&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class=""&gt;if&lt;/SPAN&gt; &lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;old_k &lt;/SPAN&gt;&lt;SPAN class=""&gt;==&lt;/SPAN&gt;&lt;SPAN class=""&gt; empty_sentinel&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt; &lt;SPAN class=""&gt;{&lt;/SPAN&gt; &lt;SPAN class=""&gt;// try to atomically replace the current content of the bucket with the input pair&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN class=""&gt;bool&lt;/SPAN&gt;&lt;SPAN class=""&gt; success &lt;/SPAN&gt;&lt;SPAN class=""&gt;=&lt;/SPAN&gt;&lt;SPAN class=""&gt; buckets&lt;/SPAN&gt;&lt;SPAN class=""&gt;[&lt;/SPAN&gt;&lt;SPAN class=""&gt;i&lt;/SPAN&gt;&lt;SPAN class=""&gt;].&lt;/SPAN&gt;&lt;SPAN class=""&gt;compare_exchange_strong&lt;/SPAN&gt;&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;SPAN class=""&gt;old_k&lt;/SPAN&gt;&lt;SPAN class=""&gt;,&lt;/SPAN&gt;&lt;SPAN class=""&gt; old_v&lt;/SPAN&gt;&lt;SPAN class=""&gt;},&lt;/SPAN&gt; &lt;SPAN class=""&gt;{&lt;/SPAN&gt;&lt;SPAN class=""&gt;k&lt;/SPAN&gt;&lt;SPAN class=""&gt;,&lt;/SPAN&gt;&lt;SPAN class=""&gt;v&lt;/SPAN&gt;&lt;SPAN class=""&gt;},&lt;/SPAN&gt;&lt;SPAN class=""&gt; memory_order_relaxed&lt;/SPAN&gt;&lt;SPAN class=""&gt;);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class=""&gt;if&lt;/SPAN&gt; &lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;success&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt; &lt;SPAN class=""&gt;{&lt;/SPAN&gt; &lt;SPAN class=""&gt;// store was successful&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp;return&lt;/SPAN&gt; &lt;SPAN class=""&gt;true&lt;/SPAN&gt;&lt;SPAN class=""&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class=""&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;To create hash table parallel, will need to compare and exchange key and value pair in one atomic operation. &amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;SYCL supports atomic compare_exchange_strong but only limited to scalar data type. &amp;nbsp;It doesn't support some pair of key and value.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;May I know any way to enable parallel hash table if atomic operation only support scalar data type?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 21 Mar 2024 11:17:10 GMT</pubDate>
    <dc:creator>cmlee</dc:creator>
    <dc:date>2024-03-21T11:17:10Z</dc:date>
    <item>
      <title>Using SYCL to create hash table</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-DPC-C-Compiler/Using-SYCL-to-create-hash-table/m-p/1582394#M3561</link>
      <description>&lt;P&gt;hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am working to use SYCL to create hash table, similar to the code in following page.&lt;/P&gt;&lt;P&gt;&lt;A href="https://developer.nvidia.com/blog/maximizing-performance-with-massively-parallel-hash-maps-on-gpus/" target="_blank" rel="noopener"&gt;https://developer.nvidia.com/blog/maximizing-performance-with-massively-parallel-hash-maps-on-gpus/&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=""&gt;auto&lt;/SPAN&gt; &lt;SPAN class=""&gt;[&lt;/SPAN&gt;&lt;SPAN class=""&gt;old_k&lt;/SPAN&gt;&lt;SPAN class=""&gt;,&lt;/SPAN&gt;&lt;SPAN class=""&gt; old_v&lt;/SPAN&gt;&lt;SPAN class=""&gt;]&lt;/SPAN&gt; &lt;SPAN class=""&gt;=&lt;/SPAN&gt;&lt;SPAN class=""&gt; buckets&lt;/SPAN&gt;&lt;SPAN class=""&gt;[&lt;/SPAN&gt;&lt;SPAN class=""&gt;i&lt;/SPAN&gt;&lt;SPAN class=""&gt;].&lt;/SPAN&gt;&lt;SPAN class=""&gt;load&lt;/SPAN&gt;&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;memory_order_relaxed&lt;/SPAN&gt;&lt;SPAN class=""&gt;);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class=""&gt;// if the bucket is empty we can attempt to insert the pair&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class=""&gt;if&lt;/SPAN&gt; &lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;old_k &lt;/SPAN&gt;&lt;SPAN class=""&gt;==&lt;/SPAN&gt;&lt;SPAN class=""&gt; empty_sentinel&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt; &lt;SPAN class=""&gt;{&lt;/SPAN&gt; &lt;SPAN class=""&gt;// try to atomically replace the current content of the bucket with the input pair&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN class=""&gt;bool&lt;/SPAN&gt;&lt;SPAN class=""&gt; success &lt;/SPAN&gt;&lt;SPAN class=""&gt;=&lt;/SPAN&gt;&lt;SPAN class=""&gt; buckets&lt;/SPAN&gt;&lt;SPAN class=""&gt;[&lt;/SPAN&gt;&lt;SPAN class=""&gt;i&lt;/SPAN&gt;&lt;SPAN class=""&gt;].&lt;/SPAN&gt;&lt;SPAN class=""&gt;compare_exchange_strong&lt;/SPAN&gt;&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;SPAN class=""&gt;old_k&lt;/SPAN&gt;&lt;SPAN class=""&gt;,&lt;/SPAN&gt;&lt;SPAN class=""&gt; old_v&lt;/SPAN&gt;&lt;SPAN class=""&gt;},&lt;/SPAN&gt; &lt;SPAN class=""&gt;{&lt;/SPAN&gt;&lt;SPAN class=""&gt;k&lt;/SPAN&gt;&lt;SPAN class=""&gt;,&lt;/SPAN&gt;&lt;SPAN class=""&gt;v&lt;/SPAN&gt;&lt;SPAN class=""&gt;},&lt;/SPAN&gt;&lt;SPAN class=""&gt; memory_order_relaxed&lt;/SPAN&gt;&lt;SPAN class=""&gt;);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class=""&gt;if&lt;/SPAN&gt; &lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;success&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt; &lt;SPAN class=""&gt;{&lt;/SPAN&gt; &lt;SPAN class=""&gt;// store was successful&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp;return&lt;/SPAN&gt; &lt;SPAN class=""&gt;true&lt;/SPAN&gt;&lt;SPAN class=""&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN class=""&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;To create hash table parallel, will need to compare and exchange key and value pair in one atomic operation. &amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;SYCL supports atomic compare_exchange_strong but only limited to scalar data type. &amp;nbsp;It doesn't support some pair of key and value.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;May I know any way to enable parallel hash table if atomic operation only support scalar data type?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 21 Mar 2024 11:17:10 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-DPC-C-Compiler/Using-SYCL-to-create-hash-table/m-p/1582394#M3561</guid>
      <dc:creator>cmlee</dc:creator>
      <dc:date>2024-03-21T11:17:10Z</dc:date>
    </item>
    <item>
      <title>Re: Using SYCL to create hash table</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-DPC-C-Compiler/Using-SYCL-to-create-hash-table/m-p/1586230#M3590</link>
      <description>&lt;P&gt;sycl support atomic operation using a memory pointer.&amp;nbsp; So, manage to create hash table by storing all key/value into some memory buffer.&amp;nbsp; &amp;nbsp;When insert the hash to the hash table, will use compare_exchange_strong with the pointer of the memory location that contains the key/value.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 04 Apr 2024 08:41:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-DPC-C-Compiler/Using-SYCL-to-create-hash-table/m-p/1586230#M3590</guid>
      <dc:creator>cmlee</dc:creator>
      <dc:date>2024-04-04T08:41:00Z</dc:date>
    </item>
  </channel>
</rss>

