以下のC言語のプログラムをスレッドを複数使用して処理するようにしてもらいたいです。
スレッドが1つの時と複数使用した時との時間をtime関数で計測したいとも思っています。
参考サイトなどでもいいので教えてもらいたいです。
回答お願いします。linuxを使用しています。
C言語
1#include <stdio.h> 2#include <stdlib.h> 3#include <omp.h> 4 5#define THREAD_NUM 2 6 7struct task { 8 double start, end; 9 double sum; 10}; 11 12struct task tasks[THREAD_NUM]; 13 14double calc(long size) { 15 double start, sum; 16 long d; 17 int i; 18 19 omp_set_num_threads(THREAD_NUM); 20 21 // create tasks 22 start = 1; 23 d = size / THREAD_NUM; 24 for (i = 0; i < THREAD_NUM; ++i) { 25 tasks[i].start = start; 26 tasks[i].end = start + d - 1; 27 tasks[i].sum = 0; 28 //printf("%f %f\n", tasks[i].start, tasks[i].end); 29 30 start += d; 31 } 32 tasks[i - 1].end = size; 33 34#pragma omp parallel 35 { 36 const int tid = omp_get_thread_num(); 37 double s, n; 38 39 s = 0; 40 for (n = tasks[tid].start; n <= tasks[tid].end; ++n) 41 s += n; 42 tasks[tid].sum = s; 43 } 44 45 sum = 0; 46 for (i = 0; i < THREAD_NUM; ++i) { 47 //printf("%d %f\n", i, tasks[i].sum); 48 sum += tasks[i].sum; 49 } 50 printf("%f\n", sum); 51 52 return sum; 53} 54 55int main(int argc, char **argv) { 56 calc(10000000000); 57 58 exit(0); 59}
回答3件
あなたの回答
tips
プレビュー