Articles of 多核

如何在多核上运行使用bash进行pipe理的进程?

我有一个简单的bash脚本,pipe道输出到另一个进程。 即:。 dostuff | filterstuff 碰巧在我的Linux系统(openSUSE,如果它很重要的话,kernel 2.6.27),这两个进程都运行在一个内核上。 但是,在不同内核上运行不同的进程是一种默认策略,在这种情况下不会触发。 系统的哪个部分负责,我该怎么做来利用多核function? 请注意 ,在2.6.30内核上没有这样的问题。 澄清 :遵循丹尼斯·威廉姆森的build议,我确定了顶级程序,pipe道进程确实总是运行在同一处理器上。 Linux调度程序,通常做得非常好,这次不行。 我认为,在bash中的东西可以防止操作系统做到这一点。 问题是我需要一个适用于多核和单核机器的便携式解决scheme。 Dennis Williamson提出的taskset 解决scheme不适用于单核机器。 目前我正在使用:, dostuff | taskset -c 0 filterstuff 但这似乎是一个肮脏的黑客。 谁能提供更好的解决scheme?

sched_setaffinity()如何工作?

我想了解linux系统调用sched_setaffinity()如何工作。 这是我的问题在这里的一个后续。 我有这个指南 ,它解释了如何使用系统调用,并有一个非常整洁(工作!)的例子。 于是我下载了Linux 2.6.27.19 内核源码 。 我为包含该系统调用的行做了一个“grep”,并得到了91个结果。 没有希望。 最终,我想了解内核如何能够为特定内核 (或处理器)设置指令指针。 我熟悉单核 – 单线程程序的工作原理。 有人可能会发出'jmp foo'指令,这基本上将IP设置为'foo'标签的内存地址。 但是,如果有多个内核,则必须说:“在内存地址foo处获取下一条指令,并将内核编号为2的指令指针设置为在那里开始执行”。 在汇编代码中,我们是在指定哪个内核执行该操作? 回到内核代码:这里重要的是什么? 文件'kernel / sched.c'有一个名为sched_setaffinity()的函数,但是返回types“long” – 这与其手册页不一致。 那么这里重要的是什么? 哪些模块显示发布的组装指令? 什么模块正在读取“task_struct”,查看“cpus_allowed”成员,然后将其转换为指令? (我也浏览了glibc的源代码 – 但我认为它只是调用内核代码来完成这个任务。)

获取GNU八度与多核处理器一起工作。 (multithreading)

我希望能够用GNU八度编程multithreading,所以它会利用多个处理器。 我在Fedora 17 Linux上安装了GNU Octave,并做了如下工作: yum install octave 在我的电脑上安装了最新版本的八度,3.6.2。 它工作的很好,但是当你把两个巨大的matrix放在一起的时候,它就会陷入一个八度使用的CPU。 如果matrix乘法利用所有内核,那将是很好的,因为在这种情况下,CPU显然是瓶颈。 八度可以充分利用多核处理器并在multithreading上运行吗? 是否有一个库或编译时间标志呢?

如何从用户空间应用程序(Linux,C)中获取CPU内核号?

据推测,有一个库或简单的asm blob,可以得到我正在执行的当前CPU的数量。

当使用不同数量的多工人时不同的行为

我正在玩我的程序(试图多核几个部分),我注意到“CPU历史”看起来有点不同,取决于我开始工作的人数。 2-4名工人似乎产生了一个“稳定”的工作stream程,然而,盯住5-8名工人产生不稳定的行为(从零到最大,见图片)。 我应该指出,所有的运行都是以“平滑的”最大容量(例如2个核心,只有25%)开始的,并且在一分钟左右之后才开始出现不稳定的行为。 这是怎么回事? 我有4个核心处理器,你觉得这个行为可能与这个事实有关吗? 我希望你能看到照片。 2名工人 3名工人 4名工人 5名工人 6名工人 7名工人 8名工人

R在Windows XP上的多核处理 – 通过doMC和foreach

我正在发布这个问题,询问如何在Windows XP机器上优化R中多个处理器的使用。 目前我正在创build4个脚本(每个脚本包含(我在1:100中)和(我在101:200中)等),这些脚本同时在4个不同的R会话中运行。 这似乎使用所有可用的CPU。 然而,我想这样做更高效一点。 一种解决scheme可能是使用“doMC”和“foreach”软件包,但这在Windows机器上的R中是不可能的。 例如 library("foreach") library("strucchange") library("doMC") # would this be possible on a windows machine? registerDoMC(2) # for a computer with two cores (processors) ## Nile data with one breakpoint: the annual flows drop in 1898 ## because the first Ashwan dam was built data("Nile") plot(Nile) ## F statistics indicate one […]

有没有办法看到每个核心进程使用多lessCPU使用率?

我知道在perfmon中,你可以看到每个内核被利用了多less,一个特定的进程使用了​​多lessCPU。 然而,我似乎无法find一个方法来看看一个进程正在使用核心分解多lessCPU。 有没有一个内置的方式来查看这些信息? 有没有一个程序化的方式来看到这个? (C#首选)我是否通过问这个问题来certificateWindows(Vista)如何处理核心使用和上下文切换的误解? 编辑:更多的澄清我想找出。 我的过程只使用30-40%的总CPU(四核),因为它没有足够的multithreading来利用更多,还是因为它太I / O限制,磁盘访问是瓶颈? 那么没有办法做到这一点? (除了确保计算机上没有其他CPU活动)

CPU核心的rdtsc准确度

我从一个线程发送networking数据包,并在另一个CPU核心上运行的第二个线程上接收应答。 我的过程测量每个数据包发送和接收之间的时间(类似于ping)。 我正在使用rdtsc获得高分辨率,低开销的时间,这是我的实施所需要的。 所有测量看起来都可靠。 不过,我担心跨核心的rdtsc准确性,因为我一直在阅读一些文字,这意味着tsc在核心之间没有同步。 我在维基百科find了关于TSC的以下信息 持续的TSC行为确保了每个时钟节拍的持续时间是统一的,并且即使处理器内核改变了频率,也支持使用TSC作为挂钟定时器 。 这是所有英特尔处理器的架构行为。 尽pipe如此,我仍然担心跨核心的应计,这是我的问题 更多信息 我在一台Intel nehalem机器上运行我的程序。 操作系统是Linux。 所有内核都设置了“ constant_tsc ”cpu标志。