pastebin

Paste Search Dynamic
Recent pastes
calculate sum
  1. #include <iostream>
  2. #include <chrono>
  3. #include <random>
  4. #include <omp.h>
  5.  
  6. using namespace std;
  7.  
  8. const int N = 10000;
  9. int arr[N];
  10.  
  11. // Function that performs the loop
  12. int calculate_sum() {
  13.     int sum = 0;
  14.     #pragma omp parallel for schedule(static)
  15.     for (int i = 0; i < N; ++i) {
  16.         sum += arr[i];
  17.     }
  18.     return sum;
  19. }
  20.  
  21. int main() {
  22.     // Initialize array with random numbers
  23.     srand(1234);
  24.     for (int i = 0; i < N; ++i) {
  25.         arr[i] = rand() % 100 + 1;
  26.     }
  27.  
  28.     // Calculate sum using static scheduling with different chunk sizes
  29.     cout << "Static scheduling:" << endl;
  30.     for (int chunk_size = 1; chunk_size <= 100; chunk_size += 10) {
  31.         auto start = chrono::high_resolution_clock::now();
  32.         #pragma omp parallel for schedule(static, chunk_size)
  33.         for (int i = 0; i < N; ++i) {
  34.             arr[i] *= 2;
  35.         }
  36.         auto end = chrono::high_resolution_clock::now();
  37.         cout << "Chunk size " << chunk_size << " took "
  38.              << chrono::duration_cast<chrono::microseconds>(end - start).count()
  39.              << " microseconds" << endl;
  40.     }
  41.  
  42.     // Calculate sum using dynamic scheduling with different chunk sizes
  43.     cout << "Dynamic scheduling:" << endl;
  44.     for (int chunk_size = 1; chunk_size <= 100; chunk_size += 10) {
  45.         auto start = chrono::high_resolution_clock::now();
  46.         #pragma omp parallel for schedule(dynamic, chunk_size)
  47.         for (int i = 0; i < N; ++i) {
  48.             arr[i] *= 2;
  49.         }
  50.         auto end = chrono::high_resolution_clock::now();
  51.         cout << "Chunk size " << chunk_size << " took "
  52.              << chrono::duration_cast<chrono::microseconds>(end - start).count()
  53.              << " microseconds" << endl;
  54.     }
  55.  
  56.     // Calculate sum using guided scheduling with different chunk sizes
  57.     cout << "Guided scheduling:" << endl;
  58.     for (int chunk_size = 1; chunk_size <= 100; chunk_size += 10) {
  59.         auto start = chrono::high_resolution_clock::now();
  60.         #pragma omp parallel for schedule(guided, chunk_size)
  61.         for (int i = 0; i < N; ++i) {
  62.             arr[i] *= 2;
  63.         }
  64.         auto end = chrono::high_resolution_clock::now();
  65.         cout << "Chunk size " << chunk_size << " took "
  66.              << chrono::duration_cast<chrono::microseconds>(end - start).count()
  67.              << " microseconds" << endl;
  68.     }
  69.  
  70.     // Calculate sum using default scheduling
  71.     cout << "Default scheduling:" << endl;
  72.     auto start = chrono::high_resolution_clock::now();
  73.     int sum = calculate_sum();
  74.     auto end = chrono::high_resolution_clock::now();
  75.     cout << "Sum is " << sum << endl;
  76.     cout << "Default scheduling took "<< chrono::duration_cast<chrono::microseconds>(end - start).count()<< " microseconds" << endl;
  77.         return 0;
  78. }
Parsed in 0.045 seconds