gpt4 book ai didi

multithreading - Pthreads 和多核编译器

转载 作者:行者123 更新时间:2023-12-03 04:19:20 34 4
gpt4 key购买 nike

我正在使用支持 SMP 内核:Snapgear 2.6.21。我在我的 C 应用程序中创建了 4 个线程,我试图将线程 1 设置为在 CPU1 上运行,线程 2 在 CPU 2 上运行,等等。但是,编译器 sparc-linux-gcc 无法识别这些函数:

CPU_SET (int cpu, cpu_set_t * set);
CPU_ZERO (cpu_set_t * set);

这个类型:cpu_set_t它总是给我这些错误:

implicit declaration of function 'CPU_ZERO'
implicit declaration of function 'CPU_SET'
'cpu_set_t' undeclared (first use in this function)

这是我将事件线程绑定(bind)到处理器 0 的代码:

cpu_set_t mask;
CPU_ZERO (& mask);
CPU_SET (0, & mask) // bind processor 0
sched_setaffinity (0, sizeof(mask), & mask);

我已在顶部包含并定义:

**define _GNU_SOURCE
include <sched.h>**

但我总是遇到同样的错误。你能帮我吗?

最佳答案

您应该阅读sched_setaffinity(2)仔细并测试其结果(并在失败时显示 errno,例如使用 perror)。

实际上,我相信你应该使用pthread_setaffinity_np(3)相反(当然还要测试其失败等...)

更重要的是,我认为您不应该显式地设置亲和性。最近的 Linux 内核通常非常擅长在不同的 CPU 上调度正在运行的线程。

因此,只需使用 pthreads,不必担心关联性,除非您在基准测试时发现实际问题。

顺便说一句,将 -H 标志传递给您的 GCC (交叉)编译器可能会有所帮助。它向您显示包含的文件。也许还可以查看使用 gcc -C -E 获得的预处理形式;看起来有些头文件丢失或未找到(可能在编译时丢失了一些 -I include-directory,或者开发系统上丢失了一些头文件)

顺便说一句,你的kernel版本看起来很古老。您不能将内核升级到更新的版本(3.15.x 或某些 3.y)吗?

关于multithreading - Pthreads 和多核编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25014607/

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