CINXE.COM
Sharing code between OptiX 8 and the Application - OptiX - NVIDIA Developer Forums
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Sharing code between OptiX 8 and the Application - OptiX - NVIDIA Developer Forums</title> <meta name="description" content="I’m writing a Path Tracer using OptiX 8. This is my first OptiX application and I (wrongly) started by porting my CPU Path Tracer after reading the Programming Guide and looking at a few examples. The design I’ve decide&hellip;"> <meta name="generator" content="Discourse 3.4.0.beta3-dev - https://github.com/discourse/discourse version d71016522e8d9bb21c20312388271f8f0dd53069"> <link rel="icon" type="image/png" href="https://global.discourse-cdn.com/nvidia/optimized/2X/0/0372ccc95874f71d7fbff64bbbff6f8c69dd850b_2_32x32.png"> <link rel="apple-touch-icon" type="image/png" href="https://global.discourse-cdn.com/nvidia/optimized/2X/8/819b2855e1f1f3249e77dc713405cf77d1eda57c_2_180x180.png"> <meta name="theme-color" media="all" content="#000000"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, user-scalable=yes, viewport-fit=cover"> <link rel="canonical" href="https://forums.developer.nvidia.com/t/sharing-code-between-optix-8-and-the-application/309381" /> <link rel="search" type="application/opensearchdescription+xml" href="https://forums.developer.nvidia.com/opensearch.xml" title="NVIDIA Developer Forums Search"> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/color_definitions_nvidia_4_13_b0e6a9bf93713cf1d1478e25b62f18833c3cf820.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" class="light-scheme"/> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/desktop_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="desktop" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/automation_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="automation" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/checklist_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="checklist" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-ai_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-ai" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-akismet_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-akismet" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-antivirus_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-antivirus" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-assign_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-assign" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-cakeday_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-cakeday" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-calendar_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-calendar" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-chat-integration_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-chat-integration" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-data-explorer_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-data-explorer" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-details_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-details" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-docs_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-docs" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-jira_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-jira" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-lazy-videos_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-lazy-videos" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-local-dates_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-local-dates" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-policy_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-policy" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-presence_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-presence" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-solved_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-solved" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-templates_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-templates" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-topic-voting_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-topic-voting" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-translator_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-translator" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-user-notes_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-user-notes" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-yearly-review_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-yearly-review" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/footnote_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="footnote" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/hosted-site_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="hosted-site" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/poll_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="poll" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/spoiler-alert_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="spoiler-alert" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-ai_desktop_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-ai_desktop" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-calendar_desktop_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-calendar_desktop" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/discourse-topic-voting_desktop_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="discourse-topic-voting_desktop" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/poll_desktop_a0eee66b08799ab07414e8b689b5f4dada707e91.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="poll_desktop" /> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/desktop_theme_11_d44f674dbebc6d04cb93320be0a0aa5b72e0d2d7.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="desktop_theme" data-theme-id="11" data-theme-name="custom header links"/> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/desktop_theme_18_9a79ebc15ad3c4f807e85fe309e8959ee11d4f96.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="desktop_theme" data-theme-id="18" data-theme-name="topic thumbnails"/> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/desktop_theme_19_fb9ac007701ff5ca6e7c095e97fa1b654e7756b3.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="desktop_theme" data-theme-id="19" data-theme-name="versatile banner"/> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/desktop_theme_13_0af64655fecb6a9ed407080d18cfdc208ddbe8ec.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="desktop_theme" data-theme-id="13" data-theme-name="discourse-nvidia-theme"/> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/desktop_theme_17_fa34540ca6989abe2302b4ea9d21a1ad1c16219e.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="desktop_theme" data-theme-id="17" data-theme-name="fix bulk actions button focus"/> <link href="https://sea2.discourse-cdn.com/nvidia/stylesheets/desktop_theme_20_dcf048c51982d668d078dac82d8ac6c5d2966e55.css?__ws=forums.developer.nvidia.com" media="all" rel="stylesheet" data-target="desktop_theme" data-theme-id="20" data-theme-name="versatile banner adjustments"/> <script src="//assets.adobedtm.com/5d4962a43b79/76a76b0bb8ea/launch-7d434965ec64.min.js" async="" nonce="Sn6lOdKW9GRwBxUdvVIksSmu6"></script> <meta name="google-site-verification" content="If3jxgzZoS1XODkXDOo83AD2VzBqttpfA2TfyU7YQlk"> <script defer="" src="https://sea2.discourse-cdn.com/nvidia/theme-javascripts/dbd2b5fc7317c86b8d3bb000f99224d82134a5d8.js?__ws=forums.developer.nvidia.com" data-theme-id="13" nonce="Sn6lOdKW9GRwBxUdvVIksSmu6"></script> <script defer="" src="https://sea2.discourse-cdn.com/nvidia/theme-javascripts/dc40147ee1dbb3eacb2870c9212fe522658a046b.js?__ws=forums.developer.nvidia.com" data-theme-id="13" nonce="Sn6lOdKW9GRwBxUdvVIksSmu6"></script> <!-- OneTrust Cookies Consent Notice start for nvidia.com --> <script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" data-document-language="true" type="text/javascript" charset="UTF-8" data-domain-script="3e2b62ff-7ae7-4ac5-87c8-d5949ecafff5" nonce="Sn6lOdKW9GRwBxUdvVIksSmu6"></script> <!-- OneTrust Cookies Consent Notice end for nvidia.com --> <script type="text/javascript" src="https://images.nvidia.com/aem-dam/Solutions/ot-js/ot-custom.js" nonce="Sn6lOdKW9GRwBxUdvVIksSmu6"></script><script defer="" src="https://sea2.discourse-cdn.com/nvidia/theme-javascripts/098438cd37b784b1cdbf6a91223ae055e9a0d312.js?__ws=forums.developer.nvidia.com" data-theme-id="22" nonce="Sn6lOdKW9GRwBxUdvVIksSmu6"></script> <link rel="alternate nofollow" type="application/rss+xml" title="RSS feed of 'Sharing code between OptiX 8 and the Application'" href="https://forums.developer.nvidia.com/t/sharing-code-between-optix-8-and-the-application/309381.rss" /> <meta property="og:site_name" content="NVIDIA Developer Forums" /> <meta property="og:type" content="website" /> <meta name="twitter:card" content="summary" /> <meta name="twitter:image" content="https://global.discourse-cdn.com/nvidia/original/3X/e/4/e41d27491ee72562cf68c340597ca95f587879bd.png" /> <meta property="og:image" content="https://global.discourse-cdn.com/nvidia/original/3X/e/4/e41d27491ee72562cf68c340597ca95f587879bd.png" /> <meta property="og:url" content="https://forums.developer.nvidia.com/t/sharing-code-between-optix-8-and-the-application/309381" /> <meta name="twitter:url" content="https://forums.developer.nvidia.com/t/sharing-code-between-optix-8-and-the-application/309381" /> <meta property="og:title" content="Sharing code between OptiX 8 and the Application" /> <meta name="twitter:title" content="Sharing code between OptiX 8 and the Application" /> <meta property="og:description" content="I’m writing a Path Tracer using OptiX 8. This is my first OptiX application and I (wrongly) started by porting my CPU Path Tracer after reading the Programming Guide and looking at a few examples. The design I’ve decided to give to it is the following: the Scene hierarchy is loaded on host, and transferred to GPU. The Scene’s device pointer becomes the launchParams of the OptiX program which in turn is able to access Scene elements (e.g. the Integrator (I support many of them), Sampler, Mesh(es..." /> <meta name="twitter:description" content="I’m writing a Path Tracer using OptiX 8. This is my first OptiX application and I (wrongly) started by porting my CPU Path Tracer after reading the Programming Guide and looking at a few examples. The design I’ve decided to give to it is the following: the Scene hierarchy is loaded on host, and transferred to GPU. The Scene’s device pointer becomes the launchParams of the OptiX program which in turn is able to access Scene elements (e.g. the Integrator (I support many of them), Sampler, Mesh(es..." /> <meta property="og:article:section" content="Gaming and Visualization Technologies" /> <meta property="og:article:section:color" content="76B900" /> <meta property="og:article:section" content="Visualization" /> <meta property="og:article:section:color" content="76B900" /> <meta property="og:article:section" content="OptiX" /> <meta property="og:article:section:color" content="76B900" /> <meta property="og:article:tag" content="optix" /> <meta property="og:article:tag" content="cuda" /> <meta name="twitter:label1" value="Reading time" /> <meta name="twitter:data1" value="4 mins 🕑" /> <meta name="twitter:label2" value="Likes" /> <meta name="twitter:data2" value="1 ❤" /> <meta property="article:published_time" content="2024-10-10T15:01:41+00:00" /> <meta property="og:ignore_canonical" content="true" /> <script type="application/ld+json">{"@context":"http://schema.org","@type":"QAPage","name":"Sharing code between OptiX 8 and the Application","mainEntity":{"@type":"Question","name":"Sharing code between OptiX 8 and the Application","text":"I’m writing a Path Tracer using OptiX 8. This is my first OptiX application and I (wrongly) started by porting my CPU Path Tracer after reading the Programming Guide and looking at a few examples.\n\nThe design I’ve decided to give to it is the following: the Scene hierarchy is loaded on host, and tra…","upvoteCount":0,"answerCount":1,"datePublished":"2024-10-10T15:01:41.597Z","author":{"@type":"Person","name":"loryruta","url":"https://forums.developer.nvidia.com/u/loryruta"},"acceptedAnswer":{"@type":"Answer","text":"You can use nvcc to compile multiple .cu files at once using the relocatable device code flag, if you want it to not inline your classes and instead link them. (With the already-mentioned caveat that OptiX API functions must be inlined and/or optix-enabled.) But doing this by default for all your co…","upvoteCount":1,"datePublished":"2024-10-11T20:17:17.345Z","url":"https://forums.developer.nvidia.com/t/sharing-code-between-optix-8-and-the-application/309381/7","author":{"@type":"Person","name":"dhart","url":"https://forums.developer.nvidia.com/u/dhart"}}}}</script> </head> <body class="crawler browser-update"> <header> <a href="/"> NVIDIA Developer Forums </a> </header> <div id="main-outlet" class="wrap" role="main"> <div id="topic-title"> <h1> <a href="/t/sharing-code-between-optix-8-and-the-application/309381">Sharing code between OptiX 8 and the Application</a> </h1> <div class="topic-category" itemscope itemtype="http://schema.org/BreadcrumbList"> <span itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"> <a href="/c/gaming-and-visualization-technologies/visualization/optix/167" class="badge-wrapper bullet" itemprop="item"> <span class='badge-category-bg' style='background-color: #76B900'></span> <span class='badge-category clear-badge'> <span class='category-name' itemprop='name'>Gaming and Visualization Technologies</span> </span> </a> <meta itemprop="position" content="1" /> </span> <span itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"> <a href="/c/gaming-and-visualization-technologies/visualization/optix/167" class="badge-wrapper bullet" itemprop="item"> <span class='badge-category-bg' style='background-color: #76B900'></span> <span class='badge-category clear-badge'> <span class='category-name' itemprop='name'>Visualization</span> </span> </a> <meta itemprop="position" content="2" /> </span> <span itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"> <a href="/c/gaming-and-visualization-technologies/visualization/optix/167" class="badge-wrapper bullet" itemprop="item"> <span class='badge-category-bg' style='background-color: #76B900'></span> <span class='badge-category clear-badge'> <span class='category-name' itemprop='name'>OptiX</span> </span> </a> <meta itemprop="position" content="3" /> </span> </div> <div class="topic-category"> <div class='discourse-tags list-tags'> <a href='https://forums.developer.nvidia.com/tag/optix' class='discourse-tag' rel="tag">optix</a>, <a href='https://forums.developer.nvidia.com/tag/cuda' class='discourse-tag' rel="tag">cuda</a> </div> </div> </div> <div itemscope itemtype='http://schema.org/DiscussionForumPosting'> <meta itemprop='headline' content='Sharing code between OptiX 8 and the Application'> <link itemprop='url' href='https://forums.developer.nvidia.com/t/sharing-code-between-optix-8-and-the-application/309381'> <meta itemprop='datePublished' content='2024-10-10T15:01:41Z'> <meta itemprop='articleSection' content='OptiX'> <meta itemprop='keywords' content='optix, cuda'> <div itemprop='publisher' itemscope itemtype="http://schema.org/Organization"> <meta itemprop='name' content='NVIDIA'> <div itemprop='logo' itemscope itemtype="http://schema.org/ImageObject"> <meta itemprop='url' content='https://global.discourse-cdn.com/nvidia/original/3X/a/1/a1ef6e0c1fbd3fad5bf82538b78dfaa9c5fa1a61.png'> </div> </div> <div id='post_1' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://forums.developer.nvidia.com/u/loryruta'><span itemprop='name'>loryruta</span></a> </span> <link itemprop="mainEntityOfPage" href="https://forums.developer.nvidia.com/t/sharing-code-between-optix-8-and-the-application/309381"> <span class="crawler-post-infos"> <time datetime='2024-10-10T15:01:41Z' class='post-time'> October 10, 2024, 3:01pm </time> <meta itemprop='dateModified' content='2024-10-10T16:34:01Z'> <span itemprop='position'>1</span> </span> </div> <div class='post' itemprop='text'> <p>I’m writing a Path Tracer using OptiX 8. This is my first OptiX application and I (wrongly) started by porting my CPU Path Tracer after reading the Programming Guide and looking at a few examples.</p> <p>The design I’ve decided to give to it is the following: the Scene hierarchy is loaded on host, and transferred to GPU. The Scene’s device pointer becomes the <code>launchParams</code> of the OptiX program which in turn is able to access Scene elements (e.g. the Integrator (I support many of them), Sampler, Mesh(es) etc.). I only have one module binding to all entrypoints (rayGen, hitCH, miss), which is compiled to .optixir. This module is responsible to forward the event to the Integrator instance, that can be get from <code>launchParams</code>.</p> <p>In my application code, I have some functions using OptiX Device API, that are supposed to be called only by the OptiX program. For example:</p> <pre><code class="lang-auto">// Application -> Sampler.cu __device__ curandState& Sampler::randomState() { uint3 launchIdx = optixGetLaunchIndex(); // <- </code></pre> <p>The OptiX program compilation to .optixir succeeds, but the compilation of the App fails:</p> <pre><code class="lang-auto">ptxas /tmp/tmpxft_00016fed_00000000-7_Sampler.ptx, line 1295; error : Call to '_optix_get_launch_index_x' requires call prototype ptxas /tmp/tmpxft_00016fed_00000000-7_Sampler.ptx, line 1300; error : Call to '_optix_get_launch_index_y' requires call prototype ptxas /tmp/tmpxft_00016fed_00000000-7_Sampler.ptx, line 1305; error : Call to '_optix_get_launch_index_z' requires call prototype </code></pre> <p>I lack an understanding of how and if the .optixir module <em>can communicate back</em> with the application code. I know that I can share utilities forcing functions to inline, or with more effort using callable programs, but I’d need a suggestion before proceeding.</p> <p>What do you think about the design I’ve given to my program? Is it compatible with OptiX?</p> <p>EDIT: how can I inspect the content of a optixir and of a ptx file?</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> </div> <div id='post_2' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://forums.developer.nvidia.com/u/dhart'><span itemprop='name'>dhart</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-10-10T21:47:51Z' class='post-time'> October 10, 2024, 9:47pm </time> <meta itemprop='dateModified' content='2024-10-10T21:47:51Z'> <span itemprop='position'>2</span> </span> </div> <div class='post' itemprop='text'> <p>Hi <a class="mention" href="/u/loryruta">@loryruta</a>, welcome to the OptiX forum!</p> <p>How exactly are you compiling the .optixir file, and how are you loading it? Are you passing the <code>-optix-ir</code> flag (or ‘–ptx’ when using ptx) to nvcc?</p> <p>When you build the OptiX SDK samples, check out the “VERBOSE” cmake variables in the “advanced” variables section. These enable print of full command line for each build step, which might help you see & debug the build process.</p> <p>Here are a couple of old threads on the SDK build process that might help you (one of these has the same error message you posted):</p> <p><a href="https://forums.developer.nvidia.com/t/simple-ptx-shader-optix-7/165303">https://forums.developer.nvidia.com/t/simple-ptx-shader-optix-7/165303</a><br> <a href="https://forums.developer.nvidia.com/t/generating-ptx-code-using-optix-7-4-and-cmake/213221/5">https://forums.developer.nvidia.com/t/generating-ptx-code-using-optix-7-4-and-cmake/213221/5</a></p> <p>PTX is text, but OptiX-IR is binary and we don’t offer tools to inspect it. <a href="https://raytracing-docs.nvidia.com/optix8/guide/index.html#program_pipeline_creation#program-input" rel="noopener nofollow ugc">https://raytracing-docs.nvidia.com/optix8/guide/index.html#program_pipeline_creation#program-input</a></p> <p>I don’t yet understand your design ideas enough to comment on them. In particular I would assume the integrators and samplers are mainly code(?), I’m not sure I understand what it means to access those from the scene, unless you’re referring to things like material parameters.(?) The optixPathTracer sample is quite small, and a good one to play with, modify, and understand completely before going very deep into an OptiX based renderer design. From there, I’d recommend also studying the design of <a href="https://github.com/NVIDIA/OptiX_Apps">OptiX Advanced Samples</a>.</p> <p>OptiX programs typically communicate with the host CPU application code via memory copies, and/or any of the various shared memory types (unified memory, pinned & mapped or unmapped memory, etc.) This is the same way that any CUDA application communicates with the host; think of an OptiX application as just CUDA with some raytracing. Launch Params you already know about, that’s a way to send a small amount of global data to your OptiX module. To share other kinds of data, the most common setup is to allocate memory using <code>cudaMalloc()</code>, copy using <code>cudaMemcpy()</code>, and read/write from the appropriate copy of the buffer on either side. The easiest thing to study, perhaps, is the result image buffer written in any OptiX SDK sample, study how those are allocated, written by the device, copied, and read by the host. I hope I interpreted your question correctly and didn’t just say a bunch of stuff you already know.</p> <p>–<br> David.</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> </div> <div id='post_3' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://forums.developer.nvidia.com/u/loryruta'><span itemprop='name'>loryruta</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-10-11T13:29:52Z' class='post-time'> October 11, 2024, 1:29pm </time> <meta itemprop='dateModified' content='2024-10-11T13:29:52Z'> <span itemprop='position'>3</span> </span> </div> <div class='post' itemprop='text'> <blockquote> <p>How exactly are you compiling the .optixir file, and how are you loading it? Are you passing the -optix-ir flag (or ‘–ptx’ when using ptx) to nvcc?</p> </blockquote> <p>The compilation of the module is:</p> <p><code>nvcc -optix-ir my_module.cu <include-dirs> <linked-libraries> -o my_module.optixir</code></p> <p>From the module, I was calling functions compiled in the Application. For example <strong>(*)</strong>:</p> <pre><code class="lang-auto">// Integrator.h (included in Application/Module) __device__ Color3f integrate(); // Integrator.cu (Application) __device__ Color3f integrate() { } // my_module.cu #include "Integrator.h" extern "C" void __raygen() { integrate(); } </code></pre> <p>The module’s compilation command (<code>nvcc -optixir my_module.cu -o my_module.optixir</code>) run successfully, so I thought this design was feasible. However I really think it would have given me issues when later calling (optixCreateModule), due to the missing implementation of <code>integrate()</code>.</p> <blockquote> <p>In particular I would assume the integrators and samplers are mainly code</p> </blockquote> <p>Yes, they are code (no data) that have to be called from the OptiX IR module.</p> <blockquote> <p>OptiX programs typically communicate with the host CPU application code via memory copies</p> </blockquote> <p>Regarding the “communication” from OptiX module to the Application, I was referring to being able to call device functions, compiled in the Application, from the OptiX module. Just like this example <strong>(*)</strong>. So it’s not about data, but about running code. But I’m afraid there’s no “magic” permitting it…</p> <p>About the error I posted, I think it’s because I was using OptiX functions (e.g. <code>optixGetPayload_0()</code>) in the Application (not in the OptiX module).</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> </div> <div id='post_4' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://forums.developer.nvidia.com/u/loryruta'><span itemprop='name'>loryruta</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-10-11T13:55:32Z' class='post-time'> October 11, 2024, 1:55pm </time> <meta itemprop='dateModified' content='2024-10-11T13:55:32Z'> <span itemprop='position'>4</span> </span> </div> <div class='post' itemprop='text'> <p>After encountering this issue and confront my code with others and examples, I found out I had to change the project structure. I refactored it, but I’m encountering a new issue (<strong>unrelated to the previous one</strong>, however I’m keeping the same thread):</p> <p>Now the code I’m trying to compile into an OptiX module, is a set of many translation units (<code>.cu</code> files) and header files. By using either <code>-ptx</code> (resp. <code>-optix-ir</code>), I’m able to compile these <code>.cu</code> files into <code>.ptx</code> files.<br> From OptiX 8 API, <code>optixModuleCreate</code> takes as an input a single <code>ptx</code> file.</p> <p>So my question is: is there a way I can combine multiple <code>ptx</code> files into a single <code>ptx</code>? I compare it to combining multiple object files into a single static library.</p> <p>Discussing with other people, we came up with a possible solution. I can use:</p> <pre><code class="lang-auto"># Compile OptiX module files to PTX nvcc -ptx file1.cu -o file1.ptx nvcc -ptx file2.cu -o file2.ptx nvcc -ptx file3.cu -o file3.ptx nvcc -dlink -cubin file1.ptx file2.ptx file3.ptx -o all.cubin nvcc -dlink -fatbin file1.ptx file2.ptx file3.ptx -o all.fatbin # Decompile to a single .ptx file using cuobjdump? Yet not sure how... </code></pre> <p>Is there a simple way to do it?</p> <p>The alternative would be to refactor the project to have only one translation unit (e.g. by making all the <code>.cu</code> files headers and making the main <code>.cu</code> file inherit all of them). This is pretty much what I’ve seen examples do.</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> </div> <div id='post_5' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://forums.developer.nvidia.com/u/dhart'><span itemprop='name'>dhart</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-10-11T17:28:58Z' class='post-time'> October 11, 2024, 5:28pm </time> <meta itemprop='dateModified' content='2024-10-11T17:28:58Z'> <span itemprop='position'>5</span> </span> </div> <div class='post' itemprop='text'> <blockquote> <p>About the error I posted, I think it’s because I was using OptiX functions (e.g. <code>optixGetPayload_0()</code> ) in the Application (not in the OptiX module).</p> </blockquote> <p>Aha, that could do it. I’ll recommend keeping the host code and device code entirely distinct in separate files, as much as possible. It’s not a hard rule, just a suggestion; shared host/device utility functions are common, but try not to mix code intended to be only host with code intended to be only device in the same files.</p> <blockquote> <p>is there a way I can combine multiple <code>ptx</code> files into a single <code>ptx</code>?</p> </blockquote> <p>With OptiX, you can link multiple modules into a pipeline. There shouldn’t be any need to merge ptx or optixir files since you can use multiple modules in a pipeline, since you can have multiple program entry points in a single .cu & .ptx/.optixir file, and since for each program group you can specify a different entry point. Think of <code>optixModuleCreate()</code> sort of like compiling an object file and <code>optixPipelineCreate()</code> as linking multiple object files.</p> <p>You can also have multiple pipelines in an OptiX-based application, but pipelines don’t communicate directly, so for the purposes of code that communicates with or calls other code, you just need everything in the same pipeline, but not necessarily in the same module. The caveat with this to be aware of is that optix API device functions usually need to be inlined and/or marked as “optix-enabled”. See the “non-inlined functions” section of the “Callables” chapter in the OptiX Programming Guide for more info about optix-enabled functions. [1] You can also use Direct Callables or Continuation Callables for more explicit non-inlined function calls. Functions that call <code>optixTrace</code> specifically should plan to use Continuation Callables. [2]</p> <p>With your own code that doesn’t call any OptiX API functions, you can use regular non-inlined functions and link those function calls across different modules.</p> <p>[1] <a href="https://raytracing-docs.nvidia.com/optix8/guide/index.html#callables#non-inlined-functions" rel="noopener nofollow ugc">https://raytracing-docs.nvidia.com/optix8/guide/index.html#callables#non-inlined-functions</a><br> [2] <a href="https://raytracing-docs.nvidia.com/optix8/guide/index.html#callables#callables" rel="noopener nofollow ugc">https://raytracing-docs.nvidia.com/optix8/guide/index.html#callables#callables</a></p> <p>–<br> David.</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> </div> <div id='post_6' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://forums.developer.nvidia.com/u/loryruta'><span itemprop='name'>loryruta</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-10-11T19:04:03Z' class='post-time'> October 11, 2024, 7:04pm </time> <meta itemprop='dateModified' content='2024-10-11T19:04:03Z'> <span itemprop='position'>6</span> </span> </div> <div class='post' itemprop='text'> <blockquote> <p>since you can link multiple modules into a pipeline. There shouldn’t be any need to merge ptx or optixir files since you can use multiple modules in a pipeline</p> </blockquote> <p>My issue is that my OptiX Module is a made of multiple cu files, where each cu file is associated to a class. For example:</p> <p>Scene.cu<br> <strong>device</strong> Scene::sampleEmitter()<br> <strong>device</strong> Scene::getEmitterPdf(int)</p> <p>Emitter.cu<br> <strong>device</strong> Emitter::sampleSurfacePoint()</p> <p>Integrator.cu<br> <strong>device</strong> Integrator::integrate(const Ray&)</p> <p>Out of the nvcc compilation (e.g. to ptx) I’m getting Scene.ptx, Emitter.prx, Integrator.ptx, …</p> <p>So I <em>could</em> programmatically load all of these as OptiX modules and link them within the pipeline. But I don’t see this design flexible: if I add a new class I have to programmatically load another module.</p> <p>What I was searching for is to group these modules into one ptx file that I can load as a single module… is there something like that? Maybe my OptiX<br> Module code structure is <em>wrong</em>, and I should go for a single translation unit?</p> <p>P.S.: I’m talking about PTX but the same goes for optixir</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> </div> <div id='post_7' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://forums.developer.nvidia.com/u/dhart'><span itemprop='name'>dhart</span></a> </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-10-11T20:17:17Z' class='post-time'> October 11, 2024, 8:17pm </time> <meta itemprop='dateModified' content='2024-10-11T20:22:54Z'> <span itemprop='position'>7</span> </span> </div> <div class='post' itemprop='text'> <p>You <em>can</em> use nvcc to compile multiple .cu files at once using the relocatable device code flag, if you want it to not inline your classes and instead link them. (With the already-mentioned caveat that OptiX API functions must be inlined and/or optix-enabled.) But doing this by default for all your code will likely backfire. There are multiple problems with approaching GPU code that way, so I would definitely recommend studying existing solutions more and seeing how people achieve code sharing and code organization in CUDA without using the common CPU-based approach of producing one object file per class.</p> <p>The most common stance, or maybe “default assumption” for GPU code is that everything will be inlined into your entry point function. In order to organize your code to make this possible, you could mainly build header-only classes, that’s one common approach. Then you don’t need multiple .cu files, you can instead have one .cu file per entry point or program group, and the .cu file can <code>#include</code> all the helper classes it needs. Yes, this can result in lots of duplicated compiled binary instructions, that is essentially what heavy inlining can lead to.</p> <p>You do have control over preventing inlining as needed, as I mentioned earlier, using <code>__noinline__</code>, <code>__optix_enabled__</code>, Direct Callables, or Continuation Callables. But if you care about performance, you will probably want to control the use of linking individual classes & functions over inlining them very carefully. Linked function calls on the GPU are much more expensive than on the CPU and they prevent optimization across the function call boundary. For this reason, it’s a good idea to assume that you might not want to organize GPU code the same way that CPU code is organized.</p> <p>We do not recommend building one OptiX module for each class you have and attempting to link the code in the pipeline. We do recommend organizing your code around the entry points and/or program groups that you will need.</p> <p>–<br> David.</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="1" /> <span class='post-likes'>1 Like</span> </div> </div> <div id='post_8' itemprop='comment' itemscope itemtype='http://schema.org/Comment' class='topic-body crawler-post'> <div class='crawler-post-meta'> <span class="creator" itemprop="author" itemscope itemtype="http://schema.org/Person"> <a itemprop="url" href='https://forums.developer.nvidia.com/u/system'><span itemprop='name'>system</span></a> Closed </span> <span class="crawler-post-infos"> <time itemprop='datePublished' datetime='2024-10-25T20:17:45Z' class='post-time'> October 25, 2024, 8:17pm </time> <meta itemprop='dateModified' content='2024-10-25T20:17:45Z'> <span itemprop='position'>8</span> </span> </div> <div class='post' itemprop='text'> <p>This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.</p> </div> <div itemprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <meta itemprop="interactionType" content="http://schema.org/LikeAction"/> <meta itemprop="userInteractionCount" content="0" /> <span class='post-likes'></span> </div> </div> </div> <div id="related-topics" class="more-topics__list " role="complementary" aria-labelledby="related-topics-title"> <h3 id="related-topics-title" class="more-topics__list-title"> Related topics </h3> <div class="topic-list-container" itemscope itemtype='http://schema.org/ItemList'> <meta itemprop='itemListOrder' content='http://schema.org/ItemListOrderDescending'> <table class='topic-list'> <thead> <tr> <th>Topic</th> <th></th> <th class="replies">Replies</th> <th class="views">Views</th> <th>Activity</th> </tr> </thead> <tbody> <tr class="topic-list-item" id="topic-list-item-297985"> <td class="main-link" itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <meta itemprop='position' content='1'> <span class="link-top-line"> <a itemprop='url' href='https://forums.developer.nvidia.com/t/how-should-i-define-optix-sample-name-and-optix-sample-dir-in-my-own-optix-based-app/297985' class='title raw-link raw-topic-link'>How should I define OPTIX_SAMPLE_NAME and OPTIX_SAMPLE_DIR in my own optix-based app?</a> </span> <div class="link-bottom-line"> <a href='/c/gaming-and-visualization-technologies/visualization/optix/167' class='badge-wrapper bullet'> <span class='badge-category-bg' style='background-color: #76B900'></span> <span class='badge-category clear-badge'> <span class='category-name'>OptiX</span> </span> </a> <div class="discourse-tags"> </div> </div> </td> <td class="replies"> <span class='posts' title='posts'>7</span> </td> <td class="views"> <span class='views' title='views'>215</span> </td> <td> July 2, 2024 </td> </tr> <tr class="topic-list-item" id="topic-list-item-205189"> <td class="main-link" itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <meta itemprop='position' content='2'> <span class="link-top-line"> <a itemprop='url' href='https://forums.developer.nvidia.com/t/compile-error-failed-to-create-pipeline-optix-with-no-further-information-in-logs/205189' class='title raw-link raw-topic-link'>COMPILE ERROR: failed to create pipeline OptiX with no further information in logs</a> </span> <div class="link-bottom-line"> <a href='/c/gaming-and-visualization-technologies/visualization/optix/167' class='badge-wrapper bullet'> <span class='badge-category-bg' style='background-color: #76B900'></span> <span class='badge-category clear-badge'> <span class='category-name'>OptiX</span> </span> </a> <div class="discourse-tags"> <a href='https://forums.developer.nvidia.com/tag/compile' class='discourse-tag'>compile</a> </div> </div> </td> <td class="replies"> <span class='posts' title='posts'>5</span> </td> <td class="views"> <span class='views' title='views'>2451</span> </td> <td> March 21, 2022 </td> </tr> <tr class="topic-list-item" id="topic-list-item-195238"> <td class="main-link" itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <meta itemprop='position' content='3'> <span class="link-top-line"> <a itemprop='url' href='https://forums.developer.nvidia.com/t/gpu-program-optimization-questions/195238' class='title raw-link raw-topic-link'>GPU program optimization questions</a> </span> <div class="link-bottom-line"> <a href='/c/gaming-and-visualization-technologies/visualization/optix/167' class='badge-wrapper bullet'> <span class='badge-category-bg' style='background-color: #76B900'></span> <span class='badge-category clear-badge'> <span class='category-name'>OptiX</span> </span> </a> <div class="discourse-tags"> </div> </div> </td> <td class="replies"> <span class='posts' title='posts'>4</span> </td> <td class="views"> <span class='views' title='views'>1040</span> </td> <td> December 2, 2021 </td> </tr> <tr class="topic-list-item" id="topic-list-item-250890"> <td class="main-link" itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <meta itemprop='position' content='4'> <span class="link-top-line"> <a itemprop='url' href='https://forums.developer.nvidia.com/t/optix-7-5-memory-access-problem/250890' class='title raw-link raw-topic-link'>Optix 7.5 memory access problem</a> </span> <div class="link-bottom-line"> <a href='/c/gaming-and-visualization-technologies/visualization/optix/167' class='badge-wrapper bullet'> <span class='badge-category-bg' style='background-color: #76B900'></span> <span class='badge-category clear-badge'> <span class='category-name'>OptiX</span> </span> </a> <div class="discourse-tags"> </div> </div> </td> <td class="replies"> <span class='posts' title='posts'>24</span> </td> <td class="views"> <span class='views' title='views'>2007</span> </td> <td> August 11, 2023 </td> </tr> <tr class="topic-list-item" id="topic-list-item-284405"> <td class="main-link" itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <meta itemprop='position' content='5'> <span class="link-top-line"> <a itemprop='url' href='https://forums.developer.nvidia.com/t/beginner-with-simple-geometry-program-problems/284405' class='title raw-link raw-topic-link'>Beginner with simple geometry program problems</a> </span> <div class="link-bottom-line"> <a href='/c/gaming-and-visualization-technologies/visualization/optix/167' class='badge-wrapper bullet'> <span class='badge-category-bg' style='background-color: #76B900'></span> <span class='badge-category clear-badge'> <span class='category-name'>OptiX</span> </span> </a> <div class="discourse-tags"> </div> </div> </td> <td class="replies"> <span class='posts' title='posts'>7</span> </td> <td class="views"> <span class='views' title='views'>698</span> </td> <td> March 18, 2024 </td> </tr> <tr class="topic-list-item" id="topic-list-item-54011"> <td class="main-link" itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <meta itemprop='position' content='6'> <span class="link-top-line"> <a itemprop='url' href='https://forums.developer.nvidia.com/t/question-about-handling-buffers-when-using-multiple-gpus/54011' class='title raw-link raw-topic-link'>Question about handling buffers when using multiple GPUs?</a> </span> <div class="link-bottom-line"> <a href='/c/gaming-and-visualization-technologies/visualization/optix/167' class='badge-wrapper bullet'> <span class='badge-category-bg' style='background-color: #76B900'></span> <span class='badge-category clear-badge'> <span class='category-name'>OptiX</span> </span> </a> <div class="discourse-tags"> </div> </div> </td> <td class="replies"> <span class='posts' title='posts'>14</span> </td> <td class="views"> <span class='views' title='views'>3842</span> </td> <td> June 15, 2022 </td> </tr> <tr class="topic-list-item" id="topic-list-item-213873"> <td class="main-link" itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <meta itemprop='position' content='7'> <span class="link-top-line"> <a itemprop='url' href='https://forums.developer.nvidia.com/t/compile-optix-without-cmake/213873' class='title raw-link raw-topic-link'>Compile optix without Cmake</a> </span> <div class="link-bottom-line"> <a href='/c/gaming-and-visualization-technologies/visualization/optix/167' class='badge-wrapper bullet'> <span class='badge-category-bg' style='background-color: #76B900'></span> <span class='badge-category clear-badge'> <span class='category-name'>OptiX</span> </span> </a> <div class="discourse-tags"> </div> </div> </td> <td class="replies"> <span class='posts' title='posts'>13</span> </td> <td class="views"> <span class='views' title='views'>1686</span> </td> <td> June 15, 2022 </td> </tr> <tr class="topic-list-item" id="topic-list-item-165303"> <td class="main-link" itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <meta itemprop='position' content='8'> <span class="link-top-line"> <a itemprop='url' href='https://forums.developer.nvidia.com/t/simple-ptx-shader-optix-7/165303' class='title raw-link raw-topic-link'>Simple PTX shader - OptiX 7</a> </span> <div class="link-bottom-line"> <a href='/c/gaming-and-visualization-technologies/visualization/optix/167' class='badge-wrapper bullet'> <span class='badge-category-bg' style='background-color: #76B900'></span> <span class='badge-category clear-badge'> <span class='category-name'>OptiX</span> </span> </a> <div class="discourse-tags"> </div> </div> </td> <td class="replies"> <span class='posts' title='posts'>27</span> </td> <td class="views"> <span class='views' title='views'>4077</span> </td> <td> October 12, 2021 </td> </tr> <tr class="topic-list-item" id="topic-list-item-7225"> <td class="main-link" itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <meta itemprop='position' content='9'> <span class="link-top-line"> <a itemprop='url' href='https://forums.developer.nvidia.com/t/going-to-learn-ptx-and-write-a-gpu-compiler/7225' class='title raw-link raw-topic-link'>Going to learn PTX and write a GPU compiler</a> </span> <div class="link-bottom-line"> <a href='/c/accelerated-computing/cuda/cuda-programming-and-performance/7' class='badge-wrapper bullet'> <span class='badge-category-bg' style='background-color: #76B900'></span> <span class='badge-category clear-badge'> <span class='category-name'>CUDA Programming and Performance</span> </span> </a> <div class="discourse-tags"> </div> </div> </td> <td class="replies"> <span class='posts' title='posts'>20</span> </td> <td class="views"> <span class='views' title='views'>26717</span> </td> <td> January 19, 2009 </td> </tr> <tr class="topic-list-item" id="topic-list-item-166668"> <td class="main-link" itemprop='itemListElement' itemscope itemtype='http://schema.org/ListItem'> <meta itemprop='position' content='10'> <span class="link-top-line"> <a itemprop='url' href='https://forums.developer.nvidia.com/t/problems-with-callable-functions/166668' class='title raw-link raw-topic-link'>Problems with callable functions</a> </span> <div class="link-bottom-line"> <a href='/c/gaming-and-visualization-technologies/visualization/optix/167' class='badge-wrapper bullet'> <span class='badge-category-bg' style='background-color: #76B900'></span> <span class='badge-category clear-badge'> <span class='category-name'>OptiX</span> </span> </a> <div class="discourse-tags"> </div> </div> </td> <td class="replies"> <span class='posts' title='posts'>9</span> </td> <td class="views"> <span class='views' title='views'>1671</span> </td> <td> October 12, 2021 </td> </tr> </tbody> </table> </div> </div> </div> <footer class="container wrap"> <nav class='crawler-nav'> <ul> <li itemscope itemtype='http://schema.org/SiteNavigationElement'> <span itemprop='name'> <a href='/' itemprop="url">Home </a> </span> </li> <li itemscope itemtype='http://schema.org/SiteNavigationElement'> <span itemprop='name'> <a href='/categories' itemprop="url">Categories </a> </span> </li> <li itemscope itemtype='http://schema.org/SiteNavigationElement'> <span itemprop='name'> <a href='/guidelines' itemprop="url">Guidelines </a> </span> </li> <li itemscope itemtype='http://schema.org/SiteNavigationElement'> <span itemprop='name'> <a href='https://www.nvidia.com/en-us/about-nvidia/legal-info/' itemprop="url">Terms of Service </a> </span> </li> <li itemscope itemtype='http://schema.org/SiteNavigationElement'> <span itemprop='name'> <a href='https://www.nvidia.com/en-us/about-nvidia/privacy-policy/' itemprop="url">Privacy Policy </a> </span> </li> </ul> </nav> <p class='powered-by-link'>Powered by <a href="https://www.discourse.org">Discourse</a>, best viewed with JavaScript enabled</p> </footer> <script defer="" src="https://sea2.discourse-cdn.com/nvidia/theme-javascripts/d8ea190aad487b8feae316757854a563d15c4c27.js?__ws=forums.developer.nvidia.com" data-theme-id="13" nonce="Sn6lOdKW9GRwBxUdvVIksSmu6"></script> <footer> <div class="footer-links"> <div class="container"> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-3 col-lg-3"> <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12"> <div class="padding-md-footer"> <div class="logo-footer"></div> </div> </div> <div class="col-xs-12 col-sm-12 col-md-9 col-lg-9 padding-section-footer"></div> </div> <div class="col-xs-12 col-sm-12 col-md-9 col-lg-9"></div> </div> </div> </div> <div class="footer-boilerplate"> <div class="container"> <div class="boilerplate"> <div class="col-xs-12 col-sm-12 col-lg-9 padding-sm-bottom"> Copyright © 2024 NVIDIA Corporation <ul class="legal_links"> <li class="first leaf"> <a href="https://www.nvidia.com/en-us/about-nvidia/legal-info/" title="">Legal Information</a> </li> <li class="leaf"> <a href="https://developer.nvidia.com/legal/terms" title="">Terms of Use</a> </li> <li class="leaf"> <a href="https://www.nvidia.com/en-us/about-nvidia/privacy-policy/" title="">Privacy Policy</a> </li> <li class="leaf"> <a href="https://developer.nvidia.com/contact" title="">Contact</a> </li> <li class="last leaf"> <a href="https://www.nvidia.com/en-us/about-nvidia/cookie-policy/" title="NVIDIA websites use cookies to deliver and improve the website experience. See our cookie policy for further details on how we use cookies and how to change your cookie settings.">Cookie Policy</a> </li> </ul> </div> </div> </div> </div> </footer> <div class="buorg"><div>Unfortunately, <a href="https://www.discourse.org/faq/#browser">your browser is unsupported</a>. Please <a href="https://browsehappy.com">switch to a supported browser</a> to view rich content, log in and reply.</div></div> </body> </html>