/
AirLexa
/
06
Обзор
Документация
Войти
/
AirLexa
/
06
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Lesson_01/Task_2/Task_2.cpp
74 строки
2 KB
AirLexa
create: Task_1.cpp, Task_1.slnx, Task_1.vcxproj, Task_1.vcxproj.filters, Task_1.vcxproj.user, Task_2.cpp, Task_2.slnx, Task_2.vcxproj, Task_2.vcxproj.filters, Task_2.vcxproj.user
26 апр 2026, 21:30
Верифицирован
26 апр 2026, 21:30
a0568bd
Код
Авторство
О чём код?
#include <thread> #include <windows.h> #include <iostream> #include <vector> void task(std::vector<int>& res, std::vector<int> &v1, std::vector<int> &v2, int start, int end) { for (int i = start; i < end; i++) res[i] = v1[i] + v2[i]; } void sum(int count, std::vector<int>& v1, std::vector<int>& v2) { std::vector<int> res(v1.size()); std::vector<std::thread> threads; size_t chunk_size = res.size() / count; for (int i = 0; i < count; ++i) { size_t start = i * chunk_size; size_t end = (i + 1) * chunk_size; threads.emplace_back(task, std::ref(res), std::ref(v1), std::ref(v2), start, end); } for (auto& thread : threads) { thread.join(); } } int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); std::vector<std::vector<int>> v1 { std::vector<int>(1000, 10), std::vector<int>(10000, 10), std::vector<int>(100000, 10), std::vector<int>(100000, 10), }; std::vector<std::vector<int>> v2 { std::vector<int>(1000, 12), std::vector<int>(10000, 12), std::vector<int>(100000, 12), std::vector<int>(100000, 12), }; std::cout << "Количество аппаратных ядер - " << std::thread::hardware_concurrency() << "\n" << std::endl; std::cout << "\t"; for (int i = 1000; i <= 1000000; i *= 10) std::cout << "\t" << i; std::cout << std::endl; for (int i = 1; i <= 16; i *= 2) { std::cout << "Потоков: " << i; for (int j = 0; j < 4; j++) { auto start = std::chrono::steady_clock::now(); sum(i, v1[j], v2[j]); auto end = std::chrono::steady_clock::now(); std::chrono::duration<double> elapsed_seconds = end - start; std::cout << "\t" << elapsed_seconds.count(); } std::cout << std::endl; } return 0; }