fork download
  1. #include <stdio.h>
  2. #include <omp.h>
  3.  
  4. #define N 8192
  5. #define M 64
  6.  
  7. int main(){
  8. int i;
  9. int A[N];
  10. int b[M] = {0}; // تم التهيئة مباشرة
  11. int sigma = 0;
  12.  
  13. // تبقى سيريال كما طلب
  14. for(i = 0; i < N; i++)
  15. A[i] = (int)(0.25 * i + 0.75 * i + 1) % M; // أعداد بين 0 و M-1
  16.  
  17. // تبقى سيريال كما طلب
  18. for(i = 0; i < M; i++)
  19. b[i] = 0;
  20.  
  21. // ✅ التوازي لحساب الهستوغرام b[]
  22. #pragma omp parallel for
  23. for(i = 0; i < N; i++) {
  24. #pragma omp atomic
  25. b[A[i]]++;
  26. }
  27.  
  28. // ✅ التوازي لتحديث عناصر A باستخدام b
  29. #pragma omp parallel for schedule(static)
  30. for(i = 0; i < N; i++) {
  31. A[i] += b[i % M];
  32. }
  33.  
  34. // ✅ التوازي لحساب المجموع sigma باستخدام reduction
  35. #pragma omp parallel for reduction(+:sigma) schedule(static)
  36. for(i = 0; i < N; i++) {
  37. sigma += A[i];
  38. }
  39.  
  40. printf("sigma = %d\n", sigma);
  41.  
  42. return 0;
  43. }
  44.  
Success #stdin #stdout 0.01s 5292KB
stdin
Standard input is empty
stdout
sigma = 1306624