Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <thread>
- #include <chrono>
- #include <random>
- #include <vector>
- #include <iostream>
- #include <numeric>
- int BIG = 10000;
- std::vector<double> for_sum;
- std::vector<double> array;
- void job(int num, int numberOfThreads) {
- size_t start = num * (BIG / numberOfThreads), finish;
- if (num + 1 < numberOfThreads) {
- finish = (num + 1) * (BIG / numberOfThreads);
- }
- else {
- finish = BIG;
- }
- for_sum.push_back(std::accumulate(array.begin() + start, array.begin() + finish, 0));
- }
- int main() {
- std::random_device rd;
- std::mt19937 gen(rd());
- std::uniform_real_distribution<> dis(0, 10000);
- int numberOfThreads = 1;
- for (;numberOfThreads < 20; numberOfThreads++) {
- std::vector<std::thread> threads;
- for (int i = 0; i < BIG; i++) {
- array.push_back(dis(gen));
- }
- double ans = 0;
- std::chrono::steady_clock::time_point start, end;
- start = std::chrono::steady_clock::now();
- for (int i = 0; i < numberOfThreads; i++) {
- threads.push_back(std::thread(job, i, numberOfThreads));
- }
- ans = std::accumulate(for_sum.begin(), for_sum.end(), 0);
- end = std::chrono::steady_clock::now();
- for (auto&& t : threads)
- t.join();
- std::cout << numberOfThreads << ' ' << (end - start).count() << std::endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement