我正在研究双核(尤其是在嵌入式系统中)是如何有益的。我想比较两个目标:一个是手臂皮质-A9 (925 MHz)双核,另一个是臂皮质-A8单核。我有一些想法(请看下面),但我不确定,我会使用双核功能:
My questions are: 如何在不同的核心上执行多个线程(没有OpenMP,因为它不能在我的目标上工作,而且它与VxWorks不兼容)
2-内核如何使用共享内存在双核上执行代码:它如何为全局变量和静态变量分配堆栈、堆、内存?3-是否可以添加C标志以指示CPU核的数量,以便我们能够使用双核特性。4-内核如何在双核上处理程序执行(有很多线程)。
Some tests to compare two architecture regarding OS and Dual core / single core
Dual core VS single core:创建三个线程,执行一些例程,并依赖于其他结果(如矩阵乘法)。然后测量双核和单核所花费的时间(没有openMP怎么可能)
Ping pong:一个进程向other.two进程发送一条消息,反复来回传递一条消息。我们应该研究每个体系结构所需的时间如何随着消息的大小而变化。
One to all: 秩为0的进程向程序中的所有其他进程发送相同的消息,然后从所有其他进程接收长度相同的消息。所花费的时间随着消息的大小和进程的数量而变化吗?
发布于 2017-06-17 00:04:03
简短的回答。仅Linux:
如何在不同的核心上执行多个线程
在单个进程中使用多个进程或线程。
内核如何使用共享内存在双核上执行代码:如何为全局变量和静态变量分配堆栈、堆、内存?
在Linux中,它们都属于进程。(不过,您可以使用__thread关键字来声明线程局部变量。)
换句话说,如果一个线程分配了一些内存,该内存将立即对同一进程中的所有其他线程可见。即使线程退出,内存也不会发生任何变化。对于其他线程来说,稍后释放内存是完全正常的。
每个线程都有自己的堆栈,默认情况下,堆栈相当大。(对于p线程,这很容易使用指定较小堆栈大小的pthread_attr_t来控制。)
一般来说,在内核端,单线程进程和多线程进程在内存处理或程序执行上没有区别。(当然,用户空间代码需要正确地使用内存和线程;内核根本不试图阻止愚蠢的用户空间代码击中自己的头部。)
是否可以添加C标志以指示CPU核的数量,以便我们能够使用双核功能。
是的,例如,通过检查/proc/cpuinfo伪文件。
但是,将这样的详细信息留给系统管理员更常见。Apache等服务允许管理员在配置文件或命令行中配置号码。甚至make也支持-j JOBS参数,允许多个编译任务并行运行。
我非常热烈地建议您忘记任何检测魔术,而是让用户指定使用的线程数。(如果您坚持,可以在默认情况下使用检测魔法,但前提是用户/管理员没有给出要使用的线程数量的任何提示。)
还可以为每个线程设置CPU掩码,指定线程可能运行的核心集。除了在基准测试中,它更多地是为了可重复性而做的,或者是在专为占用机器上的所有资源而设计的过程中,它是非常罕见的。
内核如何在双核上处理程序执行(有很多线程)。
就像它处理很多同时进行的过程一样。
有一些控件(控件组、cpu掩码)和资源计算,它们在同一进程内的不同进程和线程之间的处理方式不同,但一般来说,单个进程中的单独线程的执行方式与单独的进程相同。
https://stackoverflow.com/questions/44594690
复制相似问题