多核CPU利用测试

一直在想程序上是否特意让线程在指定的CPU上去运行,这样可以提高运行效率,所以特地写个代码让CPU使用率画正弦曲线的实验,我使用的是AMD X4 641的CPU,为四核四线程的片子。

代码如下

#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <ctime>
#include <windows.h>

using namespace std;

//得到循环0xFFFFFFFF次用的秒数
unsigned int test()
{
    unsigned int c = 0xFFFFFFFF;

    time_t t1, t2;
    time(&t1);

    for(unsigned int i = 0; i < c; i++)
        ;
    time(&t2);
    return (unsigned int)(t2 -t1);

}

#define T  20000                                        //周期时间 20秒
#define C  100                                            //采样点时间间隔
#define PI 3.1415                                        //PI
const unsigned int count = 0xFFFFFFFF / (test() *1000); //采样间隔可以执行的循环数目
const unsigned int N = T/C;                                //周期内采样点数目
unsigned int v[N] = { 0 };                                //所有采样点连续执行循环数
unsigned int mt[N] = { 0 };                                //所有采样点休眠毫秒数

int main()
{
    //指定运行CPU
    SetThreadAffinityMask(GetCurrentThread(), 3);  
    for(int i = 0; i < N; i++)
    {
        double x = 2 * PI * i / N;
        double r = (sin(x) + 1) / 2;

        mt[i] = C - r * C;
        v[i] = r * C * count;
    }
    for(;;)
    {
        for(int i = 0; i < N; i++)
        {
            for(int j = 0; j < v[i]; j++)
                ;
            Sleep(mt[i]);
        }
    }
}

不指定CPU,发现,貌似系统会平分一下到第一和第二个CPU的使用

指定在第一个CPU上运行的话,效果如下:

指定运行在第二个CPU上,效果如下:

指定在第三个CPU上运行,效果如下:

指定在第四个CPU上运行的话,效果如下:

如果指定的话,那么会固定使用那个指定的CPU,但是有一点比较纳闷的,指定运行在第一个和第二个上没问题,指定运行在第三个上,不知道运行在哪个上了,而指定运行在第4个上,却运行第3个CPU上,难道是我的CPU有问题,明明是四核四线程的CPU,为什么指定在第3个上,没效果,而指定在第四个上却运行在第3个上呢。

这是AMD的CPU的测试结果,不知道Intel的CPU上是不是一样的效果。

我想换个intel的八核十六线程的CPU,感觉现在这个四核四线程的应付不过来平时的工作了。

等换了八核十六线程的片子以后,再做下测试。

时间: 2024-08-05 15:34:46

多核CPU利用测试的相关文章

python多线程为什么不能利用多核cpu

GIL 与 Python 线程的纠葛 GIL 是什么东西?它对我们的 python 程序会产生什么样的影响?我们先来看一个问题.运行下面这段 python 程序,CPU 占用率是多少? # 请勿在工作中模仿,危险:) def dead_loop(): while True: pass dead_loop() 答案是什么呢,占用 100% CPU?那是单核!还得是没有超线程的古董 CPU.在我的双核 CPU 上,这个死循环只会吃掉我一个核的工作负荷,也就是只占用 50% CPU.那如何能让它在双核

利用多核CPU来加速Linux命令 — awk、sed、bzip2、grep、wc

你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作--一些无法并行的操作.数据专家们,我是在对你们说.你可能有一个4核或更多核的CPU,但我们合适的工具,例如 grep, bzip2, wc, awk, sed等等,都是单线程的,只能使用一个CPU内核.借用卡通人物Cartman的话,"如何我能使用这些内核"?要想让Linux命令使用所有的CPU内核,我们需要用到GNU Parallel命令,它让我们所有的CPU内核在单机内做神奇的map-reduce操作

python多线程不能利用多核cpu,但有时候多线程确实比单线程快。

