Ubuntu配置Intel oneAPI DPC++/C++ Compiler(icpc/icc)

Ubuntu配置Intel oneAPI DPC++/C++ Compiler(icpc/icc)

  1. 首先从Intel的官方下载
    https://www.intel.com/content/www/us/en/developer/articles/tool/oneapi-standalone-components.html#dpcpp-cpp
    根据自己的OS选择即可,文件名后面带星号的为online在线安装的版本(相当于只是个下载器),这里我选择了offline即离线版本
    Ubuntu配置Intel oneAPI DPC++/C++ Compiler(icpc/icc)_第1张图片
  2. 下载完成后执行上一步下载的.sh文件,具体文件名根据你当时下到的版本改动一下,之后一路默认配置一直点next即可
sudo ./l_dpcpp-cpp-compiler_p_2022.0.2.84_offline.sh
  1. 完成安装后进入安装目录,这里根据你当前使用的用户可能安装路径有区别(如果未指定路径)
    如果是sudo用户执行的,则目录应该在./opt/intel/oneapi,而如果是普通用户则应该是在$HOME/intel/oneapi
  2. 进入上述目录后,我们可以看到有一个名为setvars.sh的脚本,这是自动配置环境的,执行source setvars.sh intel64命令,需要注意的是如果你之后重启机器了需要再次执行该命令,网上也有如何解决source命令配置的环境如何做到写入profile一样永久效果的文章,不再赘述。如果你的机器是32位的,则后面的intel64参数可以修改为ia32
  3. 最后用一次测试用例看看是否配置成功
#include 

int main() {
  // Creating SYCL queue
  cl::sycl::queue Queue;

  // Creating buffer of 4 ints
  cl::sycl::buffer<cl::sycl::cl_int, 1> Buffer(4);

  // Size of index space for kernel
  cl::sycl::range<1> NumOfWorkItems{Buffer.get_count()};

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

  // Getting read only access to the buffer on the host
  const auto HostAccessor = Buffer.get_access<cl::sycl::access::mode::read>();

  // Check that the results are correct
  bool MismatchFound = false;
  for (size_t I = 0; I < Buffer.get_count(); ++I) {
    if (HostAccessor[I] != I) {
      std::cout << "The result is incorrect for element: " << I
                << " , expected: " << I << " , got: " << HostAccessor[I]
                << std::endl;
      MismatchFound = true;
    }
  }

  if (!MismatchFound) {
    std::cout << "The results are correct!" << std::endl;
  }

  return MismatchFound;
}

对这个代码进行编译

dpcpp simple-sycl-app.cpp -o simple-sycl-app

执行

./simple-sycl-app

如果最后结果出现The results are correct!,代表配置成功了,大功告成

你可能感兴趣的:(c++)