Coder Social home page Coder Social logo

lab2_matrix_multiply's Introduction

Параллельные алгоритмы умножения матриц и их сравнение

Как использовать?

mpic++ main.cpp -o main -lm
mpiexec -np <num_threads> ./main <matrix_size> <algo_name>

num_threads - ограничено количеством потоков на вашей машине
matrix_size - не ограничено (длина матрицы и по совместительству ширина)
algo_name - название алгоритма (одно из трёх: row, column, block)

Сначала я попытался написать алгоритмы используя матрицы на векторах, но у меня постоянно сыпались ошибки по памяти и я не мог понять в чем дело. В конце концов стало ясно, что MPI работает с одномерными массивами и пришлось написать класс реализующий матрицу в виде одномерного массива.

Дальше дело пошло лучше и были реализованы три алгоритма умножения матриц:

С разбиением по строкам:

t - количество потоков q - длина или ширина матрицы ms - единицы измерения времени

t\q 10 20 50 100 500 1000 2000
1 0 0 1 11 1426 11877 118857
2 0 0 0 5 734 6590 58937
3 0 0 0 4 505 4492 39280
4 0 0 0 3 368 3464 29652

row

С разбиением по стобцам:

t - количество потоков q - длина или ширина матрицы ms - единицы измерения времени

t\q 10 20 50 100 500 1000 2000
1 0 0 1 11 1480 13415 121309
2 0 0 0 6 744 6044 59075
3 0 0 12 4 483 3962 50902
4 1 0 4 3 361 2971 29483

column

С разбиением по блокам:

t - количество потоков q - длина или ширина матрицы ms - единицы измерения времени

t\q 10 20 50 100 500 1000 2000
1 0 0 1 9 1010 8512 87436
2 0 0 0 4 506 4509 44718
3 0 0 0 3 340 3108 29657
4 0 0 0 2 255 2356 22370

block

Заключение:

Лучшим из всех алгоритмов оказался с разбиением по блокам. Он демонстрирует лучшее время на всех количествах потоков, особенно на большом количестве процессов. Однако, для получения наилучшей производительности требуется тщательный выбор размера блоков.

Алгоритмы разбиения по строкам и столбцам предоставляют хорошую производительность и подходят для небольшого числа процессов. Однако, они могут быть неэффективными для случаев, когда число строк (или столбцов) не делится нацело на число процессов. (неравномерное распределение нагрузки)

lab2_matrix_multiply's People

Contributors

wityat avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.