首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以为nVIDIA GPU编写OpenCL-C++内核吗?

我可以为nVIDIA GPU编写OpenCL-C++内核吗?
EN

Stack Overflow用户
提问于 2019-11-06 16:48:15
回答 2查看 232关注 0票数 2

在过去的几年中,Khronos联盟已经发布了OpenCL规范的版本,其中不仅包括C-variant OpenCL编程语言,而且还包括C++-variant

有没有可能使用最新版本的CUDA和相关工具来编写针对nVIDIA GPU的类似C++的内核?NVIDIA的OpenCL samples似乎有点过时,而且只支持C语言。

EN

回答 2

Stack Overflow用户

发布于 2021-02-08 05:43:11

有了OpenCL 3.0的支持,你就可以用"C++ OpenCL“为内核编程了--它使开发人员能够在OpenCL内核中使用大多数C++17特性。有关OpenCL 3.0的更多信息,请访问here

“当规范最终确定时,英伟达将推出符合OpenCL 3.0的产品”--根据this的新闻稿。OpenCL 3.0最终规范于2020年9月30日发布。然而,截至2021年2月,我还没有发现任何支持OpenCL 3.0的Nvidia驱动程序。

票数 0
EN

Stack Overflow用户

发布于 2021-02-16 00:39:09

你没试过Sycl?它使用OpenCL,由你的C++-唯一的主机代码。

https://www.codingame.com/playgrounds/48226/introduction-to-sycl/hello-world

代码语言:javascript
复制
#include <iostream>
#include <CL/sycl.hpp>

class vector_addition;

int main(int, char**) {
   cl::sycl::float4 a = { 1.0, 2.0, 3.0, 4.0 };
   cl::sycl::float4 b = { 4.0, 3.0, 2.0, 1.0 };
   cl::sycl::float4 c = { 0.0, 0.0, 0.0, 0.0 };

   cl::sycl::default_selector device_selector;

   cl::sycl::queue queue(device_selector);
   std::cout << "Running on "
             << queue.get_device().get_info<cl::sycl::info::device::name>()
             << "\n";
   {
      cl::sycl::buffer<cl::sycl::float4, 1> a_sycl(&a, cl::sycl::range<1>(1));
      cl::sycl::buffer<cl::sycl::float4, 1> b_sycl(&b, cl::sycl::range<1>(1));
      cl::sycl::buffer<cl::sycl::float4, 1> c_sycl(&c, cl::sycl::range<1>(1));
  
      queue.submit([&] (cl::sycl::handler& cgh) {
         auto a_acc = a_sycl.get_access<cl::sycl::access::mode::read>(cgh);
         auto b_acc = b_sycl.get_access<cl::sycl::access::mode::read>(cgh);
         auto c_acc = c_sycl.get_access<cl::sycl::access::mode::discard_write>(cgh);

         cgh.single_task<class vector_addition>([=] () {
         c_acc[0] = a_acc[0] + b_acc[0];
         });
      });
   }
   std::cout << "  A { " << a.x() << ", " << a.y() << ", " << a.z() << ", " << a.w() << " }\n"
        << "+ B { " << b.x() << ", " << b.y() << ", " << b.z() << ", " << b.w() << " }\n"
        << "------------------\n"
        << "= C { " << c.x() << ", " << c.y() << ", " << c.z() << ", " << c.w() << " }"
        << std::endl;
        
   return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58726195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档