Задачи по теме "Параллельное программирование: нити"

В качестве образца используйте программу приведения матрицы к ступенчатому виду, использующую параллельный алгоритм Гаусса с помощью нитей, а также мьютексы и условные переменные в качестве объектов синхронизации. Матрица читается из файла "input.txt", полученная ступенчатая матрица записывается в файл "output.txt". Программа просит человека ввести число нитей и в конце печатает время выполнения алгоритма в миллисекундах. Исходный код программы:
"parallelMatrixSTL.cpp"

Программа генерации случайной матрицы и записи ее в файл:
"generateMatrix.cpp"

Пример выполнения:

/home/vvb/Threads>g++ -o generateMatrix generateMatrix.cpp
/home/vvb/Threads>./generateMatrix
Generating a Random Matrix
Enter the number of matrix rows and columns: 8 8
Enter the range of matrix elements (minValue, maxValue): -1 1
-0.124 0.446 0.105 0.165 0.234 0.988 -0.998 -0.401
-0.169 0.469 0.425 0.534 -0.430 0.054 0.116 -0.066
0.197 -0.868 0.549 0.170 0.555 -0.768 0.081 0.833
-0.837 0.447 0.235 0.416 0.688 -0.306 0.416 0.841
0.658 -0.533 -0.937 0.598 -0.326 0.425 -0.262 0.023
0.966 -0.072 -0.162 -0.452 -0.744 -0.954 0.580 0.473
-0.881 0.165 0.102 0.823 -0.268 0.993 -0.554 0.746
-0.268 0.823 -0.369 -0.936 -0.803 -0.060 0.513 0.532
Enter the name of file to write a matrix in:
input.txt
Writing the random matrix to the file input.txt

/home/vvb/Threads>g++ -o parallelMatrixSTL parallelMatrixSTL.cpp
/home/vvb/Threads>./parallelMatrixSTL
Matrix of size 8*8:
8 8
    -0.124     0.446     0.105     0.165     0.234     0.988    -0.998    -0.401
    -0.169     0.469     0.425     0.534    -0.430     0.054     0.116    -0.066
     0.197    -0.868     0.549     0.170     0.555    -0.768     0.081     0.833
    -0.837     0.447     0.235     0.416     0.688    -0.306     0.416     0.841
     0.658    -0.533    -0.937     0.598    -0.326     0.425    -0.262     0.023
     0.966    -0.072    -0.162    -0.452    -0.744    -0.954     0.580     0.473
    -0.881     0.165     0.102     0.823    -0.268     0.993    -0.554     0.746
    -0.268     0.823    -0.369    -0.936    -0.803    -0.060     0.513     0.532
Enter number of threads: 4
Row echelon form of matrix:
8 8
     0.966    -0.072    -0.162    -0.452    -0.744    -0.954     0.580     0.473
     0.000    -0.853     0.582     0.262     0.707    -0.573    -0.037     0.737
     0.000     0.000    -1.157     0.757    -0.220     1.400    -0.636    -0.717
     0.000     0.000     0.000     1.059    -0.317     0.437    -0.192    -0.028
     0.000     0.000     0.000     0.000    -0.732    -0.105     0.041     1.262
     0.000     0.000     0.000     0.000     0.000    -1.173     0.796     2.072
     0.000     0.000     0.000     0.000     0.000     0.000    -0.523     2.126
     0.000     0.000     0.000     0.000     0.000     0.000     0.000     0.433
Rank of matrix: 8
Determinant of matrix: -0.196517
Computation time: 1.011 ms

Список задач

Студенты с нечетными номерами по журналу решают первую задачу, с четными — вторую.

  1. Для невырожденной квадратной матрицы большого размера вычислить обратную матрицу, используя распараллеливание с помощью нитей. При необходимости можно также использовать объекты синхронизации (мьютексы, семафоры, условные переменные).
  2. Решить систему линейных уравнений с невырожденной квадратной матрицей большого размера, используя распараллеливание с помощью нитей. При необходимости можно также использовать объекты синхронизации (мьютексы, семафоры, условные переменные).