#include <iostream>
#include <cstdlib>
#include <ctime>
#include <sys/mman.h>
#include <chrono>

#include "prolificScheduler.hpp"
#include "collectiveScheduler.hpp"

using namespace std;
using namespace std::chrono;

int main(){

	int n=15;
	int k=100;
	size_t size = n * n * k * sizeof(double);
	double* B = (double*)mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);

	srand(time(NULL));
	for(int i=0; i < n * n * k; ++i){
		 B[i] = (rand() % 2001) - 1000.0;
		 }

	ProlificScheduler prolific;
	CollectiveScheduler collective;

	auto s1 = high_resolution_clock::now();
	for (int i = 0; i < k; ++i){
		prolific.execute(4, n, B + (i * n * n), n);
		}

	auto e1 = high_resolution_clock::now();
	cout << "Prolific Time: " << duration_cast<milliseconds>(e1 - s1).count() << " ms" << endl;

	auto s2 = high_resolution_clock::now();
	for (int i = 0; i < k; ++i){
		collective.execute(2, n, B + (i * n * n), n);
		}
	
	auto e2 = high_resolution_clock::now();
	cout << "Collective Time: " << duration_cast<milliseconds>(e2 - s2).count() << " ms" << endl;

	munmap(B, size);

return 0;
};