python 为什么不能利用多核 CPU  GIL 其实是因为在 python中有一个 GIL( Global Interpreter Lock),中文为:全局解释器锁.  1.最开始时候设计GIL是为了数据安全 python为了数据安全设计了这个 GIL. 2.每个 CPU在同一时间只能执行一个线程: (在单核 CPU下的多线程其实都只是并发,不是并行,并发和并行从宏观上来讲都是同时处理多路请求的概念. 但并发和并行又有区别,并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同

为什么python的多线程不能利用多核CPU?

为什么python的多线程不能利用多核CPU,但是咱们在写代码的时候,多线程的确是在并发,而且还比单线程快. 一.python的多线程不能利用多核CPU? 原因: 因为GIL,python只有一个GIL,运行python时,就要拿到这个锁才能执行,在遇到I/O 操作时会释放这把锁. 如果是纯计算的程序,没有 I/O 操作,解释器会每隔100次操作就释放这把锁,让别的线程有机会 执行(这个次数可以通sys.setcheckinterval 来调整)同一时间只会有一个获得GIL线程在跑,其他线程都处

转摘--如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等

http://www.vaikan.com/use-multiple-cpu-cores-with-your-linux-commands/ 你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作——一些无法并行的操作.数据专家们,我是在对你们说.你可能有一个4核或更多核的CPU,但我们合适的工具,例如 grep, bzip2, wc, awk, sed等等,都是单线程的,只能使用一个CPU内核. 借用卡通人物Cartman的话,“如何我能使用这些内核”? 要想让Lin

多核CPU上python多线程并行的一个假象

GIL 与 Python 线程的纠葛 GIL 是什么东西?它对我们的 python 程序会产生什么样的影响?我们先来看一个问题.运行下面这段 python 程序,CPU 占用率是多少? # 请勿在工作中模仿,危险:) def dead_loop(): while True: pass dead_loop() 答案是什么呢,占用 100% CPU?那是单核!还得是没有超线程的古董 CPU.在我的双核 CPU 上,这个死循环只会吃掉我一个核的工作负荷,也就是只占用 50% CPU.那如何能让它在双核

多核CPU上python多线程并行的一个假象(转)

转自:http://www.cnblogs.com/skying555/p/6527189.html GIL 与 Python 线程的纠葛 GIL 是什么东西?它对我们的 python 程序会产生什么样的影响?我们先来看一个问题.运行下面这段 python 程序,CPU 占用率是多少? # 请勿在工作中模仿,危险:) def dead_loop(): while True: pass dead_loop() 答案是什么呢,占用 100% CPU?那是单核!还得是没有超线程的古董 CPU.在我的双

单核,多核CPU的原子操作

一. 何谓"原子操作":原子操作就是: 不可中断的一个或者一系列操作, 也就是不会被线程调度机制打断的操作, 运行期间不会有任何的上下文切换(context switch). 二. 为什么关注原子操作?1. 如果确定某个操作是原子的, 就不用为了去保护这个操作而加上会耗费昂贵性能开销的锁. - (巧妙的利用原子操作和实现无锁编程)2. 借助原子操作可以实现互斥锁(mutex). (linux中的mutex_lock_t)3. 借助互斥锁, 可以实现让更多的操作变成原子操作. 三. 单核

linux 多核CPU性能调优

常常感觉系统资源不够用,一台机子上跑了不下3个比较重要的服务,但是每天我们还要在上面进行个备份压缩等处理,网络长时间传输,这在就很影响本就不够用的系统资源: 这个时候我们就可以把一些不太重要的比如copy/备份/同步等工作限定在一颗cpu上,或者是多核的cpu的一颗核心上进行处理,虽然这不一定是最有效的方法,但可以最大程度上利用了有效资源,降低那些不太重要的进程占用cpu资源: 查看系统下cpu信息: cat /proc/cpuinfo taskset就可以帮我们完成这项工作,而且操作非常简单: