タスク並列化 OpenMP vs pthread

OpenMPとpthreadでそれぞれタスク並列化を実装して比較した。


#include
#define N 90000000
int a[N];
int b[N];
int c[N];
int d[N];


int main()
{
int i=0;
int k=0;
int l=0;
int j=0;
//#pragma pomp inst begin(foo)
#pragma omp parallel
#pragma omp sections nowait
{
#pragma omp section
{
printf("a");
for(i=0;i
pthreadのコード


#include
#include
#include

#define N 90000000
#define THREAD_NUM 4
int a[N];
int b[N];
int c[N];
int d[N];


void thread_func(void *arg)
{
long tid;
tid = (long)arg;


int i=0;
int k=0;
int l=0;
int j=0;

switch(tid)
{
case 0:
for(i=0;i

  • 実行時間の比較(4スレッド)

real 0m30.565s
user 1m51.666s
sys 0m1.317s

    • pthread版

real 0m3.604s
user 0m11.973s
sys 0m1.757s

    • 逐次処理

real 0m6.833s
user 0m5.890s
sys 0m0.926s

OpenMPはオーバーヘッドが非常に大きいことがわかる。