publish two Intel extensions: cl_intel_subgroups_char cl_intel_subgroups_long
diff --git a/extensions/clext.php b/extensions/clext.php index 5846c5d..39280b8 100644 --- a/extensions/clext.php +++ b/extensions/clext.php
@@ -115,4 +115,8 @@ </li> <li value=58><a href="extensions/arm/cl_arm_job_slot_selection.txt">cl_arm_job_slot_selection</a> </li> +<li value=59><a href="extensions/intel/cl_intel_subgroups_char.html">cl_intel_subgroups_char</a> +</li> +<li value=60><a href="extensions/intel/cl_intel_subgroups_long.html">cl_intel_subgroups_long</a> +</li> </ol>
diff --git a/extensions/intel/cl_intel_subgroups_char.html b/extensions/intel/cl_intel_subgroups_char.html new file mode 100644 index 0000000..2ac37c5 --- /dev/null +++ b/extensions/intel/cl_intel_subgroups_char.html
@@ -0,0 +1,1551 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<meta charset="UTF-8"> +<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]--> +<meta name="viewport" content="width=device-width, initial-scale=1.0"> +<meta name="generator" content="Asciidoctor 1.5.8"> +<title>cl_intel_subgroups_char</title> +<style> +/*! normalize.css v2.1.2 | MIT License | git.io/normalize */ +/* ========================================================================== HTML5 display definitions ========================================================================== */ +/** Correct `block` display not defined in IE 8/9. */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; } + +/** Correct `inline-block` display not defined in IE 8/9. */ +audio, canvas, video { display: inline-block; } + +/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */ +audio:not([controls]) { display: none; height: 0; } + +/** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */ +[hidden], template { display: none; } + +script { display: none !important; } + +/* ========================================================================== Base ========================================================================== */ +/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */ +html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } + +/** Remove default margin. */ +body { margin: 0; } + +/* ========================================================================== Links ========================================================================== */ +/** Remove the gray background color from active links in IE 10. */ +a { background: transparent; } + +/** Address `outline` inconsistency between Chrome and other browsers. */ +a:focus { outline: thin dotted; } + +/** Improve readability when focused and also mouse hovered in all browsers. */ +a:active, a:hover { outline: 0; } + +/* ========================================================================== Typography ========================================================================== */ +/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */ +h1 { font-size: 2em; margin: 0.67em 0; } + +/** Address styling not present in IE 8/9, Safari 5, and Chrome. */ +abbr[title] { border-bottom: 1px dotted; } + +/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */ +b, strong { font-weight: bold; } + +/** Address styling not present in Safari 5 and Chrome. */ +dfn { font-style: italic; } + +/** Address differences between Firefox and other browsers. */ +hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } + +/** Address styling not present in IE 8/9. */ +mark { background: #ff0; color: #000; } + +/** Correct font family set oddly in Safari 5 and Chrome. */ +code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; } + +/** Improve readability of pre-formatted text in all browsers. */ +pre { white-space: pre-wrap; } + +/** Set consistent quote types. */ +q { quotes: "\201C" "\201D" "\2018" "\2019"; } + +/** Address inconsistent and variable font size in all browsers. */ +small { font-size: 80%; } + +/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */ +sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } + +sup { top: -0.5em; } + +sub { bottom: -0.25em; } + +/* ========================================================================== Embedded content ========================================================================== */ +/** Remove border when inside `a` element in IE 8/9. */ +img { border: 0; } + +/** Correct overflow displayed oddly in IE 9. */ +svg:not(:root) { overflow: hidden; } + +/* ========================================================================== Figures ========================================================================== */ +/** Address margin not present in IE 8/9 and Safari 5. */ +figure { margin: 0; } + +/* ========================================================================== Forms ========================================================================== */ +/** Define consistent border, margin, and padding. */ +fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } + +/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */ +legend { border: 0; /* 1 */ padding: 0; /* 2 */ } + +/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */ +button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ } + +/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */ +button, input { line-height: normal; } + +/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */ +button, select { text-transform: none; } + +/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */ +button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ } + +/** Re-set default cursor for disabled elements. */ +button[disabled], html input[disabled] { cursor: default; } + +/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */ +input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } + +/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */ +input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; } + +/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */ +input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } + +/** Remove inner padding and border in Firefox 4+. */ +button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } + +/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */ +textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ } + +/* ========================================================================== Tables ========================================================================== */ +/** Remove most spacing between table cells. */ +table { border-collapse: collapse; border-spacing: 0; } + +meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; } + +meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; } + +meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; } + +*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } + +html, body { font-size: 100%; } + +body { background: white; color: #222222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; } + +a:hover { cursor: pointer; } + +img, object, embed { max-width: 100%; height: auto; } + +object, embed { height: 100%; } + +img { -ms-interpolation-mode: bicubic; } + +#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; } + +.left { float: left !important; } + +.right { float: right !important; } + +.text-left { text-align: left !important; } + +.text-right { text-align: right !important; } + +.text-center { text-align: center !important; } + +.text-justify { text-align: justify !important; } + +.hide { display: none; } + +.antialiased { -webkit-font-smoothing: antialiased; } + +img { display: inline-block; vertical-align: middle; } + +textarea { height: auto; min-height: 50px; } + +select { width: 100%; } + +object, svg { display: inline-block; vertical-align: middle; } + +.center { margin-left: auto; margin-right: auto; } + +.spread { width: 100%; } + +p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; } + +.subheader, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.4; color: black; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; } + +/* Typography resets */ +div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; } + +/* Default Link Styles */ +a { color: #0068b0; text-decoration: none; line-height: inherit; } +a:hover, a:focus { color: #333333; } +a img { border: none; } + +/* Default paragraph styles */ +p { font-family: Noto, sans-serif; font-weight: normal; font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; text-rendering: optimizeLegibility; } +p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; } + +/* Default header styles */ +h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: Noto, sans-serif; font-weight: normal; font-style: normal; color: black; text-rendering: optimizeLegibility; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.2125em; } +h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #4d4d4d; line-height: 0; } + +h1 { font-size: 2.125em; } + +h2 { font-size: 1.6875em; } + +h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; } + +h4 { font-size: 1.125em; } + +h5 { font-size: 1.125em; } + +h6 { font-size: 1em; } + +hr { border: solid #dddddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; } + +/* Helpful Typography Defaults */ +em, i { font-style: italic; line-height: inherit; } + +strong, b { font-weight: bold; line-height: inherit; } + +small { font-size: 60%; line-height: inherit; } + +code { font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; color: #264357; } + +/* Lists */ +ul, ol, dl { font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; list-style-position: outside; font-family: Noto, sans-serif; } + +ul, ol { margin-left: 1.5em; } +ul.no-bullet, ol.no-bullet { margin-left: 1.5em; } + +/* Unordered Lists */ +ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ } +ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; } +ul.square { list-style-type: square; } +ul.circle { list-style-type: circle; } +ul.disc { list-style-type: disc; } +ul.no-bullet { list-style: none; } + +/* Ordered Lists */ +ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; } + +/* Definition Lists */ +dl dt { margin-bottom: 0.3em; font-weight: bold; } +dl dd { margin-bottom: 0.75em; } + +/* Abbreviations */ +abbr, acronym { text-transform: uppercase; font-size: 90%; color: black; border-bottom: 1px dotted #dddddd; cursor: help; } + +abbr { text-transform: none; } + +/* Blockquotes */ +blockquote { margin: 0 0 0.75em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #dddddd; } +blockquote cite { display: block; font-size: 0.8125em; color: #5e93b8; } +blockquote cite:before { content: "\2014 \0020"; } +blockquote cite a, blockquote cite a:visited { color: #5e93b8; } + +blockquote, blockquote p { line-height: 1.6; color: #333333; } + +/* Microformats */ +.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #dddddd; padding: 0.625em 0.75em; } +.vcard li { margin: 0; display: block; } +.vcard .fn { font-weight: bold; font-size: 0.9375em; } + +.vevent .summary { font-weight: bold; } +.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; } + +@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; } + h1 { font-size: 2.75em; } + h2 { font-size: 2.3125em; } + h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; } + h4 { font-size: 1.4375em; } } +/* Tables */ +table { background: white; margin-bottom: 1.25em; border: solid 1px #d8d8ce; } +table thead, table tfoot { background: -webkit-linear-gradient(top, #add386, #90b66a); font-weight: bold; } +table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: white; text-align: left; } +table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #6d6e71; } +table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #edf2f2; } +table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; } + +body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; tab-size: 4; } + +h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; } + +a:hover, a:focus { text-decoration: underline; } + +.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; } +.clearfix:after, .float-group:after { clear: both; } + +*:not(pre) > code { font-size: inherit; font-style: normal !important; letter-spacing: 0; padding: 0; background-color: white; -webkit-border-radius: 0; border-radius: 0; line-height: inherit; word-wrap: break-word; } +*:not(pre) > code.nobreak { word-wrap: normal; } +*:not(pre) > code.nowrap { white-space: nowrap; } + +pre, pre > code { line-height: 1.6; color: #264357; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; } + +em em { font-style: normal; } + +strong strong { font-weight: normal; } + +.keyseq { color: #333333; } + +kbd { font-family: Consolas, "Liberation Mono", Courier, monospace; display: inline-block; color: black; font-size: 0.65em; line-height: 1.45; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; margin: 0 0.15em; padding: 0.2em 0.5em; vertical-align: middle; position: relative; top: -0.1em; white-space: nowrap; } + +.keyseq kbd:first-child { margin-left: 0; } + +.keyseq kbd:last-child { margin-right: 0; } + +.menuseq, .menuref { color: #000; } + +.menuseq b:not(.caret), .menuref { font-weight: inherit; } + +.menuseq { word-spacing: -0.02em; } +.menuseq b.caret { font-size: 1.25em; line-height: 0.8; } +.menuseq i.caret { font-weight: bold; text-align: center; width: 0.45em; } + +b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; } + +b.button:before { content: "["; padding: 0 3px 0 2px; } + +b.button:after { content: "]"; padding: 0 2px 0 3px; } + +#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 1.5em; padding-right: 1.5em; } +#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; } +#header:after, #content:after, #footnotes:after, #footer:after { clear: both; } + +#content { margin-top: 1.25em; } + +#content:before { content: none; } + +#header > h1:first-child { color: black; margin-top: 2.25rem; margin-bottom: 0; } +#header > h1:first-child + #toc { margin-top: 8px; border-top: 1px solid #dddddd; } +#header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid #dddddd; padding-bottom: 8px; } +#header .details { border-bottom: 1px solid #dddddd; line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #5e93b8; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; } +#header .details span:first-child { margin-left: -0.125em; } +#header .details span.email a { color: #333333; } +#header .details br { display: none; } +#header .details br + span:before { content: "\00a0\2013\00a0"; } +#header .details br + span.author:before { content: "\00a0\22c5\00a0"; color: #333333; } +#header .details br + span#revremark:before { content: "\00a0|\00a0"; } +#header #revnumber { text-transform: capitalize; } +#header #revnumber:after { content: "\00a0"; } + +#content > h1:first-child:not([class]) { color: black; border-bottom: 1px solid #dddddd; padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; } + +#toc { border-bottom: 0 solid #dddddd; padding-bottom: 0.5em; } +#toc > ul { margin-left: 0.125em; } +#toc ul.sectlevel0 > li > a { font-style: italic; } +#toc ul.sectlevel0 ul.sectlevel1 { margin: 0.5em 0; } +#toc ul { font-family: Noto, sans-serif; list-style-type: none; } +#toc li { line-height: 1.3334; margin-top: 0.3334em; } +#toc a { text-decoration: none; } +#toc a:active { text-decoration: underline; } + +#toctitle { color: black; font-size: 1.2em; } + +@media only screen and (min-width: 768px) { #toctitle { font-size: 1.375em; } + body.toc2 { padding-left: 15em; padding-right: 0; } + #toc.toc2 { margin-top: 0 !important; background-color: white; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #dddddd; border-top-width: 0 !important; border-bottom-width: 0 !important; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; } + #toc.toc2 #toctitle { margin-top: 0; margin-bottom: 0.8rem; font-size: 1.2em; } + #toc.toc2 > ul { font-size: 0.9em; margin-bottom: 0; } + #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; } + #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } + body.toc2.toc-right { padding-left: 0; padding-right: 15em; } + body.toc2.toc-right #toc.toc2 { border-right-width: 0; border-left: 1px solid #dddddd; left: auto; right: 0; } } +@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; } + #toc.toc2 { width: 20em; } + #toc.toc2 #toctitle { font-size: 1.375em; } + #toc.toc2 > ul { font-size: 0.95em; } + #toc.toc2 ul ul { padding-left: 1.25em; } + body.toc2.toc-right { padding-left: 0; padding-right: 20em; } } +#content #toc { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: white; -webkit-border-radius: 0; border-radius: 0; } +#content #toc > :first-child { margin-top: 0; } +#content #toc > :last-child { margin-bottom: 0; } + +#footer { max-width: 100%; background-color: none; padding: 1.25em; } + +#footer-text { color: black; line-height: 1.44; } + +#content { margin-bottom: 0.625em; } + +.sect1 { padding-bottom: 0.625em; } + +@media only screen and (min-width: 768px) { #content { margin-bottom: 1.25em; } + .sect1 { padding-bottom: 1.25em; } } +.sect1:last-child { padding-bottom: 0; } + +.sect1 + .sect1 { border-top: 0 solid #dddddd; } + +#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; z-index: 1001; width: 1.5ex; margin-left: -1.5ex; display: block; text-decoration: none !important; visibility: hidden; text-align: center; font-weight: normal; } +#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: "\00A7"; font-size: 0.85em; display: block; padding-top: 0.1em; } +#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; } +#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: black; text-decoration: none; } +#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: black; } + +.audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .videoblock { margin-bottom: 1.25em; } + +.admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; } + +table.tableblock > caption.title { white-space: nowrap; overflow: visible; max-width: 0; } + +.paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: black; } + +table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; } + +.admonitionblock > table { border-collapse: separate; border: 0; background: none; width: 100%; } +.admonitionblock > table td.icon { text-align: center; width: 80px; } +.admonitionblock > table td.icon img { max-width: initial; } +.admonitionblock > table td.icon .title { font-weight: bold; font-family: Noto, sans-serif; text-transform: uppercase; } +.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #dddddd; color: #5e93b8; } +.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; } + +.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: white; -webkit-border-radius: 0; border-radius: 0; } +.exampleblock > .content > :first-child { margin-top: 0; } +.exampleblock > .content > :last-child { margin-bottom: 0; } + +.sidebarblock { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: white; -webkit-border-radius: 0; border-radius: 0; } +.sidebarblock > :first-child { margin-top: 0; } +.sidebarblock > :last-child { margin-bottom: 0; } +.sidebarblock > .content > .title { color: black; margin-top: 0; } + +.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; } + +.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { background: #eeeeee; } +.sidebarblock .literalblock pre, .sidebarblock .listingblock pre:not(.highlight), .sidebarblock .listingblock pre[class="highlight"], .sidebarblock .listingblock pre[class^="highlight "], .sidebarblock .listingblock pre.CodeRay, .sidebarblock .listingblock pre.prettyprint { background: #f2f1f1; } + +.literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border: 1px hidden #666666; -webkit-border-radius: 0; border-radius: 0; word-wrap: break-word; padding: 1.25em 1.5625em 1.125em 1.5625em; font-size: 0.8125em; } +.literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; } +@media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.90625em; } } +@media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 1em; } } + +.literalblock.output pre { color: #eeeeee; background-color: #264357; } + +.listingblock pre.highlightjs { padding: 0; } +.listingblock pre.highlightjs > code { padding: 1.25em 1.5625em 1.125em 1.5625em; -webkit-border-radius: 0; border-radius: 0; } + +.listingblock > .content { position: relative; } + +.listingblock code[data-lang]:before { display: none; content: attr(data-lang); position: absolute; font-size: 0.75em; top: 0.425rem; right: 0.5rem; line-height: 1; text-transform: uppercase; color: #999; } + +.listingblock:hover code[data-lang]:before { display: block; } + +.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; } + +.listingblock.terminal pre .command:not([data-prompt]):before { content: "$"; } + +table.pyhltable { border-collapse: separate; border: 0; margin-bottom: 0; background: none; } + +table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; line-height: 1.6; } + +table.pyhltable td.code { padding-left: .75em; padding-right: 0; } + +pre.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #dddddd; } + +pre.pygments .lineno { display: inline-block; margin-right: .25em; } + +table.pyhltable .linenodiv { background: none !important; padding-right: 0 !important; } + +.quoteblock { margin: 0 1em 0.75em 1.5em; display: table; } +.quoteblock > .title { margin-left: -1.5em; margin-bottom: 0.75em; } +.quoteblock blockquote, .quoteblock blockquote p { color: #333333; font-size: 1.15rem; line-height: 1.75; word-spacing: 0.1em; letter-spacing: 0; font-style: italic; text-align: justify; } +.quoteblock blockquote { margin: 0; padding: 0; border: 0; } +.quoteblock blockquote:before { content: "\201c"; float: left; font-size: 2.75em; font-weight: bold; line-height: 0.6em; margin-left: -0.6em; color: black; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); } +.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; } +.quoteblock .attribution { margin-top: 0.5em; margin-right: 0.5ex; text-align: right; } +.quoteblock .quoteblock { margin-left: 0; margin-right: 0; padding: 0.5em 0; border-left: 3px solid #5e93b8; } +.quoteblock .quoteblock blockquote { padding: 0 0 0 0.75em; } +.quoteblock .quoteblock blockquote:before { display: none; } + +.verseblock { margin: 0 1em 0.75em 1em; } +.verseblock pre { font-family: "Open Sans", "DejaVu Sans", sans; font-size: 1.15rem; color: #333333; font-weight: 300; text-rendering: optimizeLegibility; } +.verseblock pre strong { font-weight: 400; } +.verseblock .attribution { margin-top: 1.25rem; margin-left: 0.5ex; } + +.quoteblock .attribution, .verseblock .attribution { font-size: 0.8125em; line-height: 1.45; font-style: italic; } +.quoteblock .attribution br, .verseblock .attribution br { display: none; } +.quoteblock .attribution cite, .verseblock .attribution cite { display: block; letter-spacing: -0.025em; color: #5e93b8; } + +.quoteblock.abstract { margin: 0 0 0.75em 0; display: block; } +.quoteblock.abstract blockquote, .quoteblock.abstract blockquote p { text-align: left; word-spacing: 0; } +.quoteblock.abstract blockquote:before, .quoteblock.abstract blockquote p:first-of-type:before { display: none; } + +table.tableblock { max-width: 100%; border-collapse: separate; } +table.tableblock td > .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; } + +table.tableblock, th.tableblock, td.tableblock { border: 0 solid #d8d8ce; } + +table.grid-all > thead > tr > .tableblock, table.grid-all > tbody > tr > .tableblock { border-width: 0 1px 1px 0; } + +table.grid-all > tfoot > tr > .tableblock { border-width: 1px 1px 0 0; } + +table.grid-cols > * > tr > .tableblock { border-width: 0 1px 0 0; } + +table.grid-rows > thead > tr > .tableblock, table.grid-rows > tbody > tr > .tableblock { border-width: 0 0 1px 0; } + +table.grid-rows > tfoot > tr > .tableblock { border-width: 1px 0 0 0; } + +table.grid-all > * > tr > .tableblock:last-child, table.grid-cols > * > tr > .tableblock:last-child { border-right-width: 0; } + +table.grid-all > tbody > tr:last-child > .tableblock, table.grid-all > thead:last-child > tr > .tableblock, table.grid-rows > tbody > tr:last-child > .tableblock, table.grid-rows > thead:last-child > tr > .tableblock { border-bottom-width: 0; } + +table.frame-all { border-width: 1px; } + +table.frame-sides { border-width: 0 1px; } + +table.frame-topbot { border-width: 1px 0; } + +th.halign-left, td.halign-left { text-align: left; } + +th.halign-right, td.halign-right { text-align: right; } + +th.halign-center, td.halign-center { text-align: center; } + +th.valign-top, td.valign-top { vertical-align: top; } + +th.valign-bottom, td.valign-bottom { vertical-align: bottom; } + +th.valign-middle, td.valign-middle { vertical-align: middle; } + +table thead th, table tfoot th { font-weight: bold; } + +tbody tr th { display: table-cell; line-height: 1.4; background: -webkit-linear-gradient(top, #add386, #90b66a); } + +tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: white; font-weight: bold; } + +p.tableblock > code:only-child { background: none; padding: 0; } + +p.tableblock { font-size: 1em; } + +td > div.verse { white-space: pre; } + +ol { margin-left: 1.75em; } + +ul li ol { margin-left: 1.5em; } + +dl dd { margin-left: 1.125em; } + +dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; } + +ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.375em; } + +ul.checklist, ul.none, ol.none, ul.no-bullet, ol.no-bullet, ol.unnumbered, ul.unstyled, ol.unstyled { list-style-type: none; } + +ul.no-bullet, ol.no-bullet, ol.unnumbered { margin-left: 0.625em; } + +ul.unstyled, ol.unstyled { margin-left: 0; } + +ul.checklist { margin-left: 0.625em; } + +ul.checklist li > p:first-child > .fa-square-o:first-child, ul.checklist li > p:first-child > .fa-check-square-o:first-child { width: 1.25em; font-size: 0.8em; position: relative; bottom: 0.125em; } + +ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; } + +ul.inline { display: -ms-flexbox; display: -webkit-box; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; list-style: none; margin: 0 0 0.375em -0.75em; } + +ul.inline > li { margin-left: 0.75em; } + +.unstyled dl dt { font-weight: normal; font-style: normal; } + +ol.arabic { list-style-type: decimal; } + +ol.decimal { list-style-type: decimal-leading-zero; } + +ol.loweralpha { list-style-type: lower-alpha; } + +ol.upperalpha { list-style-type: upper-alpha; } + +ol.lowerroman { list-style-type: lower-roman; } + +ol.upperroman { list-style-type: upper-roman; } + +ol.lowergreek { list-style-type: lower-greek; } + +.hdlist > table, .colist > table { border: 0; background: none; } +.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; } + +td.hdlist1, td.hdlist2 { vertical-align: top; padding: 0 0.625em; } + +td.hdlist1 { font-weight: bold; padding-bottom: 0.75em; } + +.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; } + +.colist > table tr > td:first-of-type { padding: 0.4em 0.75em 0 0.75em; line-height: 1; vertical-align: top; } +.colist > table tr > td:first-of-type img { max-width: initial; } +.colist > table tr > td:last-of-type { padding: 0.25em 0; } + +.thumb, .th { line-height: 0; display: inline-block; border: solid 4px white; -webkit-box-shadow: 0 0 0 1px #dddddd; box-shadow: 0 0 0 1px #dddddd; } + +.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; } +.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; } +.imageblock > .title { margin-bottom: 0; } +.imageblock.thumb, .imageblock.th { border-width: 6px; } +.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; } + +.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; } +.image.left { margin-right: 0.625em; } +.image.right { margin-left: 0.625em; } + +a.image { text-decoration: none; display: inline-block; } +a.image object { pointer-events: none; } + +sup.footnote, sup.footnoteref { font-size: 0.875em; position: static; vertical-align: super; } +sup.footnote a, sup.footnoteref a { text-decoration: none; } +sup.footnote a:active, sup.footnoteref a:active { text-decoration: underline; } + +#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; } +#footnotes hr { width: 20%; min-width: 6.25em; margin: -0.25em 0 0.75em 0; border-width: 1px 0 0 0; } +#footnotes .footnote { padding: 0 0.375em 0 0.225em; line-height: 1.3334; font-size: 0.875em; margin-left: 1.2em; margin-bottom: 0.2em; } +#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; margin-left: -1.05em; } +#footnotes .footnote:last-of-type { margin-bottom: 0; } +#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; } + +.gist .file-data > table { border: 0; background: #fff; width: 100%; margin-bottom: 0; } +.gist .file-data > table td.line-data { width: 99%; } + +div.unbreakable { page-break-inside: avoid; } + +.big { font-size: larger; } + +.small { font-size: smaller; } + +.underline { text-decoration: underline; } + +.overline { text-decoration: overline; } + +.line-through { text-decoration: line-through; } + +.aqua { color: #00bfbf; } + +.aqua-background { background-color: #00fafa; } + +.black { color: black; } + +.black-background { background-color: black; } + +.blue { color: #0000bf; } + +.blue-background { background-color: #0000fa; } + +.fuchsia { color: #bf00bf; } + +.fuchsia-background { background-color: #fa00fa; } + +.gray { color: #606060; } + +.gray-background { background-color: #7d7d7d; } + +.green { color: #006000; } + +.green-background { background-color: #007d00; } + +.lime { color: #00bf00; } + +.lime-background { background-color: #00fa00; } + +.maroon { color: #600000; } + +.maroon-background { background-color: #7d0000; } + +.navy { color: #000060; } + +.navy-background { background-color: #00007d; } + +.olive { color: #606000; } + +.olive-background { background-color: #7d7d00; } + +.purple { color: #600060; } + +.purple-background { background-color: #7d007d; } + +.red { color: #bf0000; } + +.red-background { background-color: #fa0000; } + +.silver { color: #909090; } + +.silver-background { background-color: #bcbcbc; } + +.teal { color: #006060; } + +.teal-background { background-color: #007d7d; } + +.white { color: #bfbfbf; } + +.white-background { background-color: #fafafa; } + +.yellow { color: #bfbf00; } + +.yellow-background { background-color: #fafa00; } + +span.icon > .fa { cursor: default; } +a span.icon > .fa { cursor: inherit; } + +.admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; } +.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #29475c; } +.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; } +.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; } +.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; } +.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; } + +.conum[data-value] { display: inline-block; color: #fff !important; background-color: black; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; font-size: 0.75em; width: 1.67em; height: 1.67em; line-height: 1.67em; font-family: "Open Sans", "DejaVu Sans", sans-serif; font-style: normal; font-weight: bold; } +.conum[data-value] * { color: #fff !important; } +.conum[data-value] + b { display: none; } +.conum[data-value]:after { content: attr(data-value); } +pre .conum[data-value] { position: relative; top: -0.125em; } + +b.conum * { color: inherit !important; } + +.conum:not([data-value]):empty { display: none; } + +h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { border-bottom: 1px solid #dddddd; } + +.sect1 { padding-bottom: 0; } + +#toctitle { color: #00406F; font-weight: normal; margin-top: 1.5em; } + +.sidebarblock { border-color: #aaa; } + +code { -webkit-border-radius: 4px; border-radius: 4px; } + +p.tableblock.header { color: #6d6e71; } + +.literalblock pre, .listingblock pre { background: #eeeeee; } + +</style> +<link rel="stylesheet" href="../katex/katex.min.css"> +<script src="../katex/katex.min.js"></script> +<script src="../katex/contrib/auto-render.min.js"></script> + <!-- Use KaTeX to render math once document is loaded, see + https://github.com/Khan/KaTeX/tree/master/contrib/auto-render --> +<script> + document.addEventListener("DOMContentLoaded", function () { + renderMathInElement( + document.body, + { + delimiters: [ + { left: "$$", right: "$$", display: true}, + { left: "\\[", right: "\\]", display: true}, + { left: "$", right: "$", display: false}, + { left: "\\(", right: "\\)", display: false} + ] + } + ); + }); +</script></head> +<body class="book"> +<div id="header"> +<h1>cl_intel_subgroups_char</h1> +<div class="details"> +<span id="revnumber">version V2.2-11-93-g2eccabe,</span> +<span id="revdate">Fri, 13 Mar 2020 20:13:55 +0000</span> +<br><span id="revremark">from git branch: cl_intel_subgroups_char_long commit: 2eccabe9a2ee707c76ba080b99c0edfe95f199a1</span> +</div> +</div> +<div id="content"> +<div class="sect1"> +<h2 id="_name_strings">Name Strings</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p><code>cl_intel_subgroups_char</code></p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_contact">Contact</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Ben Ashbaugh, Intel (ben 'dot' ashbaugh 'at' intel 'dot' com)</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_contributors">Contributors</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Ben Ashbaugh, Intel<br> +Fangwen Fu, Intel<br> +Sabareesh Ganapathy, Intel<br> +Junjie Gu, Intel<br> +Konrad Trifunovic, Intel</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_notice">Notice</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Copyright (c) 2020 Intel Corporation. All rights reserved.</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_status">Status</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Final Draft</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_version">Version</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Built On: 2020-03-13<br> +Revision: 1</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_dependencies">Dependencies</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>OpenCL 1.2 and support for <code>cl_intel_subgroups</code> is required. +This extension is written against the OpenCL API Specification Version 2.2 (revision v2.2-7), against the OpenCL C Language Specification Version 2.0 (revision v2.2-7), and against version 4 of the <code>cl_intel_subgroups</code> specification.</p> +</div> +<div class="paragraph"> +<p>This extension requires OpenCL support for SPIR-V, either via OpenCL 2.1 or via the <code>cl_khr_il_program</code> extension.</p> +</div> +<div class="paragraph"> +<p>This extension interacts with the <code>cl_intel_spirv_subgroups</code> extension.</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_overview">Overview</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>The goal of this extension is to allow programmers to improve the performance of applications operating on 8-bit data types by extending the subgroup functions described in the <code>cl_intel_subgroups</code> extension to support 8-bit integer data types (<code>chars</code> and <code>uchars</code>). +Specifically, the extension:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Extends the subgroup broadcast function to allow 8-bit integer values to be broadcast from one work item to all other work items in the subgroup.</p> +</li> +<li> +<p>Extends the subgroup scan and reduction functions to operate on 8-bit integer data types.</p> +</li> +<li> +<p>Extends the Intel subgroup shuffle functions to allow arbitrarily exchanging 8-bit integer values among work items in the subgroup.</p> +</li> +<li> +<p>Extends the Intel subgroup block read and write functions to allow reading and writing 8-bit integer data from images and buffers.</p> +</li> +</ul> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_new_api_functions">New API Functions</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>None.</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_new_api_enums">New API Enums</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>None.</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_new_opencl_c_functions">New OpenCL C Functions</h2> +<div class="sectionbody"> +<div class="dlist"> +<dl> +<dt class="hdlist1">Add <code>char</code> and <code>uchar</code> to the list of supported data types for the subgroup broadcast, scan, and reduction functions: </dt> +<dd> +<div class="openblock"> +<div class="content"> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code>char intel_sub_group_broadcast( char x, uint sub_group_local_id ) +uchar intel_sub_group_broadcast( uchar x, uint sub_group_local_id ) + +char intel_sub_group_reduce_add( char x ) +uchar intel_sub_group_reduce_add( uchar x ) +char intel_sub_group_reduce_min( char x ) +uchar intel_sub_group_reduce_min( uchar x ) +char intel_sub_group_reduce_max( char x ) +uchar intel_sub_group_reduce_max( uchar x ) + +char intel_sub_group_scan_exclusive_add( char x ) +uchar intel_sub_group_scan_exclusive_add( uchar x ) +char intel_sub_group_scan_exclusive_min( char x ) +uchar intel_sub_group_scan_exclusive_min( uchar x ) +char intel_sub_group_scan_exclusive_max( char x ) +uchar intel_sub_group_scan_exclusive_max( uchar x ) + +char intel_sub_group_scan_inclusive_add( char x ) +uchar intel_sub_group_scan_inclusive_add( uchar x ) +char intel_sub_group_scan_inclusive_min( char x ) +uchar intel_sub_group_scan_inclusive_min( uchar x ) +char intel_sub_group_scan_inclusive_max( char x ) +uchar intel_sub_group_scan_inclusive_max( uchar x )</code></pre> +</div> +</div> +</div> +</div> +</dd> +<dt class="hdlist1">Add <code>char</code>, <code>char2</code>, <code>char4</code>, <code>char8</code>, <code>char16</code>, <code>uchar</code>, <code>uchar2</code>, <code>uchar4</code>, <code>uchar8</code>, and <code>uchar16</code> to the list of <code>gentype</code> data types supported by the <code>sub_group_shuffle</code>, <code>sub_group_shuffle_down</code>, <code>sub_group_shuffle_up</code>, and <code>sub_group_shuffle_xor</code> functions: </dt> +<dd> +<div class="openblock"> +<div class="content"> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code>gentype intel_sub_group_shuffle( gentype data, uint c ) +gentype intel_sub_group_shuffle_down( + gentype current, gentype next, uint delta ) +gentype intel_sub_group_shuffle_up( + gentype previous, gentype current, uint delta ) +gentype intel_sub_group_shuffle_xor( gentype data, uint value )</code></pre> +</div> +</div> +</div> +</div> +</dd> +<dt class="hdlist1">Add <code>uchar</code> variants of the subgroup block read and write functions: </dt> +<dd> +<div class="openblock"> +<div class="content"> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code>uchar intel_sub_group_block_read_uc( const __global uchar* p ) +uchar2 intel_sub_group_block_read_uc2( const __global uchar* p ) +uchar4 intel_sub_group_block_read_uc4( const __global uchar* p ) +uchar8 intel_sub_group_block_read_uc8( const __global uchar* p ) +uchar16 intel_sub_group_block_read_uc16( const __global uchar* p ) +uchar intel_sub_group_block_read_uc( image2d_t image, int2 byte_coord ) +uchar2 intel_sub_group_block_read_uc2( image2d_t image, int2 byte_coord ) +uchar4 intel_sub_group_block_read_uc4( image2d_t image, int2 byte_coord ) +uchar8 intel_sub_group_block_read_uc8( image2d_t image, int2 byte_coord ) +uchar16 intel_sub_group_block_read_uc16( image1d_t image, int2 byte_coord ) + +void intel_sub_group_block_write_uc( __global uchar* p, uchar data ) +void intel_sub_group_block_write_uc2( __global uchar* p, uchar2 data ) +void intel_sub_group_block_write_uc4( __global uchar* p, uchar4 data ) +void intel_sub_group_block_write_uc8( __global uchar* p, uchar8 data ) +void intel_sub_group_block_write_uc16( __global uchar* p, uchar16 data ) +void intel_sub_group_block_write_uc( image2d_t image, int2 byte_coord, uchar data ) +void intel_sub_group_block_write_uc2( image2d_t image, int2 byte_coord, uchar2 data ) +void intel_sub_group_block_write_uc4( image2d_t image, int2 byte_coord, uchar4 data ) +void intel_sub_group_block_write_uc8( image2d_t image, int2 byte_coord, uchar8 data ) +void intel_sub_group_block_write_uc16( image2d_t image, int2 byte_coord, uchar16 data )</code></pre> +</div> +</div> +</div> +</div> +</dd> +<dt class="hdlist1">For naming consistency, also add suffixed aliases of the <code>uint</code> subgroup block read and write functions described in the <code>cl_intel_subgroups</code> extension: </dt> +<dd> +<div class="openblock"> +<div class="content"> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code>uint intel_sub_group_block_read_ui( const __global uint* p ) +uint2 intel_sub_group_block_read_ui2( const __global uint* p ) +uint4 intel_sub_group_block_read_ui4( const __global uint* p ) +uint8 intel_sub_group_block_read_ui8( const __global uint* p ) +uint intel_sub_group_block_read_ui( image2d_t image, int2 byte_coord ) +uint2 intel_sub_group_block_read_ui2( image2d_t image, int2 byte_coord ) +uint4 intel_sub_group_block_read_ui4( image2d_t image, int2 byte_coord ) +uint8 intel_sub_group_block_read_ui8( image2d_t image, int2 byte_coord ) + +void intel_sub_group_block_write_ui( __global uint* p, uint data ) +void intel_sub_group_block_write_ui2( __global uint* p, uint2 data ) +void intel_sub_group_block_write_ui4( __global uint* p, uint4 data ) +void intel_sub_group_block_write_ui8( __global uint* p, uint8 data ) +void intel_sub_group_block_write_ui( image2d_t image, int2 byte_coord, uint data ) +void intel_sub_group_block_write_ui2( image2d_t image, int2 byte_coord, uint2 data ) +void intel_sub_group_block_write_ui4( image2d_t image, int2 byte_coord, uint4 data ) +void intel_sub_group_block_write_ui8( image2d_t image, int2 byte_coord, uint8 data )</code></pre> +</div> +</div> +</div> +</div> +</dd> +</dl> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_modifications_to_the_opencl_c_specification">Modifications to the OpenCL C Specification</h2> +<div class="sectionbody"> +<div class="sect2"> +<h3 id="_additions_to_section_6_13_15_work_group_functions">Additions to Section 6.13.15 - "Work Group Functions"</h3> +<div class="dlist"> +<dl> +<dt class="hdlist1">Add <code>char</code> and <code>uchar</code> to the list of supported data types for the subgroup broadcast, scan, and reduction functions: </dt> +<dd> +<div class="openblock"> +<div class="content"> +<table class="tableblock frame-all grid-all stretch"> +<colgroup> +<col style="width: 66.6666%;"> +<col style="width: 33.3334%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top"><strong>Function</strong></th> +<th class="tableblock halign-left valign-top"><strong>Description</strong></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">gentype sub_group_broadcast( + gentype x, + uint sub_group_local_id ) + +char intel_sub_group_broadcast( + char x, + uint sub_group_local_id ) +uchar intel_sub_group_broadcast( + uchar x, + uint sub_group_local_id )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Broadcasts the value of <em>x</em> for work item identified by <em>sub_group_local_id</em> (value returned by <strong>get_sub_group_local_id</strong>) to all work items in the subgroup. +<em>sub_group_local_id</em> must be the same value for all work items in the subgroup.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">gentype sub_group_reduce_add( gentype x ) +gentype sub_group_reduce_min( gentype x ) +gentype sub_group_reduce_max( gentype x ) + +char intel_sub_group_reduce_add( char x ) +uchar intel_sub_group_reduce_add( uchar x ) +char intel_sub_group_reduce_min( char x ) +uchar intel_sub_group_reduce_min( uchar x ) +char intel_sub_group_reduce_max( char x ) +uchar intel_sub_group_reduce_max( uchar x )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the result of the specified reduction operation for all values of <em>x</em> specified by work items in a subgroup.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">gentype sub_group_scan_exclusive_add( gentype x ) +gentype sub_group_scan_exclusive_min( gentype x ) +gentype sub_group_scan_exclusive_max( gentype x ) + +char intel_sub_group_scan_exclusive_add( char x ) +uchar intel_sub_group_scan_exclusive_add( uchar x ) +char intel_sub_group_scan_exclusive_min( char x ) +uchar intel_sub_group_scan_exclusive_min( uchar x ) +char intel_sub_group_scan_exclusive_max( char x ) +uchar intel_sub_group_scan_exclusive_max( uchar x )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Performs the specified exclusive scan operation of all values <em>x</em> specified by work items in a subgroup. +The scan results are returned for each work item.</p> +<p class="tableblock">The scan order is defined by increasing subgroup local ID within the subgroup.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">gentype sub_group_scan_inclusive_add( gentype x) +gentype sub_group_scan_inclusive_min( gentype x) +gentype sub_group_scan_inclusive_max( gentype x) + +char intel_sub_group_scan_inclusive_add( char x ) +uchar intel_sub_group_scan_inclusive_add( uchar x ) +char intel_sub_group_scan_inclusive_min( char x ) +uchar intel_sub_group_scan_inclusive_min( uchar x ) +char intel_sub_group_scan_inclusive_max( char x ) +uchar intel_sub_group_scan_inclusive_max( uchar x )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Performs the specified inclusive scan operation of all values <em>x</em> specified by work items in a subgroup. +The scan results are returned for each work item.</p> +<p class="tableblock">The scan order is defined by increasing subgroup local ID within the subgroup.</p></td> +</tr> +</tbody> +</table> +</div> +</div> +</dd> +</dl> +</div> +</div> +<div class="sect2"> +<h3 id="_additions_to_section_6_13_x_sub_group_shuffle_functions">Additions to Section 6.13.X - "Sub Group Shuffle Functions"</h3> +<div class="paragraph"> +<p>This section was added by the <code>cl_intel_subgroups</code> extension.</p> +</div> +<div class="dlist"> +<dl> +<dt class="hdlist1">Add <code>char</code>, <code>char2</code>, <code>char4</code>, <code>char8</code>, <code>char16</code>, <code>uchar</code>, <code>uchar2</code>, <code>uchar4</code>, <code>uchar8</code>, and <code>uchar16</code> to the list of data types supported by the <code>sub_group_shuffle</code>, <code>sub_group_shuffle_down</code>, <code>sub_group_shuffle_up</code>, and <code>sub_group_shuffle_xor</code> functions: </dt> +<dd> +<div class="openblock"> +<div class="content"> +<div class="paragraph"> +<p>The OpenCL C programming language implements the following built-in functions to allow data to be exchanged among work items in a subgroup. +These built-in functions need not be encountered by all work items in a subgroup executing the kernel, however, data may only be shuffled among work items encountering the subgroup shuffle function. +Shuffling data from a work item that does not encounter the subgroup shuffle function will produce undefined results. +For these functions, <code>gentype</code> is <code>float</code>, <code>float2</code>, <code>float4</code>, <code>float8</code>, <code>float16</code>, <code>char</code>, <code>char2</code>, <code>char4</code>, <code>char8</code>, <code>char16</code>, <code>uchar</code>, <code>uchar2</code>, <code>uchar4</code>, <code>uchar8</code>, <code>uchar16</code>, <code>int</code>, <code>int2</code>, <code>int4</code>, <code>int8</code>, <code>int16</code>, <code>uint</code>, <code>uint2</code>, <code>uint4</code>, <code>uint8</code>, <code>uint16</code>, <code>long</code>, or <code>ulong</code>.</p> +</div> +<div class="paragraph"> +<p>If <code>cl_khr_fp16</code> is supported, <code>gentype</code> also includes <code>half</code>.</p> +</div> +<div class="paragraph"> +<p>If <code>cl_khr_fp64</code> or doubles are supported, <code>gentype</code> also includes <code>double</code>.</p> +</div> +</div> +</div> +</dd> +</dl> +</div> +</div> +<div class="sect2"> +<h3 id="_modifications_to_section_6_13_x_sub_group_read_and_write_functions">Modifications to Section 6.13.X "Sub Group Read and Write Functions"</h3> +<div class="paragraph"> +<p>This section was added by the <code>cl_intel_subgroups</code> extension.</p> +</div> +<div class="dlist"> +<dl> +<dt class="hdlist1">Add suffixed aliases of the previously un-suffixed 32-bit block read and write functions. There is no change to the description or behavior of these functions: </dt> +<dd> +<div class="openblock"> +<div class="content"> +<table class="tableblock frame-all grid-all stretch"> +<colgroup> +<col style="width: 55.5555%;"> +<col style="width: 44.4445%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top"><strong>Function</strong></th> +<th class="tableblock halign-left valign-top"><strong>Description</strong></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">uint intel_sub_group_block_read( + const __global uint* p ) +uint2 intel_sub_group_block_read2( + const __global uint* p ) +uint4 intel_sub_group_block_read4( + const __global uint* p ) +uint8 intel_sub_group_block_read8( + const __global uint* p ) + +uint intel_sub_group_block_read_ui( + const __global uint* p ) +uint2 intel_sub_group_block_read_ui2( + const __global uint* p ) +uint4 intel_sub_group_block_read_ui4( + const __global uint* p ) +uint8 intel_sub_group_block_read_ui8( + const __global uint* p )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reads 1, 2, 4, or 8 uints of data for each work item in the subgroup from the specified pointer as a block operation…​</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">uint intel_sub_group_block_read( + image2d_t image, + int2 byte_coord ) +uint2 intel_sub_group_block_read2( + image2d_t image, + int2 byte_coord ) +uint4 intel_sub_group_block_read4( + image2d_t image, + int2 byte_coord ) +uint8 intel_sub_group_block_read8( + image2d_t image, + int2 byte_coord ) + +uint intel_sub_group_block_read_ui( + image2d_t image, + int2 byte_coord ) +uint2 intel_sub_group_block_read_ui2( + image2d_t image, + int2 byte_coord ) +uint4 intel_sub_group_block_read_ui4( + image2d_t image, + int2 byte_coord ) +uint8 intel_sub_group_block_read_ui8( + image2d_t image, + int2 byte_coord )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reads 1, 2, 4, or 8 uints of data for each work item in the subgroup from the specified image at the specified coordinate as a block operation…​</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">void intel_sub_group_block_write( + __global uint* p, uint data ) +void intel_sub_group_block_write2( + __global uint* p, uint2 data ) +void intel_sub_group_block_write4( + __global uint* p, uint4 data ) +void intel_sub_group_block_write8( + __global uint* p, uint8 data ) + +void intel_sub_group_block_write_ui( + __global uint* p, uint data ) +void intel_sub_group_block_write_ui2( + __global uint* p, uint2 data ) +void intel_sub_group_block_write_ui4( + __global uint* p, uint4 data ) +void intel_sub_group_block_write_ui8( + __global uint* p, uint8 data )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Writes 1, 2, 4, or 8 uints of data for each work item in the subgroup to the specified pointer as a block operation…​</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">void intel_sub_group_block_write( + image2d_t image, + int2 byte_coord, uint data ) +void intel_sub_group_block_write2( + image2d_t image, + int2 byte_coord, uint2 data ) +void intel_sub_group_block_write4( + image2d_t image, + int2 byte_coord, uint4 data ) +void intel_sub_group_block_write8( + image2d_t image, + int2 byte_coord, uint8 data ) + +void intel_sub_group_block_write_ui( + image2d_t image, + int2 byte_coord, uint data ) +void intel_sub_group_block_write_ui2( + image2d_t image, + int2 byte_coord, uint2 data ) +void intel_sub_group_block_write_ui4( + image2d_t image, + int2 byte_coord, uint4 data ) +void intel_sub_group_block_write_ui8( + image2d_t image, + int2 byte_coord, uint8 data )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Writes 1, 2, 4, or 8 uints of data for each work item in the subgroup to the specified image at the specified coordinate as a block operation…​</p></td> +</tr> +</tbody> +</table> +</div> +</div> +</dd> +<dt class="hdlist1">Also, add <code>uchar</code> variants of the block read and write functions. In the descriptions of these functions, the "note below describing out-of-bounds behavior" is in the <code>cl_intel_subgroups</code> extension specification: </dt> +<dd> +<div class="openblock"> +<div class="content"> +<table class="tableblock frame-all grid-all stretch"> +<colgroup> +<col style="width: 55.5555%;"> +<col style="width: 44.4445%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top"><strong>Function</strong></th> +<th class="tableblock halign-left valign-top"><strong>Description</strong></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">uchar intel_sub_group_block_read_uc( + const __global uchar* p ) +uchar2 intel_sub_group_block_read_uc2( + const __global uchar* p ) +uchar4 intel_sub_group_block_read_uc4( + const __global uchar* p ) +uchar8 intel_sub_group_block_read_uc8( + const __global uchar* p ) +uchar16 intel_sub_group_block_read_uc16( + const __global uchar* p )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reads 1, 2, 4, 8, or 16 uchars of data for each work item in the subgroup from the specified pointer as a block operation. +The data is read strided, so the first value read is:</p> +<p class="tableblock"><code>p[ sub_group_local_id ]</code></p> +<p class="tableblock">and the second value read is:</p> +<p class="tableblock"><code>p[ sub_group_local_id + max_sub_group_size ]</code></p> +<p class="tableblock">etc.</p> +<p class="tableblock"><em>p</em> must be aligned to a 32-bit (4-byte) boundary.</p> +<p class="tableblock">There is no defined out-of-range behavior for these functions.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">uchar intel_sub_group_block_read_uc( + image2d_t image, + int2 byte_coord ) +uchar2 intel_sub_group_block_read_uc2( + image2d_t image, + int2 byte_coord ) +uchar4 intel_sub_group_block_read_uc4( + image2d_t image, + int2 byte_coord ) +uchar8 intel_sub_group_block_read_uc8( + image2d_t image, + int2 byte_coord ) +uchar16 intel_sub_group_block_read_uc16( + image2d_t image, + int2 byte_coord )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reads 1, 2, 4, 8, or 16 uchars of data for each work item in the subgroup from the specified <em>image</em> at the specified coordinate as a block operation. +Note that the coordinate is a byte coordinate, not an image element coordinate. +Also note that the image data is read without format conversion, so each work item may read multiple image elements +(for images with element size smaller than 8-bits).</p> +<p class="tableblock">The data is read row-by-row, so the first value read is from the row specified in the y-component of the provided <em>byte_coord</em>, the second value is read from the y-component of the provided <em>byte_coord</em> plus one, etc.</p> +<p class="tableblock">Please see the note below describing out-of-bounds behavior for these functions.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">void intel_sub_group_block_write_uc( + __global uchar* p, uchar data ) +void intel_sub_group_block_write_uc2( + __global uchar* p, uchar2 data ) +void intel_sub_group_block_write_uc4( + __global uchar* p, uchar4 data ) +void intel_sub_group_block_write_uc8( + __global uchar* p, uchar8 data ) +void intel_sub_group_block_write_uc16( + __global uchar* p, uchar16 data )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Writes 1, 2, 4, 8, or 16 uchars of data for each work item in the subgroup to the specified pointer as a block operation. +The data is written strided, so the first value is written to:</p> +<p class="tableblock"><code>p[ sub_group_local_id ]</code></p> +<p class="tableblock">and the second value is written to:</p> +<p class="tableblock"><code>p[ sub_group_local_id + max_sub_group_size ]</code></p> +<p class="tableblock">etc.</p> +<p class="tableblock"><em>p</em> must be aligned to a 128-bit (16-byte) boundary.</p> +<p class="tableblock">There is no defined out-of-range behavior for these functions.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">void intel_sub_group_block_write_uc( + image2d_t image, + int2 byte_coord, uchar data ) +void intel_sub_group_block_write_uc2( + image2d_t image, + int2 byte_coord, uchar2 data ) +void intel_sub_group_block_write_uc4( + image2d_t image, + int2 byte_coord, uchar4 data ) +void intel_sub_group_block_write_uc8( + image2d_t image, + int2 byte_coord, uchar8 data ) +void intel_sub_group_block_write_uc16( + image2d_t image, + int2 byte_coord, uchar16 data )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Writes 1, 2, 4, 8, or 16 uchars of data for each work item in the subgroup to the specified <em>image</em> at the specified coordinate as a block operation. +Note that the coordinate is a byte coordinate, not an image element coordinate. +Unlike the image block read function, which may read from any arbitrary byte offset, the x-component of the byte coordinate for the image block write functions must be a multiple of four; +in other words, the write must begin at 32-bit boundary. +There is no restriction on the y-component of the coordinate. +Also, note that the image <em>data</em> is written without format conversion, so each work item may write multiple image elements (for images with element size smaller than 8-bits).</p> +<p class="tableblock">The data is written row-by-row, so the first value written is from the row specified by the y-component of the provided <em>byte_coord</em>, the second value is written from the y-component of the provided <em>byte_coord</em> plus one, etc.</p> +<p class="tableblock">Please see the note below describing out-of-bounds behavior for these functions.</p></td> +</tr> +</tbody> +</table> +</div> +</div> +</dd> +</dl> +</div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_modifications_to_the_opencl_spir_v_environment_specification">Modifications to the OpenCL SPIR-V Environment Specification</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>The section numbers below refer to sections added by the <code>cl_intel_spirv_subgroups</code> extension.</p> +</div> +<div class="paragraph"> +<p>Note that the restrictions described in Section 7.1.X.3 - <em>Notes and Restrictions</em> in the <code>cl_intel_spirv_subgroups</code> extension are unchanged and continue to apply for this extension.</p> +</div> +<div class="sect2"> +<h3 id="_add_to_section_7_1_x_cl_intel_spirv_subgroups">Add to Section 7.1.X - <code>cl_intel_spirv_subgroups</code></h3> +<div class="dlist"> +<dl> +<dt class="hdlist1">Add to the end of this section: </dt> +<dd> +<div class="openblock"> +<div class="content"> +<div class="paragraph"> +<p>If the OpenCL environment supports the extension <code>cl_intel_subgroups_char</code>, then additional types are valid for the following <strong>Groups</strong> instructions with <em>Scope</em> for <em>Execution</em> equal to <strong>Subgroup</strong>:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><strong>OpGroupBroadcast</strong></p> +</li> +<li> +<p><strong>OpGroupIAdd</strong></p> +</li> +<li> +<p><strong>OpGroupSMin</strong>, <strong>OpGroupUMin</strong></p> +</li> +<li> +<p><strong>OpGroupSMax</strong>, <strong>OpGroupUMax</strong></p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>For these instructions, valid types for <em>Value</em> are:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Scalars of <strong>OpTypeInt</strong> with a <em>Width</em> of 8 bits and <em>Signedness</em> of 0 (equivalent to <code>char</code> and <code>uchar</code>)</p> +</li> +</ul> +</div> +</div> +</div> +</dd> +</dl> +</div> +</div> +<div class="sect2"> +<h3 id="_add_to_section_7_1_x_1_shuffle_instruction">Add to Section 7.1.X.1 - Shuffle Instruction</h3> +<div class="dlist"> +<dl> +<dt class="hdlist1">Add to the end of this section: </dt> +<dd> +<div class="openblock"> +<div class="content"> +<div class="paragraph"> +<p>Additionally, if the OpenCL environment supports the extension <code>cl_intel_subgroups_char</code>:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Scalars and <strong>OpTypeVectors</strong> with 2, 3, 4, 8, or 16 <em>Component Count</em> components of the following <em>Component Type</em> types:</p> +<div class="ulist"> +<ul> +<li> +<p><strong>OpTypeInt</strong> with a <em>Width</em> of 8 bits and <em>Signedness</em> of 0 (equivalent to <code>char</code> and <code>uchar</code>)</p> +</li> +</ul> +</div> +</li> +</ul> +</div> +</div> +</div> +</dd> +</dl> +</div> +</div> +<div class="sect2"> +<h3 id="_add_to_section_7_1_x_2_block_io_instructions">Add to Section 7.1.X.2 - Block IO Instructions</h3> +<div class="dlist"> +<dl> +<dt class="hdlist1">Add to the description of supported types in this section: </dt> +<dd> +<div class="openblock"> +<div class="content"> +<div class="paragraph"> +<p>Additionally, if the OpenCL environment supports the extension <code>cl_intel_subgroups_char</code>:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Scalars and <strong>OpTypeVectors</strong> with 2, 4, 8, or 16 <em>Component Count</em> components of the following <em>Component Type</em> types:</p> +<div class="ulist"> +<ul> +<li> +<p><strong>OpTypeInt</strong> with a <em>Width</em> of 8 bits and <em>Signedness</em> of 0 (equivalent to <code>char</code> and <code>uchar</code>)</p> +</li> +</ul> +</div> +</li> +</ul> +</div> +</div> +</div> +</dd> +</dl> +</div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_issues">Issues</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>None.</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_revision_history">Revision History</h2> +<div class="sectionbody"> +<table class="tableblock frame-all grid-rows stretch"> +<colgroup> +<col style="width: 4.7619%;"> +<col style="width: 14.2857%;"> +<col style="width: 14.2857%;"> +<col style="width: 66.6667%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Rev</th> +<th class="tableblock halign-left valign-top">Date</th> +<th class="tableblock halign-left valign-top">Author</th> +<th class="tableblock halign-left valign-top">Changes</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">2020-03-13</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Ben Ashbaugh</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>First public revision.</strong></p></td> +</tr> +</tbody> +</table> +</div> +</div> +</div> +<div id="footer"> +<div id="footer-text"> +Version V2.2-11-93-g2eccabe<br> +Last updated 2020-03-13 13:09:47 -0700 +</div> +</div> + +<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-MML-AM_HTMLorMML"></script> +</body> +</html> \ No newline at end of file
diff --git a/extensions/intel/cl_intel_subgroups_long.html b/extensions/intel/cl_intel_subgroups_long.html new file mode 100644 index 0000000..261bcec --- /dev/null +++ b/extensions/intel/cl_intel_subgroups_long.html
@@ -0,0 +1,1272 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<meta charset="UTF-8"> +<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]--> +<meta name="viewport" content="width=device-width, initial-scale=1.0"> +<meta name="generator" content="Asciidoctor 1.5.8"> +<title>cl_intel_subgroups_long</title> +<style> +/*! normalize.css v2.1.2 | MIT License | git.io/normalize */ +/* ========================================================================== HTML5 display definitions ========================================================================== */ +/** Correct `block` display not defined in IE 8/9. */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; } + +/** Correct `inline-block` display not defined in IE 8/9. */ +audio, canvas, video { display: inline-block; } + +/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */ +audio:not([controls]) { display: none; height: 0; } + +/** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */ +[hidden], template { display: none; } + +script { display: none !important; } + +/* ========================================================================== Base ========================================================================== */ +/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */ +html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } + +/** Remove default margin. */ +body { margin: 0; } + +/* ========================================================================== Links ========================================================================== */ +/** Remove the gray background color from active links in IE 10. */ +a { background: transparent; } + +/** Address `outline` inconsistency between Chrome and other browsers. */ +a:focus { outline: thin dotted; } + +/** Improve readability when focused and also mouse hovered in all browsers. */ +a:active, a:hover { outline: 0; } + +/* ========================================================================== Typography ========================================================================== */ +/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */ +h1 { font-size: 2em; margin: 0.67em 0; } + +/** Address styling not present in IE 8/9, Safari 5, and Chrome. */ +abbr[title] { border-bottom: 1px dotted; } + +/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */ +b, strong { font-weight: bold; } + +/** Address styling not present in Safari 5 and Chrome. */ +dfn { font-style: italic; } + +/** Address differences between Firefox and other browsers. */ +hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } + +/** Address styling not present in IE 8/9. */ +mark { background: #ff0; color: #000; } + +/** Correct font family set oddly in Safari 5 and Chrome. */ +code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; } + +/** Improve readability of pre-formatted text in all browsers. */ +pre { white-space: pre-wrap; } + +/** Set consistent quote types. */ +q { quotes: "\201C" "\201D" "\2018" "\2019"; } + +/** Address inconsistent and variable font size in all browsers. */ +small { font-size: 80%; } + +/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */ +sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } + +sup { top: -0.5em; } + +sub { bottom: -0.25em; } + +/* ========================================================================== Embedded content ========================================================================== */ +/** Remove border when inside `a` element in IE 8/9. */ +img { border: 0; } + +/** Correct overflow displayed oddly in IE 9. */ +svg:not(:root) { overflow: hidden; } + +/* ========================================================================== Figures ========================================================================== */ +/** Address margin not present in IE 8/9 and Safari 5. */ +figure { margin: 0; } + +/* ========================================================================== Forms ========================================================================== */ +/** Define consistent border, margin, and padding. */ +fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } + +/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */ +legend { border: 0; /* 1 */ padding: 0; /* 2 */ } + +/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */ +button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ } + +/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */ +button, input { line-height: normal; } + +/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */ +button, select { text-transform: none; } + +/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */ +button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ } + +/** Re-set default cursor for disabled elements. */ +button[disabled], html input[disabled] { cursor: default; } + +/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */ +input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } + +/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */ +input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; } + +/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */ +input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } + +/** Remove inner padding and border in Firefox 4+. */ +button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } + +/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */ +textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ } + +/* ========================================================================== Tables ========================================================================== */ +/** Remove most spacing between table cells. */ +table { border-collapse: collapse; border-spacing: 0; } + +meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; } + +meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; } + +meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; } + +*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } + +html, body { font-size: 100%; } + +body { background: white; color: #222222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; } + +a:hover { cursor: pointer; } + +img, object, embed { max-width: 100%; height: auto; } + +object, embed { height: 100%; } + +img { -ms-interpolation-mode: bicubic; } + +#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; } + +.left { float: left !important; } + +.right { float: right !important; } + +.text-left { text-align: left !important; } + +.text-right { text-align: right !important; } + +.text-center { text-align: center !important; } + +.text-justify { text-align: justify !important; } + +.hide { display: none; } + +.antialiased { -webkit-font-smoothing: antialiased; } + +img { display: inline-block; vertical-align: middle; } + +textarea { height: auto; min-height: 50px; } + +select { width: 100%; } + +object, svg { display: inline-block; vertical-align: middle; } + +.center { margin-left: auto; margin-right: auto; } + +.spread { width: 100%; } + +p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; } + +.subheader, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.4; color: black; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; } + +/* Typography resets */ +div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; } + +/* Default Link Styles */ +a { color: #0068b0; text-decoration: none; line-height: inherit; } +a:hover, a:focus { color: #333333; } +a img { border: none; } + +/* Default paragraph styles */ +p { font-family: Noto, sans-serif; font-weight: normal; font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; text-rendering: optimizeLegibility; } +p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; } + +/* Default header styles */ +h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: Noto, sans-serif; font-weight: normal; font-style: normal; color: black; text-rendering: optimizeLegibility; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.2125em; } +h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #4d4d4d; line-height: 0; } + +h1 { font-size: 2.125em; } + +h2 { font-size: 1.6875em; } + +h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; } + +h4 { font-size: 1.125em; } + +h5 { font-size: 1.125em; } + +h6 { font-size: 1em; } + +hr { border: solid #dddddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; } + +/* Helpful Typography Defaults */ +em, i { font-style: italic; line-height: inherit; } + +strong, b { font-weight: bold; line-height: inherit; } + +small { font-size: 60%; line-height: inherit; } + +code { font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; color: #264357; } + +/* Lists */ +ul, ol, dl { font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; list-style-position: outside; font-family: Noto, sans-serif; } + +ul, ol { margin-left: 1.5em; } +ul.no-bullet, ol.no-bullet { margin-left: 1.5em; } + +/* Unordered Lists */ +ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ } +ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; } +ul.square { list-style-type: square; } +ul.circle { list-style-type: circle; } +ul.disc { list-style-type: disc; } +ul.no-bullet { list-style: none; } + +/* Ordered Lists */ +ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; } + +/* Definition Lists */ +dl dt { margin-bottom: 0.3em; font-weight: bold; } +dl dd { margin-bottom: 0.75em; } + +/* Abbreviations */ +abbr, acronym { text-transform: uppercase; font-size: 90%; color: black; border-bottom: 1px dotted #dddddd; cursor: help; } + +abbr { text-transform: none; } + +/* Blockquotes */ +blockquote { margin: 0 0 0.75em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #dddddd; } +blockquote cite { display: block; font-size: 0.8125em; color: #5e93b8; } +blockquote cite:before { content: "\2014 \0020"; } +blockquote cite a, blockquote cite a:visited { color: #5e93b8; } + +blockquote, blockquote p { line-height: 1.6; color: #333333; } + +/* Microformats */ +.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #dddddd; padding: 0.625em 0.75em; } +.vcard li { margin: 0; display: block; } +.vcard .fn { font-weight: bold; font-size: 0.9375em; } + +.vevent .summary { font-weight: bold; } +.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; } + +@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; } + h1 { font-size: 2.75em; } + h2 { font-size: 2.3125em; } + h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; } + h4 { font-size: 1.4375em; } } +/* Tables */ +table { background: white; margin-bottom: 1.25em; border: solid 1px #d8d8ce; } +table thead, table tfoot { background: -webkit-linear-gradient(top, #add386, #90b66a); font-weight: bold; } +table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: white; text-align: left; } +table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #6d6e71; } +table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #edf2f2; } +table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; } + +body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; tab-size: 4; } + +h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; } + +a:hover, a:focus { text-decoration: underline; } + +.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; } +.clearfix:after, .float-group:after { clear: both; } + +*:not(pre) > code { font-size: inherit; font-style: normal !important; letter-spacing: 0; padding: 0; background-color: white; -webkit-border-radius: 0; border-radius: 0; line-height: inherit; word-wrap: break-word; } +*:not(pre) > code.nobreak { word-wrap: normal; } +*:not(pre) > code.nowrap { white-space: nowrap; } + +pre, pre > code { line-height: 1.6; color: #264357; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; } + +em em { font-style: normal; } + +strong strong { font-weight: normal; } + +.keyseq { color: #333333; } + +kbd { font-family: Consolas, "Liberation Mono", Courier, monospace; display: inline-block; color: black; font-size: 0.65em; line-height: 1.45; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; margin: 0 0.15em; padding: 0.2em 0.5em; vertical-align: middle; position: relative; top: -0.1em; white-space: nowrap; } + +.keyseq kbd:first-child { margin-left: 0; } + +.keyseq kbd:last-child { margin-right: 0; } + +.menuseq, .menuref { color: #000; } + +.menuseq b:not(.caret), .menuref { font-weight: inherit; } + +.menuseq { word-spacing: -0.02em; } +.menuseq b.caret { font-size: 1.25em; line-height: 0.8; } +.menuseq i.caret { font-weight: bold; text-align: center; width: 0.45em; } + +b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; } + +b.button:before { content: "["; padding: 0 3px 0 2px; } + +b.button:after { content: "]"; padding: 0 2px 0 3px; } + +#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 1.5em; padding-right: 1.5em; } +#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; } +#header:after, #content:after, #footnotes:after, #footer:after { clear: both; } + +#content { margin-top: 1.25em; } + +#content:before { content: none; } + +#header > h1:first-child { color: black; margin-top: 2.25rem; margin-bottom: 0; } +#header > h1:first-child + #toc { margin-top: 8px; border-top: 1px solid #dddddd; } +#header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid #dddddd; padding-bottom: 8px; } +#header .details { border-bottom: 1px solid #dddddd; line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #5e93b8; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; } +#header .details span:first-child { margin-left: -0.125em; } +#header .details span.email a { color: #333333; } +#header .details br { display: none; } +#header .details br + span:before { content: "\00a0\2013\00a0"; } +#header .details br + span.author:before { content: "\00a0\22c5\00a0"; color: #333333; } +#header .details br + span#revremark:before { content: "\00a0|\00a0"; } +#header #revnumber { text-transform: capitalize; } +#header #revnumber:after { content: "\00a0"; } + +#content > h1:first-child:not([class]) { color: black; border-bottom: 1px solid #dddddd; padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; } + +#toc { border-bottom: 0 solid #dddddd; padding-bottom: 0.5em; } +#toc > ul { margin-left: 0.125em; } +#toc ul.sectlevel0 > li > a { font-style: italic; } +#toc ul.sectlevel0 ul.sectlevel1 { margin: 0.5em 0; } +#toc ul { font-family: Noto, sans-serif; list-style-type: none; } +#toc li { line-height: 1.3334; margin-top: 0.3334em; } +#toc a { text-decoration: none; } +#toc a:active { text-decoration: underline; } + +#toctitle { color: black; font-size: 1.2em; } + +@media only screen and (min-width: 768px) { #toctitle { font-size: 1.375em; } + body.toc2 { padding-left: 15em; padding-right: 0; } + #toc.toc2 { margin-top: 0 !important; background-color: white; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #dddddd; border-top-width: 0 !important; border-bottom-width: 0 !important; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; } + #toc.toc2 #toctitle { margin-top: 0; margin-bottom: 0.8rem; font-size: 1.2em; } + #toc.toc2 > ul { font-size: 0.9em; margin-bottom: 0; } + #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; } + #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } + body.toc2.toc-right { padding-left: 0; padding-right: 15em; } + body.toc2.toc-right #toc.toc2 { border-right-width: 0; border-left: 1px solid #dddddd; left: auto; right: 0; } } +@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; } + #toc.toc2 { width: 20em; } + #toc.toc2 #toctitle { font-size: 1.375em; } + #toc.toc2 > ul { font-size: 0.95em; } + #toc.toc2 ul ul { padding-left: 1.25em; } + body.toc2.toc-right { padding-left: 0; padding-right: 20em; } } +#content #toc { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: white; -webkit-border-radius: 0; border-radius: 0; } +#content #toc > :first-child { margin-top: 0; } +#content #toc > :last-child { margin-bottom: 0; } + +#footer { max-width: 100%; background-color: none; padding: 1.25em; } + +#footer-text { color: black; line-height: 1.44; } + +#content { margin-bottom: 0.625em; } + +.sect1 { padding-bottom: 0.625em; } + +@media only screen and (min-width: 768px) { #content { margin-bottom: 1.25em; } + .sect1 { padding-bottom: 1.25em; } } +.sect1:last-child { padding-bottom: 0; } + +.sect1 + .sect1 { border-top: 0 solid #dddddd; } + +#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; z-index: 1001; width: 1.5ex; margin-left: -1.5ex; display: block; text-decoration: none !important; visibility: hidden; text-align: center; font-weight: normal; } +#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: "\00A7"; font-size: 0.85em; display: block; padding-top: 0.1em; } +#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; } +#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: black; text-decoration: none; } +#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: black; } + +.audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .videoblock { margin-bottom: 1.25em; } + +.admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; } + +table.tableblock > caption.title { white-space: nowrap; overflow: visible; max-width: 0; } + +.paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: black; } + +table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; } + +.admonitionblock > table { border-collapse: separate; border: 0; background: none; width: 100%; } +.admonitionblock > table td.icon { text-align: center; width: 80px; } +.admonitionblock > table td.icon img { max-width: initial; } +.admonitionblock > table td.icon .title { font-weight: bold; font-family: Noto, sans-serif; text-transform: uppercase; } +.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #dddddd; color: #5e93b8; } +.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; } + +.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: white; -webkit-border-radius: 0; border-radius: 0; } +.exampleblock > .content > :first-child { margin-top: 0; } +.exampleblock > .content > :last-child { margin-bottom: 0; } + +.sidebarblock { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: white; -webkit-border-radius: 0; border-radius: 0; } +.sidebarblock > :first-child { margin-top: 0; } +.sidebarblock > :last-child { margin-bottom: 0; } +.sidebarblock > .content > .title { color: black; margin-top: 0; } + +.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; } + +.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { background: #eeeeee; } +.sidebarblock .literalblock pre, .sidebarblock .listingblock pre:not(.highlight), .sidebarblock .listingblock pre[class="highlight"], .sidebarblock .listingblock pre[class^="highlight "], .sidebarblock .listingblock pre.CodeRay, .sidebarblock .listingblock pre.prettyprint { background: #f2f1f1; } + +.literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border: 1px hidden #666666; -webkit-border-radius: 0; border-radius: 0; word-wrap: break-word; padding: 1.25em 1.5625em 1.125em 1.5625em; font-size: 0.8125em; } +.literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; } +@media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.90625em; } } +@media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 1em; } } + +.literalblock.output pre { color: #eeeeee; background-color: #264357; } + +.listingblock pre.highlightjs { padding: 0; } +.listingblock pre.highlightjs > code { padding: 1.25em 1.5625em 1.125em 1.5625em; -webkit-border-radius: 0; border-radius: 0; } + +.listingblock > .content { position: relative; } + +.listingblock code[data-lang]:before { display: none; content: attr(data-lang); position: absolute; font-size: 0.75em; top: 0.425rem; right: 0.5rem; line-height: 1; text-transform: uppercase; color: #999; } + +.listingblock:hover code[data-lang]:before { display: block; } + +.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; } + +.listingblock.terminal pre .command:not([data-prompt]):before { content: "$"; } + +table.pyhltable { border-collapse: separate; border: 0; margin-bottom: 0; background: none; } + +table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; line-height: 1.6; } + +table.pyhltable td.code { padding-left: .75em; padding-right: 0; } + +pre.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #dddddd; } + +pre.pygments .lineno { display: inline-block; margin-right: .25em; } + +table.pyhltable .linenodiv { background: none !important; padding-right: 0 !important; } + +.quoteblock { margin: 0 1em 0.75em 1.5em; display: table; } +.quoteblock > .title { margin-left: -1.5em; margin-bottom: 0.75em; } +.quoteblock blockquote, .quoteblock blockquote p { color: #333333; font-size: 1.15rem; line-height: 1.75; word-spacing: 0.1em; letter-spacing: 0; font-style: italic; text-align: justify; } +.quoteblock blockquote { margin: 0; padding: 0; border: 0; } +.quoteblock blockquote:before { content: "\201c"; float: left; font-size: 2.75em; font-weight: bold; line-height: 0.6em; margin-left: -0.6em; color: black; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); } +.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; } +.quoteblock .attribution { margin-top: 0.5em; margin-right: 0.5ex; text-align: right; } +.quoteblock .quoteblock { margin-left: 0; margin-right: 0; padding: 0.5em 0; border-left: 3px solid #5e93b8; } +.quoteblock .quoteblock blockquote { padding: 0 0 0 0.75em; } +.quoteblock .quoteblock blockquote:before { display: none; } + +.verseblock { margin: 0 1em 0.75em 1em; } +.verseblock pre { font-family: "Open Sans", "DejaVu Sans", sans; font-size: 1.15rem; color: #333333; font-weight: 300; text-rendering: optimizeLegibility; } +.verseblock pre strong { font-weight: 400; } +.verseblock .attribution { margin-top: 1.25rem; margin-left: 0.5ex; } + +.quoteblock .attribution, .verseblock .attribution { font-size: 0.8125em; line-height: 1.45; font-style: italic; } +.quoteblock .attribution br, .verseblock .attribution br { display: none; } +.quoteblock .attribution cite, .verseblock .attribution cite { display: block; letter-spacing: -0.025em; color: #5e93b8; } + +.quoteblock.abstract { margin: 0 0 0.75em 0; display: block; } +.quoteblock.abstract blockquote, .quoteblock.abstract blockquote p { text-align: left; word-spacing: 0; } +.quoteblock.abstract blockquote:before, .quoteblock.abstract blockquote p:first-of-type:before { display: none; } + +table.tableblock { max-width: 100%; border-collapse: separate; } +table.tableblock td > .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; } + +table.tableblock, th.tableblock, td.tableblock { border: 0 solid #d8d8ce; } + +table.grid-all > thead > tr > .tableblock, table.grid-all > tbody > tr > .tableblock { border-width: 0 1px 1px 0; } + +table.grid-all > tfoot > tr > .tableblock { border-width: 1px 1px 0 0; } + +table.grid-cols > * > tr > .tableblock { border-width: 0 1px 0 0; } + +table.grid-rows > thead > tr > .tableblock, table.grid-rows > tbody > tr > .tableblock { border-width: 0 0 1px 0; } + +table.grid-rows > tfoot > tr > .tableblock { border-width: 1px 0 0 0; } + +table.grid-all > * > tr > .tableblock:last-child, table.grid-cols > * > tr > .tableblock:last-child { border-right-width: 0; } + +table.grid-all > tbody > tr:last-child > .tableblock, table.grid-all > thead:last-child > tr > .tableblock, table.grid-rows > tbody > tr:last-child > .tableblock, table.grid-rows > thead:last-child > tr > .tableblock { border-bottom-width: 0; } + +table.frame-all { border-width: 1px; } + +table.frame-sides { border-width: 0 1px; } + +table.frame-topbot { border-width: 1px 0; } + +th.halign-left, td.halign-left { text-align: left; } + +th.halign-right, td.halign-right { text-align: right; } + +th.halign-center, td.halign-center { text-align: center; } + +th.valign-top, td.valign-top { vertical-align: top; } + +th.valign-bottom, td.valign-bottom { vertical-align: bottom; } + +th.valign-middle, td.valign-middle { vertical-align: middle; } + +table thead th, table tfoot th { font-weight: bold; } + +tbody tr th { display: table-cell; line-height: 1.4; background: -webkit-linear-gradient(top, #add386, #90b66a); } + +tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: white; font-weight: bold; } + +p.tableblock > code:only-child { background: none; padding: 0; } + +p.tableblock { font-size: 1em; } + +td > div.verse { white-space: pre; } + +ol { margin-left: 1.75em; } + +ul li ol { margin-left: 1.5em; } + +dl dd { margin-left: 1.125em; } + +dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; } + +ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.375em; } + +ul.checklist, ul.none, ol.none, ul.no-bullet, ol.no-bullet, ol.unnumbered, ul.unstyled, ol.unstyled { list-style-type: none; } + +ul.no-bullet, ol.no-bullet, ol.unnumbered { margin-left: 0.625em; } + +ul.unstyled, ol.unstyled { margin-left: 0; } + +ul.checklist { margin-left: 0.625em; } + +ul.checklist li > p:first-child > .fa-square-o:first-child, ul.checklist li > p:first-child > .fa-check-square-o:first-child { width: 1.25em; font-size: 0.8em; position: relative; bottom: 0.125em; } + +ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; } + +ul.inline { display: -ms-flexbox; display: -webkit-box; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; list-style: none; margin: 0 0 0.375em -0.75em; } + +ul.inline > li { margin-left: 0.75em; } + +.unstyled dl dt { font-weight: normal; font-style: normal; } + +ol.arabic { list-style-type: decimal; } + +ol.decimal { list-style-type: decimal-leading-zero; } + +ol.loweralpha { list-style-type: lower-alpha; } + +ol.upperalpha { list-style-type: upper-alpha; } + +ol.lowerroman { list-style-type: lower-roman; } + +ol.upperroman { list-style-type: upper-roman; } + +ol.lowergreek { list-style-type: lower-greek; } + +.hdlist > table, .colist > table { border: 0; background: none; } +.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; } + +td.hdlist1, td.hdlist2 { vertical-align: top; padding: 0 0.625em; } + +td.hdlist1 { font-weight: bold; padding-bottom: 0.75em; } + +.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; } + +.colist > table tr > td:first-of-type { padding: 0.4em 0.75em 0 0.75em; line-height: 1; vertical-align: top; } +.colist > table tr > td:first-of-type img { max-width: initial; } +.colist > table tr > td:last-of-type { padding: 0.25em 0; } + +.thumb, .th { line-height: 0; display: inline-block; border: solid 4px white; -webkit-box-shadow: 0 0 0 1px #dddddd; box-shadow: 0 0 0 1px #dddddd; } + +.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; } +.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; } +.imageblock > .title { margin-bottom: 0; } +.imageblock.thumb, .imageblock.th { border-width: 6px; } +.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; } + +.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; } +.image.left { margin-right: 0.625em; } +.image.right { margin-left: 0.625em; } + +a.image { text-decoration: none; display: inline-block; } +a.image object { pointer-events: none; } + +sup.footnote, sup.footnoteref { font-size: 0.875em; position: static; vertical-align: super; } +sup.footnote a, sup.footnoteref a { text-decoration: none; } +sup.footnote a:active, sup.footnoteref a:active { text-decoration: underline; } + +#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; } +#footnotes hr { width: 20%; min-width: 6.25em; margin: -0.25em 0 0.75em 0; border-width: 1px 0 0 0; } +#footnotes .footnote { padding: 0 0.375em 0 0.225em; line-height: 1.3334; font-size: 0.875em; margin-left: 1.2em; margin-bottom: 0.2em; } +#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; margin-left: -1.05em; } +#footnotes .footnote:last-of-type { margin-bottom: 0; } +#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; } + +.gist .file-data > table { border: 0; background: #fff; width: 100%; margin-bottom: 0; } +.gist .file-data > table td.line-data { width: 99%; } + +div.unbreakable { page-break-inside: avoid; } + +.big { font-size: larger; } + +.small { font-size: smaller; } + +.underline { text-decoration: underline; } + +.overline { text-decoration: overline; } + +.line-through { text-decoration: line-through; } + +.aqua { color: #00bfbf; } + +.aqua-background { background-color: #00fafa; } + +.black { color: black; } + +.black-background { background-color: black; } + +.blue { color: #0000bf; } + +.blue-background { background-color: #0000fa; } + +.fuchsia { color: #bf00bf; } + +.fuchsia-background { background-color: #fa00fa; } + +.gray { color: #606060; } + +.gray-background { background-color: #7d7d7d; } + +.green { color: #006000; } + +.green-background { background-color: #007d00; } + +.lime { color: #00bf00; } + +.lime-background { background-color: #00fa00; } + +.maroon { color: #600000; } + +.maroon-background { background-color: #7d0000; } + +.navy { color: #000060; } + +.navy-background { background-color: #00007d; } + +.olive { color: #606000; } + +.olive-background { background-color: #7d7d00; } + +.purple { color: #600060; } + +.purple-background { background-color: #7d007d; } + +.red { color: #bf0000; } + +.red-background { background-color: #fa0000; } + +.silver { color: #909090; } + +.silver-background { background-color: #bcbcbc; } + +.teal { color: #006060; } + +.teal-background { background-color: #007d7d; } + +.white { color: #bfbfbf; } + +.white-background { background-color: #fafafa; } + +.yellow { color: #bfbf00; } + +.yellow-background { background-color: #fafa00; } + +span.icon > .fa { cursor: default; } +a span.icon > .fa { cursor: inherit; } + +.admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; } +.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #29475c; } +.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; } +.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; } +.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; } +.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; } + +.conum[data-value] { display: inline-block; color: #fff !important; background-color: black; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; font-size: 0.75em; width: 1.67em; height: 1.67em; line-height: 1.67em; font-family: "Open Sans", "DejaVu Sans", sans-serif; font-style: normal; font-weight: bold; } +.conum[data-value] * { color: #fff !important; } +.conum[data-value] + b { display: none; } +.conum[data-value]:after { content: attr(data-value); } +pre .conum[data-value] { position: relative; top: -0.125em; } + +b.conum * { color: inherit !important; } + +.conum:not([data-value]):empty { display: none; } + +h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { border-bottom: 1px solid #dddddd; } + +.sect1 { padding-bottom: 0; } + +#toctitle { color: #00406F; font-weight: normal; margin-top: 1.5em; } + +.sidebarblock { border-color: #aaa; } + +code { -webkit-border-radius: 4px; border-radius: 4px; } + +p.tableblock.header { color: #6d6e71; } + +.literalblock pre, .listingblock pre { background: #eeeeee; } + +</style> +<link rel="stylesheet" href="../katex/katex.min.css"> +<script src="../katex/katex.min.js"></script> +<script src="../katex/contrib/auto-render.min.js"></script> + <!-- Use KaTeX to render math once document is loaded, see + https://github.com/Khan/KaTeX/tree/master/contrib/auto-render --> +<script> + document.addEventListener("DOMContentLoaded", function () { + renderMathInElement( + document.body, + { + delimiters: [ + { left: "$$", right: "$$", display: true}, + { left: "\\[", right: "\\]", display: true}, + { left: "$", right: "$", display: false}, + { left: "\\(", right: "\\)", display: false} + ] + } + ); + }); +</script></head> +<body class="book"> +<div id="header"> +<h1>cl_intel_subgroups_long</h1> +<div class="details"> +<span id="revnumber">version V2.2-11-93-g2eccabe,</span> +<span id="revdate">Fri, 13 Mar 2020 20:13:54 +0000</span> +<br><span id="revremark">from git branch: cl_intel_subgroups_char_long commit: 2eccabe9a2ee707c76ba080b99c0edfe95f199a1</span> +</div> +</div> +<div id="content"> +<div class="sect1"> +<h2 id="_name_strings">Name Strings</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p><code>cl_intel_subgroups_long</code></p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_contact">Contact</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Ben Ashbaugh, Intel (ben 'dot' ashbaugh 'at' intel 'dot' com)</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_contributors">Contributors</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Ben Ashbaugh, Intel<br> +Konrad Trifunovic, Intel</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_notice">Notice</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Copyright (c) 2020 Intel Corporation. All rights reserved.</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_status">Status</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Final Draft</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_version">Version</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Built On: 2020-03-13<br> +Revision: 1</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_dependencies">Dependencies</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>OpenCL 1.2 and support for <code>cl_intel_subgroups</code> is required. +This extension is written against the OpenCL API Specification Version 2.2 (revision v2.2-7), against the OpenCL C Language Specification Version 2.0 (revision v2.2-7), and against version 4 of the <code>cl_intel_subgroups</code> specification.</p> +</div> +<div class="paragraph"> +<p>This extension requires OpenCL support for SPIR-V, either via OpenCL 2.1 or via the <code>cl_khr_il_program</code> extension.</p> +</div> +<div class="paragraph"> +<p>This extension interacts with the <code>cl_intel_spirv_subgroups</code> extension.</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_overview">Overview</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>The goal of this extension is to allow programmers to improve the performance of applications operating on 64-bit data types by extending the subgroup functions described in the <code>cl_intel_subgroups</code> extension to support 64-bit integer data types (<code>longs</code> and <code>ulongs</code>). +Specifically, the extension:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Extends the Intel subgroup block read and write functions to allow reading and writing 64-bit integer data from images and buffers.</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>Note that <code>cl_intel_subgroups</code> and <code>cl_khr_subgroups</code> already support broadcasts, scans, and reductions for 64-bit integer types, and that <code>cl_intel_subgroups</code> already supports shuffles for 64-bit integer types.</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_new_api_functions">New API Functions</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>None.</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_new_api_enums">New API Enums</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>None.</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_new_opencl_c_functions">New OpenCL C Functions</h2> +<div class="sectionbody"> +<div class="dlist"> +<dl> +<dt class="hdlist1">Add <code>ulong</code> variants of the subgroup block read and write functions: </dt> +<dd> +<div class="openblock"> +<div class="content"> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code>ulong intel_sub_group_block_read_ul( const __global ulong* p ) +ulong2 intel_sub_group_block_read_ul2( const __global ulong* p ) +ulong4 intel_sub_group_block_read_ul4( const __global ulong* p ) +ulong8 intel_sub_group_block_read_ul8( const __global ulong* p ) +ulong intel_sub_group_block_read_ul( image2d_t image, int2 byte_coord ) +ulong2 intel_sub_group_block_read_ul2( image2d_t image, int2 byte_coord ) +ulong4 intel_sub_group_block_read_ul4( image2d_t image, int2 byte_coord ) +ulong8 intel_sub_group_block_read_ul8( image2d_t image, int2 byte_coord ) + +void intel_sub_group_block_write_ul( __global ulong* p, ulong data ) +void intel_sub_group_block_write_ul2( __global ulong* p, ulong2 data ) +void intel_sub_group_block_write_ul4( __global ulong* p, ulong4 data ) +void intel_sub_group_block_write_ul8( __global ulong* p, ulong8 data ) +void intel_sub_group_block_write_ul( image2d_t image, int2 byte_coord, ulong data ) +void intel_sub_group_block_write_ul2( image2d_t image, int2 byte_coord, ulong2 data ) +void intel_sub_group_block_write_ul4( image2d_t image, int2 byte_coord, ulong4 data ) +void intel_sub_group_block_write_ul8( image2d_t image, int2 byte_coord, ulong8 data )</code></pre> +</div> +</div> +</div> +</div> +</dd> +<dt class="hdlist1">For naming consistency, also add suffixed aliases of the <code>uint</code> subgroup block read and write functions described in the <code>cl_intel_subgroups</code> extension: </dt> +<dd> +<div class="openblock"> +<div class="content"> +<div class="listingblock"> +<div class="content"> +<pre class="highlight"><code>uint intel_sub_group_block_read_ui( const __global uint* p ) +uint2 intel_sub_group_block_read_ui2( const __global uint* p ) +uint4 intel_sub_group_block_read_ui4( const __global uint* p ) +uint8 intel_sub_group_block_read_ui8( const __global uint* p ) +uint intel_sub_group_block_read_ui( image2d_t image, int2 byte_coord ) +uint2 intel_sub_group_block_read_ui2( image2d_t image, int2 byte_coord ) +uint4 intel_sub_group_block_read_ui4( image2d_t image, int2 byte_coord ) +uint8 intel_sub_group_block_read_ui8( image2d_t image, int2 byte_coord ) + +void intel_sub_group_block_write_ui( __global uint* p, uint data ) +void intel_sub_group_block_write_ui2( __global uint* p, uint2 data ) +void intel_sub_group_block_write_ui4( __global uint* p, uint4 data ) +void intel_sub_group_block_write_ui8( __global uint* p, uint8 data ) +void intel_sub_group_block_write_ui( image2d_t image, int2 byte_coord, uint data ) +void intel_sub_group_block_write_ui2( image2d_t image, int2 byte_coord, uint2 data ) +void intel_sub_group_block_write_ui4( image2d_t image, int2 byte_coord, uint4 data ) +void intel_sub_group_block_write_ui8( image2d_t image, int2 byte_coord, uint8 data )</code></pre> +</div> +</div> +</div> +</div> +</dd> +</dl> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_modifications_to_the_opencl_c_specification">Modifications to the OpenCL C Specification</h2> +<div class="sectionbody"> +<div class="sect2"> +<h3 id="_modifications_to_section_6_13_x_sub_group_read_and_write_functions">Modifications to Section 6.13.X "Sub Group Read and Write Functions"</h3> +<div class="paragraph"> +<p>This section was added by the <code>cl_intel_subgroups</code> extension.</p> +</div> +<div class="dlist"> +<dl> +<dt class="hdlist1">Add suffixed aliases of the previously un-suffixed 32-bit block read and write functions. There is no change to the description or behavior of these functions: </dt> +<dd> +<div class="openblock"> +<div class="content"> +<table class="tableblock frame-all grid-all stretch"> +<colgroup> +<col style="width: 55.5555%;"> +<col style="width: 44.4445%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top"><strong>Function</strong></th> +<th class="tableblock halign-left valign-top"><strong>Description</strong></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">uint intel_sub_group_block_read( + const __global uint* p ) +uint2 intel_sub_group_block_read2( + const __global uint* p ) +uint4 intel_sub_group_block_read4( + const __global uint* p ) +uint8 intel_sub_group_block_read8( + const __global uint* p ) + +uint intel_sub_group_block_read_ui( + const __global uint* p ) +uint2 intel_sub_group_block_read_ui2( + const __global uint* p ) +uint4 intel_sub_group_block_read_ui4( + const __global uint* p ) +uint8 intel_sub_group_block_read_ui8( + const __global uint* p )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reads 1, 2, 4, or 8 uints of data for each work item in the subgroup from the specified pointer as a block operation…​</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">uint intel_sub_group_block_read( + image2d_t image, + int2 byte_coord ) +uint2 intel_sub_group_block_read2( + image2d_t image, + int2 byte_coord ) +uint4 intel_sub_group_block_read4( + image2d_t image, + int2 byte_coord ) +uint8 intel_sub_group_block_read8( + image2d_t image, + int2 byte_coord ) + +uint intel_sub_group_block_read_ui( + image2d_t image, + int2 byte_coord ) +uint2 intel_sub_group_block_read_ui2( + image2d_t image, + int2 byte_coord ) +uint4 intel_sub_group_block_read_ui4( + image2d_t image, + int2 byte_coord ) +uint8 intel_sub_group_block_read_ui8( + image2d_t image, + int2 byte_coord )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reads 1, 2, 4, or 8 uints of data for each work item in the subgroup from the specified image at the specified coordinate as a block operation…​</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">void intel_sub_group_block_write( + __global uint* p, uint data ) +void intel_sub_group_block_write2( + __global uint* p, uint2 data ) +void intel_sub_group_block_write4( + __global uint* p, uint4 data ) +void intel_sub_group_block_write8( + __global uint* p, uint8 data ) + +void intel_sub_group_block_write_ui( + __global uint* p, uint data ) +void intel_sub_group_block_write_ui2( + __global uint* p, uint2 data ) +void intel_sub_group_block_write_ui4( + __global uint* p, uint4 data ) +void intel_sub_group_block_write_ui8( + __global uint* p, uint8 data )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Writes 1, 2, 4, or 8 uints of data for each work item in the subgroup to the specified pointer as a block operation…​</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">void intel_sub_group_block_write( + image2d_t image, + int2 byte_coord, uint data ) +void intel_sub_group_block_write2( + image2d_t image, + int2 byte_coord, uint2 data ) +void intel_sub_group_block_write4( + image2d_t image, + int2 byte_coord, uint4 data ) +void intel_sub_group_block_write8( + image2d_t image, + int2 byte_coord, uint8 data ) + +void intel_sub_group_block_write_ui( + image2d_t image, + int2 byte_coord, uint data ) +void intel_sub_group_block_write_ui2( + image2d_t image, + int2 byte_coord, uint2 data ) +void intel_sub_group_block_write_ui4( + image2d_t image, + int2 byte_coord, uint4 data ) +void intel_sub_group_block_write_ui8( + image2d_t image, + int2 byte_coord, uint8 data )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Writes 1, 2, 4, or 8 uints of data for each work item in the subgroup to the specified image at the specified coordinate as a block operation…​</p></td> +</tr> +</tbody> +</table> +</div> +</div> +</dd> +<dt class="hdlist1">Also, add <code>ulong</code> variants of the block read and write functions. In the descriptions of these functions, the "note below describing out-of-bounds behavior" is in the <code>cl_intel_subgroups</code> extension specification: </dt> +<dd> +<div class="openblock"> +<div class="content"> +<table class="tableblock frame-all grid-all stretch"> +<colgroup> +<col style="width: 55.5555%;"> +<col style="width: 44.4445%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top"><strong>Function</strong></th> +<th class="tableblock halign-left valign-top"><strong>Description</strong></th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">ulong intel_sub_group_block_read_ul( + const __global ulong* p ) +ulong2 intel_sub_group_block_read_ul2( + const __global ulong* p ) +ulong4 intel_sub_group_block_read_ul4( + const __global ulong* p ) +ulong8 intel_sub_group_block_read_ul8( + const __global ulong* p )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reads 1, 2, 4, or 8 ulongs of data for each work item in the subgroup from the specified pointer as a block operation. +The data is read strided, so the first value read is:</p> +<p class="tableblock"><code>p[ sub_group_local_id ]</code></p> +<p class="tableblock">and the second value read is:</p> +<p class="tableblock"><code>p[ sub_group_local_id + max_sub_group_size ]</code></p> +<p class="tableblock">etc.</p> +<p class="tableblock">There is no defined out-of-range behavior for these functions.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">ulong intel_sub_group_block_read_ul( + image2d_t image, + int2 byte_coord ) +ulong2 intel_sub_group_block_read_ul2( + image2d_t image, + int2 byte_coord ) +ulong4 intel_sub_group_block_read_ul4( + image2d_t image, + int2 byte_coord ) +ulong8 intel_sub_group_block_read_ul8( + image2d_t image, + int2 byte_coord )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Reads 1, 2, 4, or 8 ulongs of data for each work item in the subgroup from the specified <em>image</em> at the specified coordinate as a block operation. +Note that the coordinate is a byte coordinate, not an image element coordinate. +Also note that the image data is read without format conversion, so each work item may read multiple image elements +(for images with element size smaller than 64-bits).</p> +<p class="tableblock">The data is read row-by-row, so the first value read is from the row specified in the y-component of the provided <em>byte_coord</em>, the second value is read from the y-component of the provided <em>byte_coord</em> plus one, etc.</p> +<p class="tableblock">Please see the note below describing out-of-bounds behavior for these functions.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">void intel_sub_group_block_write_ul( + __global ulong* p, ulong data ) +void intel_sub_group_block_write_ul2( + __global ulong* p, ulong2 data ) +void intel_sub_group_block_write_ul4( + __global ulong* p, ulong4 data ) +void intel_sub_group_block_write_ul8( + __global ulong* p, ulong8 data )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Writes 1, 2, 4, 8, or 16 ulongs of data for each work item in the subgroup to the specified pointer as a block operation. +The data is written strided, so the first value is written to:</p> +<p class="tableblock"><code>p[ sub_group_local_id ]</code></p> +<p class="tableblock">and the second value is written to:</p> +<p class="tableblock"><code>p[ sub_group_local_id + max_sub_group_size ]</code></p> +<p class="tableblock">etc.</p> +<p class="tableblock"><em>p</em> must be aligned to a 128-bit (16-byte) boundary.</p> +<p class="tableblock">There is no defined out-of-range behavior for these functions.</p></td> +</tr> +<tr> +<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock"> +<div class="content"> +<pre class="highlight"><code class="language-c" data-lang="c">void intel_sub_group_block_write_ul( + image2d_t image, + int2 byte_coord, ulong data ) +void intel_sub_group_block_write_ul2( + image2d_t image, + int2 byte_coord, ulong2 data ) +void intel_sub_group_block_write_ul4( + image2d_t image, + int2 byte_coord, ulong4 data ) +void intel_sub_group_block_write_ul8( + image2d_t image, + int2 byte_coord, ulong8 data )</code></pre> +</div> +</div></div></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Writes 1, 2, 4, or 8 ulongs of data for each work item in the subgroup to the specified <em>image</em> at the specified coordinate as a block operation. +Note that the coordinate is a byte coordinate, not an image element coordinate. +Unlike the image block read function, which may read from any arbitrary byte offset, the x-component of the byte coordinate for the image block write functions must be a multiple of four; +in other words, the write must begin at 32-bit boundary. +There is no restriction on the y-component of the coordinate. +Also, note that the image <em>data</em> is written without format conversion, so each work item may write multiple image elements (for images with element size smaller than 64-bits).</p> +<p class="tableblock">The data is written row-by-row, so the first value written is from the row specified by the y-component of the provided <em>byte_coord</em>, the second value is written from the y-component of the provided <em>byte_coord</em> plus one, etc.</p> +<p class="tableblock">Please see the note below describing out-of-bounds behavior for these functions.</p></td> +</tr> +</tbody> +</table> +</div> +</div> +</dd> +</dl> +</div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_modifications_to_the_opencl_spir_v_environment_specification">Modifications to the OpenCL SPIR-V Environment Specification</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>The section numbers below refer to sections added by the <code>cl_intel_spirv_subgroups</code> extension.</p> +</div> +<div class="paragraph"> +<p>Note that the restrictions described in Section 7.1.X.3 - <em>Notes and Restrictions</em> in the <code>cl_intel_spirv_subgroups</code> extension are unchanged and continue to apply for this extension.</p> +</div> +<div class="sect2"> +<h3 id="_add_to_section_7_1_x_2_block_io_instructions">Add to Section 7.1.X.2 - Block IO Instructions</h3> +<div class="dlist"> +<dl> +<dt class="hdlist1">Add to the description of supported types in this section: </dt> +<dd> +<div class="openblock"> +<div class="content"> +<div class="paragraph"> +<p>Additionally, if the OpenCL environment supports the extension <code>cl_intel_subgroups_long</code>:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>Scalars and <strong>OpTypeVectors</strong> with 2, 4, or 8 <em>Component Count</em> components of the following <em>Component Type</em> types:</p> +<div class="ulist"> +<ul> +<li> +<p><strong>OpTypeInt</strong> with a <em>Width</em> of 64 bits and <em>Signedness</em> of 0 (equivalent to <code>long</code> and <code>ulong</code>)</p> +</li> +</ul> +</div> +</li> +</ul> +</div> +</div> +</div> +</dd> +</dl> +</div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_issues">Issues</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>None.</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_revision_history">Revision History</h2> +<div class="sectionbody"> +<table class="tableblock frame-all grid-rows stretch"> +<colgroup> +<col style="width: 4.7619%;"> +<col style="width: 14.2857%;"> +<col style="width: 14.2857%;"> +<col style="width: 66.6667%;"> +</colgroup> +<thead> +<tr> +<th class="tableblock halign-left valign-top">Rev</th> +<th class="tableblock halign-left valign-top">Date</th> +<th class="tableblock halign-left valign-top">Author</th> +<th class="tableblock halign-left valign-top">Changes</th> +</tr> +</thead> +<tbody> +<tr> +<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">2020-03-13</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock">Ben Ashbaugh</p></td> +<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>First public revision.</strong></p></td> +</tr> +</tbody> +</table> +</div> +</div> +</div> +<div id="footer"> +<div id="footer-text"> +Version V2.2-11-93-g2eccabe<br> +Last updated 2020-03-13 13:09:47 -0700 +</div> +</div> + +<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-MML-AM_HTMLorMML"></script> +</body> +</html> \ No newline at end of file
diff --git a/extensions/registry.py b/extensions/registry.py index 38fc9ac..8c9e077 100644 --- a/extensions/registry.py +++ b/extensions/registry.py
@@ -206,6 +206,16 @@ 'flags' : { 'public' }, 'url' : 'extensions/intel/cl_intel_subgroups.html', }, + 'cl_intel_subgroups_char' : { + 'number' : 59, + 'flags' : { 'public' }, + 'url' : 'extensions/intel/cl_intel_subgroups_char.html', + }, + 'cl_intel_subgroups_long' : { + 'number' : 60, + 'flags' : { 'public' }, + 'url' : 'extensions/intel/cl_intel_subgroups_long.html', + }, 'cl_intel_subgroups_short' : { 'number' : 48, 'flags' : { 'public' },