C++マルチスレッド-マルチコアCPU下のマルチスレッド

7327 ワード

マルチコアCPU下のマルチスレッド
マルチコアが発生する前に,我々のCPUは実際に何らかの規則に従ってスレッドを順次スケジューリングしていた.特定の時点において、CPUが実行するか、または特定のスレッドが実行されるか.しかしながら、現在マルチコアCPUが存在すると、ある時点でn個のタスクがn個のコア上で実行される可能性が高いため、すべてが異なる.簡単なopen mpテストを作成することができます.コアであれば、実行時間は同じです.
#include   
#define MAX_VALUE 10000000  
  
double _test(int value)  
{  
    int index;  
    double result;  
  
    result = 0.0;  
    for(index = value + 1; index < MAX_VALUE; index +=2 )  
        result += 1.0 / index;  
  
    return result;  
}  
  
void test()  
{  
    int index;  
    int time1;  
    int time2;  
    double value1,value2;  
    double result[2];  
  
    time1 = 0;  
    time2 = 0;  
  
    value1 = 0.0;  
    time1 = GetTickCount();  
    for(index = 1; index < MAX_VALUE; index ++)  
        value1 += 1.0 / index;  
  
    time1 = GetTickCount() - time1;  
  
    value2 = 0.0;  
    memset(result , 0, sizeof(double) * 2);  
    time2 = GetTickCount();  
  
#pragma omp parallel for  
    for(index = 0; index < 2; index++)  
        result[index] = _test(index);  
  
    value2 = result[0] + result[1];  
    time2 = GetTickCount() - time2;  
  
    printf("time1 = %d,time2 = %d
"
,time1,time2); return; }

マルチスレッドプログラミング
なぜマルチスレッドプログラミングをするのですか?その理由は多く,1)マルチコアcpu下のマルチスレッド2)のように動作速度を向上させるためのものもあれば,リソースの利用率を向上させるためのものもあり,例えばネットワーク環境下でリソースをダウンロードする場合,遅延がしばしば高く,異なるthreadで異なる場所からリソースを取得することができる.これにより効率が向上する3)より良いサービスを提供するために,例えばサーバ4)他にマルチスレッドプログラミングが必要な場所などがある.