问题标签 [dpc++]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
77 浏览

clang - 是否需要构建 LLVM 才能构建 hipSYCL?

我正在运行 Centos 7 并正在尝试构建 hipSYCL(请参见此处

问题是 hipSYCL 需要从 LLVM 构建中获取 cmake 信息(通过 LLVM_DIR cmake 变量)。这对我来说是个问题,因为构建 LLVM 需要大量 35Gb 的库和 exe。我没有那么多内存可以闲置。

我确实为 Centos 7 在线找到了 llvm-toolset-8.0 的构建并安装了它,但令我惊讶的是,这似乎不适用于 LLVM_DIR,因为没有 cmake 文件(因为我没有在本地构建它)。

所以,我的问题是,有没有办法使用预先构建的 LLVM-clang 构建 hipSYCL?

如果我遗漏或误解了某些内容,我将不胜感激。

0 投票
1 回答
349 浏览

c++ - 在 SYCL 中使用一个缓冲区还是多个缓冲区更有效?

假设我有一个数据数组,例如一个大小为 N 的 3D 向量数组。假设我的 SYCL 内核的每次迭代都专门或主要只关注一个向量。作为一般规则,以下哪一种将其​​分解为连续缓冲区的方法更有效——或者它是否重要?

我意识到目标设备对此有很大影响,所以让我们假设它是一个独立的 GPU(即数据确实必须复制到不同的内存芯片,并且该设备没有像 FPGA 这样的疯狂架构——我是主要针对通过 CUDA 的 GTX 1080,但我希望当代码编译到 OpenCL 或我们使用另一个现代 GPU 时答案可能相似。

  1. 为每个坐标创建一个单独的缓冲区,例如sycl::buffer<float> x, y, z;每个大小为 N 的缓冲区。这样访问它们时,我可以使用sycl::id<1>传递给我的内核 lambda 作为索引而无需数学。(我怀疑编译器可能会对此进行优化。)
  2. 为所有这些创建一个打包缓冲区,例如sycl::buffer<float> coords;大小为 3N。当使用sycl::id<1>被调用访问它们时i,我将 x 坐标设为buffer_accessor[3*i],将 y 坐标设为buffer_accessor[3*i+1],将 z 坐标设为buffer_accessor[3*i+2]。(我不知道编译器是否可以对此进行优化,我不确定对齐问题是否会起作用。)
  3. 使用结构创建一个解压缩缓冲区,例如struct Coord { float x,y,z; }; sycl::buffer<Coord> coords;. 由于对齐填充,内存使用量增加了相当惊人的成本,在这个例子中增加了 33%——这也会增加将缓冲区复制到设备所需的时间。但权衡是您可以在不操作 的情况下访问数据sycl::id<1>,运行时只需处理一个缓冲区,并且设备上不应该出现任何缓存行对齐效率低下的问题。
  4. 使用大小为 (N,3) 的二维缓冲区并仅在第一个维度的范围内进行迭代。这是一个不太灵活的解决方案,我不明白为什么在不迭代所有维度时要使用多维缓冲区,除非为此用例内置了很多优化。

我找不到任何关于数据架构的指南来获得对这类事情的直觉。现在(4)看起来很傻,(3)涉及不可接受的内存浪费,我正在使用(2)但想知道我是否不应该使用(1)来避免 id 操作和 3*sizeof(float)对齐的访问块。

0 投票
1 回答
133 浏览

for-loop - 我的 DPC++ 代码没有编译为我在下面说明的循环,为什么?

您好,我正在尝试使用 DPC++ 并行化我的两个循环,但它给出了 LLVM 错误:SPIRV 内部错误。不知道为什么,各位大神能帮我解决一下问题吗?

https://simplecore-ger.intel.com/techdecoded/wp-content/uploads/sites/11/Webinar-Slides-DPC-Part-1-An-Introduction-to-the-New-Programming-Model-.pdf

https://simplecore-ger.intel.com/techdecoded/wp-content/uploads/sites/11/Webinar-Slides-DPC-Part-2-Programming-Best-Practices.pdf

0 投票
1 回答
79 浏览

c++ - Simple_Add DPC++ oneAPI 示例运行失败

我正在尝试从 oneAPI 示例浏览器运行一个基本的 Simple_Add DPC++ 示例;我使用VS2019和oneAPI toolkit 2021 Beta Update 10。
运行项目,它在这里崩溃 

queue q(d_selector, dpc_common::exception_handler);

在下面抛出异常

所有项目样本都在那里失败。

0 投票
1 回答
152 浏览

gdb - 如何在内核卸载到 GPU 的情况下调试以下 DPC++ 程序?

我想在英特尔 GNU 项目调试器中运行 DPC++ 程序。我已经从 Intel OneAPI Basekit 下载了 Intel GDB。它预装了 OneAPI Basekit。

下载链接是:

[https://software.intel.com/content/www/us/en/develop/tools/oneapi/base-toolkit.html#gs.ynm6aj]

如何在内核卸载到 GPU 的情况下调试以下 DPC++ 程序?如何在劣质和线程之间切换?请查看下面提供的代码。

0 投票
1 回答
148 浏览

tbb - 错误:内核函数、SYCL、DPCPP 不允许隐式捕获“this”

我尝试编写一种“映射”类,它通过一些指定目标类型(CPU 或 GPU/加速器)的参数来包装 OneAPI 调用隐藏硬件定位问题。map,将代码引导到SYCL内核或TBB以通过parallel for实现map操作。它以设备类型、CPU 或 GPU 和函数作为参数,并应用于集合中的所有项目。但是在内核函数中,我有一个错误,即不允许隐式捕获。我无法理解我的错误是什么。这是我的代码:

当我在 Eclipse 的控制台中检查问题时,它显示了这个错误:

1- 内核函数不允许隐式捕获“this”

0 投票
2 回答
263 浏览

c++11 - ERROR: SYCL kernel cannot call through a function pointer, DPCPP, TBB

I try to define an array of functions and pass to the map, which I defined as a class, then if my device is CPU, the execution of each of my functions over the vector goes through the CPU, if not, goes through the SYCL part and execute on GPU. At the same time, I want to measure the performance of my code, the performance of executing my code on CPU with TBB library. The problem is, when I compile my program it shows me this error and I do not know how can I fix it. I should point out that, before defining an array of functions, with definition of local copy of function in the SYCL part, my code works well and I had the result, but after defining an array of function, it troughs an error. my code:

The ERROR:

0 投票
1 回答
113 浏览

opencl - 如何在 Sycl+openCL+DPCPP 上定义和执行函数数组

在我的程序中,我定义了一个函数数组

而不是每次都定义一个函数,我有兴趣定义一个函数数组,然后在我的程序中执行它。但是在用于在 GPU 上执行的 SYCL 部分中,我有一个错误,我不知道如何修复它。

错误:SYCL 内核无法通过函数指针调用

0 投票
1 回答
115 浏览

gpu - 如何使用 Profiling+openCL+Sycl+DPCPP 测量 GPU 的执行时间

我读了这个链接 https://github.com/intel/pti-gpu

我尝试使用 OpenCL(TM) 的设备活动跟踪,但我很困惑,我不知道应该如何使用设备活动文档来测量加速器上的时间。为了测量 CPU 的性能,我使用了 chrono,但我有兴趣使用 profiling 来测量不同设备中 CPU 和 GPU 的性能。我的程序:

0 投票
1 回答
97 浏览

gpu - 如何测量设备+OpenCL+GPU中代码的执行时间

我尝试测量我的代码在 CPU 和 GPU 上的执行时间。为了测量 CPU 上的时间,我使用了 std::chrono::high_resolution_clock::now() 和 std::chrono::high_resolution_clock::now(), std::chrono::duration_caststd::chrono::nanoseconds(end - 开始)并为了测量 GPU 设备上的时间,我阅读了以下链接: 1- https://github.com/intel/pti-gpu/blob/master/chapters/device_activity_tracing/OpenCL.md 2- https:// docs.oneapi.com/versions/latest/dpcpp/iface/event.html 3- https://developer.codeplay.com/products/computecpp/ce/guides/computecpp-profiler/step-by-step-profiler-guide ?版本=2.2.1 依此类推......问题是,我很困惑,我无法理解如何使用分析来测量 GPU 上代码的执行时间。我什至不知道我应该把我的代码放在哪里,我犯了很多错误。我的代码是: