並列処理プログラムについて
Posted: 2014年3月06日(木) 21:04
現在、並列処理について学ぼうと思い、「マルチコアCPUのための並列プログラミング」という本を基に勉強しています。
そこで
というコードがあり実行してみたところ以下のような結果が得られました。
このスレッドの切り替えというのはpthread_create関数にて行われているのでしょうか?
i=0 でスレッド0が実行され、i=1でスレッド1が実行されるのでは?と考えたのですが、これだと逐次処理になってしまいますし、
どこで疑似並列をしているのかなーと思った次第です。
まだ並列処理についてど素人ですので、かみ砕いてご教授いただければ幸いです。
環境
OS : Windows 7 64bit
コンパイラ : Visual Stdio 2005
そこで
#include<stdio.h>
#include<pthread.h>
#define THREAD_NUM 2
#define DATA_NUM 10
typedef struct _thread_arg{
int thread_no;
int *data;
}thread_arg_t;
void *thread_func(void *arg)
{
thread_arg_t *targ = (thread_arg_t *)arg; // 構造体型定義
int i;
for(i=0; i<DATA_NUM; i++){
printf("thread%d : %d + 1 = %d\n", targ->thread_no, targ->data[i], targ->data[i]+1);
}
return NULL;
}
int main(void)
{
pthread_t handle[THREAD_NUM];
thread_arg_t targ[THREAD_NUM];
int data[DATA_NUM];
int i;
// 初期化
for(i=0;i<DATA_NUM;i++){
data[i] = i;
}
// スレッド生成
for(i=0;i<THREAD_NUM;i++){
targ[i].thread_no = i;
targ[i].data = data;
pthread_create(&handle[i], NULL, thread_func, (void *)&targ[i] );
}
for(i=0;i<THREAD_NUM;i++){
pthread_join(handle[i], NULL);
}
return 0;
}
i=0 でスレッド0が実行され、i=1でスレッド1が実行されるのでは?と考えたのですが、これだと逐次処理になってしまいますし、
どこで疑似並列をしているのかなーと思った次第です。
まだ並列処理についてど素人ですので、かみ砕いてご教授いただければ幸いです。
環境
OS : Windows 7 64bit
コンパイラ : Visual Stdio 2005