タスク並列化 OpenMP vs pthread
OpenMPとpthreadでそれぞれタスク並列化を実装して比較した。
- OpenMPのコード
#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.926sOpenMPはオーバーヘッドが非常に大きいことがわかる。