| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > многопоточность и матрици |
| Автор: Ronin08 23.3.2008, 01:47 |
| Вопрос следующего характера: Нужно перемножить 2 матрици; пользователь вводит размерность матрицы и число потоков, с последующим построением программой графика с зависимостью кол-ва потоков от времени просчета премножения двух матриц. Как это можно организовать? С матрицей все понятно, но как там втулить изменяющееся количество потоков? Заранее благодарен |
| Автор: Ronin08 23.3.2008, 02:06 | ||||
Логично
Создание потоков вручную; Меня интересует как привязать к функции перемножения матриц неопределенное число потоков, которое задаеться пользователем; |
| Автор: marcusmae 23.3.2008, 02:18 |
| Ronin08, я не вижу проблем созданию N (задано пользователем) потоков путём создания массива экземпляров System.Threading.Thread в количестве N штук. К каждому из них можно было бы привязать одну и ту же функцию с параметрами. Если достаточно разбиения по потокам лишь по одной из размерностей матрицы, то этой функцией могло бы быть скалярное произведение -перемножение строки первой матрицы на столбец второй (получится чиcло) или перемножение строки первой матрицы на всевозможные столбцы второй (получатся вектора-строки результирующей матрицы). Как только выбор сделан и функция потока написана, останется в основной функции перемножения в цикле запустить необходимое число потоков - один за одним. Есть ряд других тонкостей, связанных с совместным использованием памяти. |
| Автор: Ronin08 23.3.2008, 02:38 | ||
Функция перемножения матриц выглядит так:
есть предположения как сделать n или n*n потоков, если размерность матрици n но видимо это мысли не в ту сторону. Надо чтобы можно было задавать любое число потоков marcusmae , не совсем представляю как должна выглядеть функция потока! Если небольшая можешь наброски сделать! Кстати благодарю, за почти on-line ответы |
| Автор: marcusmae 23.3.2008, 02:55 |
| все, что должно быть в коде потока, так это тело вложенного цикла, которое Вы выложили |
| Автор: Ronin08 23.3.2008, 03:12 | ||
у меня два вложенных цикла. Не понятно как потом связать функцию перемножения матриц и функцию потока |
| Автор: marcusmae 23.3.2008, 03:32 |
| Два вложенных цикла - две разные стратегии разделения по потокам (писали о них). Имхо, лучше положить в поток средний цикл. А связь потоков с функцией перемножения заключается в старте потоков с параметрами и указанием того, куда получать возвращаемые значения (см. ParameterizedThreadStart). |