Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Pthreads&;多核编译器_Multithreading_Parallel Processing_Linux Kernel_Pthreads_Embedded Linux - Fatal编程技术网

Multithreading Pthreads&;多核编译器

Multithreading Pthreads&;多核编译器,multithreading,parallel-processing,linux-kernel,pthreads,embedded-linux,Multithreading,Parallel Processing,Linux Kernel,Pthreads,Embedded Linux,我正在使用支持SMP内核:Snapgear 2.6.21。 我在我的c应用程序中创建了4个线程,我正在尝试设置线程1在CPU 1上运行,线程2在CPU 2上运行,等等。 但是,编译器sparc linux gcc无法识别以下函数: CPU_SET (int cpu, cpu_set_t * set); CPU_ZERO (cpu_set_t * set); 这种类型:cpu\u set\t 它总是给我这些错误: implicit declaration of function 'CPU_ZER

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

CPU_SET (int cpu, cpu_set_t * set);
CPU_ZERO (cpu_set_t * set);
这种类型:cpu\u set\t 它总是给我这些错误:

implicit declaration of function 'CPU_ZERO'
implicit declaration of function 'CPU_SET'
'cpu_set_t' undeclared (first use in this function)
以下是将活动线程绑定到处理器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>**
**定义GNU源代码
包括**
但我总是犯同样的错误。您能帮助我吗?

您应该仔细阅读并测试其结果(并在出现故障时显示
errno
,例如使用
perror

事实上,我相信你应该改用(当然还要测试它的失败,等等…)

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

所以只需使用pthreads,不必担心关联性,除非在基准测试时看到实际问题

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


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

通过更好的格式编辑您的问题。在每行代码之间使用四个空格(代码块前后各有一个空行)。您应该测试
sched_setaffinity
的返回值,您可能会显示更多的源代码和编译命令。请随意编辑您的问题。@Mariem,使用
任务集
numactl
对您来说是一种可能的选择吗?您是否按照中的建议,在包含任何标题之前,确保在顶部包含#define"GNU"SOURCE?我也有同样的问题,这为我解决了。Linux的调度也可能非常糟糕——如果线程的负载不均匀,并且Linux确定它们基本上什么都不做,那么它可能会将线程分组到同一个核心上。这不是答案。这是一种糟糕的回应方式,基本上,阅读手册,你不应该这样做。如果人们在stackoverflow上发布问题,他们很可能有很好的理由去做他们所问的事情。如果你想推荐一个不同的行动方案而不是回答问题,那么请留下评论。这是一个答案,我将提供补充信息(特别是提示避免在没有充分理由的情况下关心亲和力),手册页不会给出太多