/* * Дана последовательность натуральных чисел a0, ... * Создать многопоточное приложение для поиска суммы квадратов sum(a[i]^2). * В приложении вычисления должны независимо выполнять четыре потока. */ #include #include #include #include #include const unsigned int arrSize = 10000000; //const unsigned int arrSize = 500000000; //const unsigned int arrSize = 900000000; //const unsigned int arrSize = 700000000; double *A ; //последовательность чисел a0... //const int threadNumber = 1; // Количество потоков //const int threadNumber = 2; // Количество потоков const int threadNumber = 4; // Количество потоков //const int threadNumber = 8; // Количество потоков //стартовая функция для дочерних потоков void *func(void *param) { //вычисление суммы квадратов в потоке unsigned int shift = arrSize / threadNumber; // Смещение в потоке для начала массива int p = (*(int*)param )*shift; double *sum = new double; *sum = 0; for(unsigned int i = p ; i < p+shift ; i++) { *sum+=A[i]*A[i]; } return (void*)sum ; } int main() { double rez = 0.0 ; //для записи окончательного результата // заполнение массива A A = new double[arrSize]; if(A == nullptr) { std::cout << "Incorrect size of vector = " << arrSize << "\n"; return 1; } for(int i = 0; i < arrSize; ++i) { A[i] = double(i); } pthread_t thread[threadNumber]; int number[threadNumber] ; clock_t start_time = clock(); // начальное время //создание четырех дочерних потоков for (int i=0 ; i