|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.07.2009, 22:48 | #31 |
Форумчанин
Регистрация: 06.01.2009
Сообщений: 340
|
Распараллелить можно независимые или частично независимые операции (группы операций). Например в одном потоке посчитать 2^10000, в другом 3^10000.
В вашем случае при подсчете 2^30999989: для того чтобы вычислить 2^(i), необходимо знать 2^(i-1). (2^(i) = 2^(i-1) * 2) для вычисления 2^(i-1) нужно знать 2^(i-2) и так далее. Т.е. это расчеты для одного потока. Второму просто нечего делать, для его работы, в данном случае, не хватает данных.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник". |
03.07.2009, 17:30 | #32 |
Пользователь
Регистрация: 30.06.2009
Сообщений: 39
|
А если, допустим, цикл с умножением массива на 2, разбить на 2 потока? Первый поток умножает первые 500000 цифр, второй остальные 500000 цифр, которые в массиве хранятся. Просто во втором потоке поменьше будет цифр и он будет немого простаивать, то есть будут небольшие паузы. Как вы думаете такое можно реализовать, и будет ли от этого хотя бы небольшая польза? И можно ли запускать потоки с частотой меньше 10 миллисекунд. Или процессор "с ума" сойдет?
|
03.07.2009, 18:40 | #33 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
процессор выполняет миллиарды операций в секунду...
но чтоб докопатся в отдельные тики нужно использовать АСМ а вообще...попробывать ваш вариант можно...поидее на многоядерном проце польза будет...а вот на одно ядерном...врятли Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
03.07.2009, 18:46 | #34 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
Если хочешь дать программе одно ядро, то запрети через диспетчер задачь всем программам использовать одно из ядер, а этой разреши (но запрети испоьзовать первое).
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
03.07.2009, 23:13 | #35 | |
Форумчанин
Регистрация: 06.01.2009
Сообщений: 340
|
Цитата:
Т.е. есть глобальный массив (длинное число) и переменная, хранящая текущее количество знаков этого числа. По ней определяем (разделив на 2) сколько знаков будет умножать первый, а сколько второй поток. Далее в потоках происходит умножение на 2. Важно не потерять перенос, который возможен при вычислении младшей части числа. Также необходима синхронизация потоков, после каждой итерации умножения.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник". |
|
04.07.2009, 06:55 | #36 |
Пользователь
Регистрация: 30.06.2009
Сообщений: 39
|
Ну вот дело осталось за малым- реализовать это в программных кодах
вот моя попытка реализации, скажите что не правильно: Код:
From Stilet: Код оформляй по кнопке # Последний раз редактировалось Stilet; 06.07.2009 в 08:52. |
05.07.2009, 17:23 | #37 |
Форумчанин
Регистрация: 06.01.2009
Сообщений: 340
|
Проблема в том, что вы создаете потоки, но не уничтожаете их.
Скажите, что за значения вы считываете из файла? Зачем постоянно создавать потоки, их можно приостанавливать на время. + нет синхронизации. + еще несколько недочетов. Я переделаю, выложу исправленную версию.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник". Последний раз редактировалось Daramant; 05.07.2009 в 20:57. |
05.07.2009, 23:03 | #38 |
Пользователь
Регистрация: 30.06.2009
Сообщений: 39
|
Я считываю числа из файла которые состоят из одной цифры. Эти сохранения и загрузки сделаны для того что бы в случае непредвиденного прерывания программы, обработанные данные не терялись. А так как на такой объем обработки нужны месяцы работы компьютера поэтому приходится прерывать обработку. Ну и соответственно для этого я и сделал загрузку и сохранение.
|
06.07.2009, 15:03 | #39 |
Форумчанин
Регистрация: 06.01.2009
Сообщений: 340
|
Вот, что получилось.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник". |
06.07.2009, 20:13 | #40 |
Пользователь
Регистрация: 30.06.2009
Сообщений: 39
|
Уважаемый Daramant спасибо большое. Я понимаю что вы крутой программист, но я то "нуб":-). Могли бы Вы объяснить что значит каждая строка в этой программе, я ничего не пойму. Если можно построчно "разжевать" код. Чтоб я со спокойной душой его усвоил.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Код игры на Паскале и на Делфи сильно отличается? Как переписать код с Паскаля в Делфи? | Mclaren | Помощь студентам | 2 | 27.04.2009 22:37 |
готовое приложение | ComeToDaddy | Помощь студентам | 17 | 03.04.2009 18:25 |
консольное приложение | user_jasser | Общие вопросы Delphi | 3 | 17.10.2008 12:17 |
Консольное приложение | a_priori | Общие вопросы Delphi | 6 | 12.03.2008 08:33 |
Пароль на приложение | Chals | Общие вопросы Delphi | 6 | 24.11.2007 21:32 |