Skip to content

Instantly share code, notes, and snippets.

@kaityo256
Created November 6, 2017 09:45
Show Gist options
  • Save kaityo256/c5e40aec414c36b3c649e36a06757fdb to your computer and use it in GitHub Desktop.
Save kaityo256/c5e40aec414c36b3c649e36a06757fdb to your computer and use it in GitHub Desktop.
multithread malloc
//------------------------------------------------------------------------
#include <iostream>
#include <vector>
#include <omp.h>
#include <chrono>
//------------------------------------------------------------------------
const int N_THREADS = 16;
//------------------------------------------------------------------------
int
func1(int n, int i){
int sum = 0;
for(int k=0;k<2;k++){
std::vector <int> v;
for(int j=0;j<n;j++){
v.push_back(j*i);
}
sum = sum + v[n/2];
}
return sum;
}
//------------------------------------------------------------------------
int
main(void){
auto t1 = std::chrono::system_clock::now();
#pragma omp parallel for schedule(static)
for(int i=0;i<N_THREADS;i++){
func1(10000000,i);
}
#pragma omp barrier
auto t2 = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(t2-t1).count();
std::cout << "Parallel " << elapsed << std::endl;
t1 = std::chrono::system_clock::now();
func1(10000000,0);
t2 = std::chrono::system_clock::now();
elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(t2-t1).count();
std::cout << "Serial " << elapsed << std::endl;
}
//------------------------------------------------------------------------
@kaityo256
Copy link
Author

all: a.out b.out

a.out: test2.cpp
        icpc -O3 -qopenmp -std=c++11 $< -o $@

b.out: test2.cpp
        g++ -O3 -fopenmp -std=c++11 $< -o $@

run:
        export OMP_NUM_THREADS=1;./a.out
        export OMP_NUM_THREADS=2;./a.out
        export OMP_NUM_THREADS=8;./a.out
        export OMP_NUM_THREADS=16;./a.out
        export OMP_NUM_THREADS=24;./a.out
        export OMP_NUM_THREADS=1;./b.out
        export OMP_NUM_THREADS=2;./b.out
        export OMP_NUM_THREADS=8;./b.out
        export OMP_NUM_THREADS=16;./b.out
        export OMP_NUM_THREADS=24;./b.out

clean:
        rm -f a.out b.out

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment