![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 05.10.2014
Сообщений: 7
|
![]()
Здравствуйте, уважаемые программисты. Я хочу ускорить вычисления в циклах с помощью потоков. Для этого взял задачу умножения матриц: A[n,m] на матрицу B[m,l] Результат С [n,l]. Для этого я в отдельном модуле пишу программку MultMatr, в которой и провожу все вычисления, а вызываю ее из основного модуля. В MultMatr я создаю n потоков ( по числу строк в матрице С ) и считаю строки матрицы С в программке MultVektrMatr. В программу MultVektrMatr данные передаются ( здесь первая проблема: почему-то при отладке, когда нажимаю на F4, то она мне при первом заходе в MultVektrMatr дает уже сразу номер 3-го потока ) , т.е. строки матрицы С вычисляются. После этого я их записываю в матрицу Form2.CForm2, а затем, когда построю всю матрицу Form2.CForm2, записываю в С2. В результате в таблице StringGridC высвечивается только третья строка, еще раз нажимаю на TForm1.Button1Click - высвечивается вторая строка. Но первая строка матрицы С как была нулевой так ее и осталась.
Т.е. как работают потоки - не понятно! Может дело в синхронизации. Я ведь работаю с матрицей Form2.CForm2. Я не хочу иметь дело с синхронизацией, т.к. думаю, что это влияет на скорость вычислений. Поэтому для передачи параметров из функции MultVektrMatr решил попробывать copyDataStruct. Так вот в обработчик WMCopyData данные не приходят вообще. Хочу вас спросить, что я делал не так в первом и во втором случае? И как все-таки работают потоки ( хотя теории я почитал много, практического опыта мало ). |
![]() |
![]() |
![]() |
#2 |
Регистрация: 05.10.2014
Сообщений: 7
|
![]()
Далее текст главного и вспомогательного модуля:
Код:
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 05.10.2014
Сообщений: 7
|
![]() Код:
|
![]() |
![]() |
![]() |
#4 |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
![]()
Подведу предварительный итог: чтобы умножить 2 матрицы, ты сделал несколько ЕХЕ-шников? Ты точно уверен, что тебе именно так нужно?
Как звучит оригинал задания? Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 05.10.2014
Сообщений: 7
|
![]()
ЕХЕ-шник один, программа одна. Из одного модуля вызывается подпрограмма, которая находится в другом модуле. Задание - перемножить две матрицы. Эта подпрограмма должна использовать потоки для ускорения вычисления.
|
![]() |
![]() |
![]() |
#6 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
![]() Цитата:
Про втоое приложение навело на мысль сообщение WM_COPYDATA. Зачем оно түт? Могу попробовать написать тебе пример. Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
![]() |
![]() |
![]() |
#7 |
Регистрация: 05.10.2014
Сообщений: 7
|
![]()
Умножение матриц - это тестовый пример, на котором я хочу отработать алгоритм работы с потоками. Есть у меня другие задачи, где работают подобные схемы с циклами, но они считаются по часу, два и т.д.
А обработку сообщения WM_COPYDATA я решил применить как способ передачи параметров( в моем случае - результатов вычислений ) из потока в обработчик Form2, ибо написано, что sendmessage сразу обрабатывает сообщение. А в данном обработчике я уже заношу соответствующие результаты в соответствующие строки матрицы. Но, поскольку, данные не передаются, в обработчике вылетает ошибка. Поэтому я там закоментировал последние строки. Короче, я хочу, чтобы это так и происходило, но что там на самом деле делается - мне неизвестно. |
![]() |
![]() |
![]() |
#8 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
![]() Цитата:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
![]() |
![]() |
![]() |
#9 |
Регистрация: 05.10.2014
Сообщений: 7
|
![]()
Поделись, если не трудно. Буду рад.
|
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Многократное использование потоков(пул потоков) | ProgrammistRT | Общие вопросы Delphi | 10 | 06.04.2014 13:42 |
Пересчет вычислений | Trimbl | Microsoft Office Excel | 1 | 23.05.2013 18:25 |
Параметры вычислений | Trimbl | Microsoft Office Excel | 2 | 18.02.2012 15:25 |
Параллельные вычислений | Иллидан | Общие вопросы C/C++ | 1 | 22.11.2010 13:07 |
Оптимизация кода с помощью нейронных сетей | Levsha100 | Общие вопросы по программированию, компьютерный форум | 5 | 14.01.2010 11:51 |