#include <stdio.h>
#include <omp.h>
#include <time.h>
void sequential_execution( ) {
int sum = 0 ;
for ( int i = 0 ; i < 1000000 ; ++ i) {
sum += i;
}
double duration = ( double ) ( end - start) / CLOCKS_PER_SEC;
printf ( "Sequential execution time: %f seconds\n " , duration
) ; printf ( "Sum (Sequential): %d\n " , sum
) ; }
void parallel_execution( int num_threads) {
int sum = 0 ;
#pragma omp parallel for num_threads(num_threads) reduction(+:sum)
for ( int i = 0 ; i < 1000000 ; ++ i) {
sum += i;
}
double duration = ( double ) ( end - start) / CLOCKS_PER_SEC;
printf ( "Parallel execution time with %d threads: %f seconds\n " , num_threads
, duration
) ; printf ( "Sum (Parallel): %d\n " , sum
) ; }
int main( ) {
// Calculate sequential execution time
sequential_execution( ) ;
// Calculate parallel execution time with 2 threads
parallel_execution( 4 ) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxvbXAuaD4KI2luY2x1ZGUgPHRpbWUuaD4KCnZvaWQgc2VxdWVudGlhbF9leGVjdXRpb24oKSB7CiAgICBpbnQgc3VtID0gMDsKICAgIGNsb2NrX3Qgc3RhcnQgPSBjbG9jaygpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKICAgICAgICBzdW0gKz0gaTsKICAgIH0KICAgIGNsb2NrX3QgZW5kID0gY2xvY2soKTsKICAgIGRvdWJsZSBkdXJhdGlvbiA9IChkb3VibGUpKGVuZCAtIHN0YXJ0KSAvIENMT0NLU19QRVJfU0VDOwogICAgcHJpbnRmKCJTZXF1ZW50aWFsIGV4ZWN1dGlvbiB0aW1lOiAlZiBzZWNvbmRzXG4iLCBkdXJhdGlvbik7CiAgICBwcmludGYoIlN1bSAoU2VxdWVudGlhbCk6ICVkXG4iLCBzdW0pOwp9Cgp2b2lkIHBhcmFsbGVsX2V4ZWN1dGlvbihpbnQgbnVtX3RocmVhZHMpIHsKICAgIGludCBzdW0gPSAwOwogICAgY2xvY2tfdCBzdGFydCA9IGNsb2NrKCk7CiAgICAjcHJhZ21hIG9tcCBwYXJhbGxlbCBmb3IgbnVtX3RocmVhZHMobnVtX3RocmVhZHMpIHJlZHVjdGlvbigrOnN1bSkKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CiAgICAgICAgc3VtICs9IGk7CiAgICB9CiAgICBjbG9ja190IGVuZCA9IGNsb2NrKCk7CiAgICBkb3VibGUgZHVyYXRpb24gPSAoZG91YmxlKShlbmQgLSBzdGFydCkgLyBDTE9DS1NfUEVSX1NFQzsKICAgIHByaW50ZigiUGFyYWxsZWwgZXhlY3V0aW9uIHRpbWUgd2l0aCAlZCB0aHJlYWRzOiAlZiBzZWNvbmRzXG4iLCBudW1fdGhyZWFkcywgZHVyYXRpb24pOwogICAgcHJpbnRmKCJTdW0gKFBhcmFsbGVsKTogJWRcbiIsIHN1bSk7Cn0KCmludCBtYWluKCkgewogICAgLy8gQ2FsY3VsYXRlIHNlcXVlbnRpYWwgZXhlY3V0aW9uIHRpbWUKICAgIHNlcXVlbnRpYWxfZXhlY3V0aW9uKCk7CiAgICAKICAgIC8vIENhbGN1bGF0ZSBwYXJhbGxlbCBleGVjdXRpb24gdGltZSB3aXRoIDIgdGhyZWFkcwogICAgcGFyYWxsZWxfZXhlY3V0aW9uKDQpOwogICAgCiAgICByZXR1cm4gMDsKfQo=