Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.91 KB | None | 0 0
  1. typedef struct
  2. {
  3. double a[MAX_THREADS];
  4. double b[MAX_THREADS];
  5. } lib_workspace;
  6.  
  7. double lib_calc_something(double x, lib_workspace * work)
  8. {
  9. int thread_id = omp_get_thread_num();
  10. work->a[thread_id] = x - 2.0;
  11. work->b[thread_id] = x + 1.0;
  12. return work->a[thread_id] * work->b[thread_id];
  13. }
  14.  
  15. #pragma omp parallel for
  16. for (x = 0.0; x < 1.0; x += 0.1)
  17. {
  18. double y = lib_calc_something(x, work);
  19. ...
  20. }
  21.  
  22. typedef struct
  23. {
  24. double a;
  25. double b;
  26. } lib_workspace;
  27.  
  28. double lib_calc_something(double x, lib_workspace * work)
  29. {
  30. work->a = x - 2.0;
  31. work->b = x + 1.0;
  32. return work->a * work->b;
  33. }
  34.  
  35. /* allocate MAX_THREADS copies of lib_workspace */
  36. for (i = 0; i < MAX_THREADS; ++i)
  37. work[i] = lib_alloc();
  38.  
  39. #pragma omp parallel for
  40. for (x = 0.0; x < 1.0; x += 0.1)
  41. {
  42. int thread_id = omp_get_thread_num();
  43. double y = lib_calc_something(x, work[thread_id]);
  44. ...
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement