C++マルチスレッド-マルチコアCPU下のマルチスレッド
7327 ワード
マルチコアCPU下のマルチスレッド
マルチコアが発生する前に,我々のCPUは実際に何らかの規則に従ってスレッドを順次スケジューリングしていた.特定の時点において、CPUが実行するか、または特定のスレッドが実行されるか.しかしながら、現在マルチコアCPUが存在すると、ある時点でn個のタスクがn個のコア上で実行される可能性が高いため、すべてが異なる.簡単なopen mpテストを作成することができます.コアであれば、実行時間は同じです.
マルチスレッドプログラミング
なぜマルチスレッドプログラミングをするのですか?その理由は多く,1)マルチコアcpu下のマルチスレッド2)のように動作速度を向上させるためのものもあれば,リソースの利用率を向上させるためのものもあり,例えばネットワーク環境下でリソースをダウンロードする場合,遅延がしばしば高く,異なるthreadで異なる場所からリソースを取得することができる.これにより効率が向上する3)より良いサービスを提供するために,例えばサーバ4)他にマルチスレッドプログラミングが必要な場所などがある.
マルチコアが発生する前に,我々の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)他にマルチスレッドプログラミングが必要な場所などがある.