Posted to tcl by patthoyts at Fri Mar 16 13:57:35 GMT 2007view raw

  1. #define _CRT_SECURE_NO_DEPRECATE
  2.  
  3. #include <omp.h>
  4. #include <stdio.h>
  5.  
  6. static void
  7. subdomain(int iam, float *x, int istart, int ipoints)
  8. {
  9. int i;
  10. for (i = 0; i < ipoints; i++)
  11. x[istart+i] = (float)(48 + iam);
  12. }
  13.  
  14. static void
  15. sub(float *x, int npoints)
  16. {
  17. int iam, nt, ipoints, istart;
  18.  
  19. #pragma omp parallel default(shared) private(iam,nt,ipoints,istart)
  20. {
  21. iam = omp_get_thread_num();
  22. nt = omp_get_num_threads();
  23. ipoints = npoints / nt; /* size of partition */
  24. istart = iam * ipoints; /* starting array index */
  25. if (iam == nt-1) /* last thread may do more */
  26. ipoints = npoints - istart;
  27. printf("tid %d of %d from %d for %d\n", iam, nt, istart, ipoints);
  28. subdomain(iam, x, istart, ipoints);
  29. }
  30. }
  31.  
  32. int
  33. main(void)
  34. {
  35. float array[10000];
  36. FILE *fp = NULL;
  37.  
  38. sub(array, 10000);
  39. fp = fopen("z.dat", "w");
  40. if (fp) {
  41. fwrite(array, sizeof(float), 10000, fp);
  42. fclose(fp);
  43. }
  44.  
  45. return 0;
  46. }
  47.