gpt4 book ai didi

c++ - 在创建 OpenCL 上下文之前设置线程亲和性会导致段错误

转载 作者:行者123 更新时间:2023-11-30 04:46:08 26 4
gpt4 key购买 nike

我正在将主线程的亲和性设置为核心 0,但 OpenCl 上下文创建以段错误结束。 (我加入了一个代码片段来重现这个问题,我删除了 vector 大小检查以使其尽可能简洁)。

如果我在我的 cpuset 中定义了一个以上的内核,那么一切正常。

我有直觉知道哪里出了问题。但我更喜欢具体的解释。

然后错误可能比原始段错误更好。

打开 CL 信息:

  • 设备版本 Intel OpenCL 1.2(Build 475)
  • 驱动版本 1.2.0.475
#include <vector>

#include <CL/cl.hpp>


int main(int argc, char** argv)
{
// Set affinity to core 0
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);

// Retrieve first platform
std::vector<cl::Platform> platforms;
cl::Platform::get(&platforms);
cl::Platform platform = platforms[0];

// Retrieve first CPU device
std::vector<cl::Device> devices;
platform.getDevices(CL_DEVICE_TYPE_CPU, &devices);
cl::Device device = devices[0];

// Create context
cl::Context ctx(device);

return 0;
}

编辑:添加 OpenCL 版本

最佳答案

我刚刚使用两个英特尔 OpenCL SDK 尝试了您的示例,但手头没有您的确切版本。两者都运行无误,因此:无法重现

这个似乎比你的老一点(从内部版本号来看):

CL_DEVICE_VERSION:          OpenCL 1.2 (Build 43)
CL_DRIVER_VERSION: 1.2.0.43
CL_DEVICE_OPENCL_C_VERSION: OpenCL C 1.2

我认为,第二个仍然是最新的 Intel CPU 驱动程序:

CL_DEVICE_VERSION:          OpenCL 2.1 (Build 0)
CL_DRIVER_VERSION: 18.1.0.0920
CL_DEVICE_OPENCL_C_VERSION: OpenCL C 2.0

我在 Ubuntu 18.4 上使用 GCC 7.4.0。

根据我的经验,为 CPU 设置与英特尔 OpenCL 运行时的亲和性不是问题

我在 super 计算机上将它与 MPI 一起使用,在那里你会有多个,例如4,每个计算节点的 MPI 进程,然后让运行时将每个进程的 CPU 掩码设置为可用核心的分 ionic 集。然后,每个进程内的英特尔 OpenCL 运行时(在引擎盖下使用英特尔线程构建模块)将为每个分配的核心生成一个线程,即如预期的那样遵守主机进程的 CPU 掩码。如果您设置第一个线程的关联,结果可能会有所不同,并且还取决于您在程序中设置的位置(相对于 OpenCL 运行时生成它的线程的位置)。

因为您似乎已经在调试器中运行了代码并将范围缩小到 clcreatecontext我建议您尝试使用更新的 OpenCL 驱动程序。

关于c++ - 在创建 OpenCL 上下文之前设置线程亲和性会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56950612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com