![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 20.12.2010
Сообщений: 10
|
![]()
Задача такая:
Нужно написать прогу на С++, которая: 1. Создает динамический массив порядка 1000х1000.. 2. Записывает в этот массив любые числа(заполняет его, (рандом)) 3. Сохраняет массив в файле, с возможностью дальнейшего считывания.. 4. Считает сумму элементов каждой строки, сортирует элементы каждой строки(по возрастанию) 5. Подсчёт и сортировку (Пункт 4), нужно выполнить двумя способами: 5.1. с использованием многопоточности 5.2. и без неё(т.е. обычным способом) 6. Нужно подсчитать и сравнить время в течении которого выполняются пункты 5.1. и 5.2. (если я не ошибаюсь это называется профилирование) Всё это нужно сделать В Windows Form, но это я сам потом сделаю, из выше перечисленного сделал пункты 1, 2, 3, 4, 5.2 .. Коды выложу ниже.. Нужна помощь в пункте 6 и 5.1 … С таким пока ещё не сталкивался, поэтому и обратился.. Код:
|
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 20.12.2010
Сообщений: 10
|
![]()
тут в моём коде матрица порядка 10х10, - это для наглядности, а так нужно просто поменять начальные значения n,m=1000
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 20.12.2010
Сообщений: 10
|
![]()
Вы хоть как то отпишитесь, может я как то не так написал.. некорректно поставил вопрос..
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 199
|
![]()
сделать несколько потоков, например в каждом потоке по 100 строк (100x1000) и пусть их стортирует, то есть на твой массив 10 таких потоков будет, в функции потока в конце каким-то образом сообщаешь что поток завершился можно сделать одну переменную - счетчик.. при запуске всего этого дела ей ставишь значение = количеству потоков. после того как функция потока заканчивается она вычитает из счетчика еденицу. Так как каждый поток у тебя работает с определенным куском массива то синхронизировать там ничего ненужно.. единственное переменную счетчик отметить как volatile. Вобщем у тебя получается функция потока которую ты запускаешь как отдельный поток и она у тебя должна обрабатывать определенный кусок массива(100x1000) - можно информацию об этом в параметре передать при запуске потока. псевдкод запуска и ожидание потоков при этом такой:
цикл по кол-ву потоков { создать и запустить поток(параметры, задающие кусок массива) } while(счетчик_работающих_потоков > 0) { Sleep(1); } месадж бокс("конец") .. Как создавать потоки смотри в гугле.. функция вроде _BeginThreadEx зовецо но там много их всяких разных бывает) Еще можно попробовать вручную ничего не создавать, а использовать OpenMP Профилирование - либо используешь какието проги внешние для этого либо вначале интересующего участка кода узнаешь текущее время (GetTickCount()) а в конце участка опять узнаешь и вычитаешь из него прошлое время - получаешь время работы участка.. потом сравниваешь что быстрее отработало с потоками или без ЗЫ: виндовс формс это .net хрень вобще) Последний раз редактировалось UltimaBeaR; 21.12.2010 в 00:37. |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 20.12.2010
Сообщений: 10
|
![]() |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 199
|
![]()
Врядли будут другие предожения, поток тебе в любом случае придется создавать так же, единственное что можно менять это то что именно каждый поток будет делать. В потоках самое сложное это синхронизация - ее у тебя нету так что смело лезь в гугл и смотри как юзать потоки.
Windows Forms это окошки на .net - конкретная технология от мелкософта |
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
![]()
Каким образом вам нужно распараллелить программу? Способов есть много, но, думаю, самый простой - с помощью OpenMP. Тем более, что и код менять практически не придется, только навтыкать где нужно соответствующих OpenMP'шных прагм.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 20.12.2010
Сообщений: 10
|
![]()
Я почитал вчера немного про то о чём советовал UltimaBeaR, но сами понимаете время позднее, так что к ответу не созрел..
Гром, то что он самый простой и почти не нужно менять код.. это хорошо.. как раз то что нужно.. почитаю.. да, если есть куда направить, то направь.. (ссылочкой поделись если есть такая и не сложно) |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
![]()
Вот здесь можно почитать, довольно понятно.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 20.12.2010
Сообщений: 10
|
![]()
Спасибо, тему прошу пока не закрывать, хочу довести до ума.. как созреет.. напишу что получилось
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Транспонирование матрицы . Порядка [м,н]. | Alex_sim | Общие вопросы .NET | 4 | 03.05.2010 23:14 |
Матрицы:функция изменения порядка столбцов матрицы | Fajyz | Помощь студентам | 0 | 13.01.2010 09:40 |
Определение собственных значений для матрицы 2-го порядка | Игорь777 | Помощь студентам | 0 | 26.04.2009 18:33 |
Формирование квадратной матрицы порядка n по заданному образцу. | NeAlSe | Помощь студентам | 7 | 05.12.2007 16:04 |