多核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,感覺現在這個四核四線程的應付不過來平時的工作了。

等換了八核十六線程的片子以后,再做下測試。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM