![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#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) и так далее. Т.е. это расчеты для одного потока. Второму просто нечего делать, для его работы, в данном случае, не хватает данных.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник". |
![]() |
![]() |
![]() |
#32 |
Пользователь
Регистрация: 30.06.2009
Сообщений: 39
|
![]()
А если, допустим, цикл с умножением массива на 2, разбить на 2 потока? Первый поток умножает первые 500000 цифр, второй остальные 500000 цифр, которые в массиве хранятся. Просто во втором потоке поменьше будет цифр и он будет немого простаивать, то есть будут небольшие паузы. Как вы думаете такое можно реализовать, и будет ли от этого хотя бы небольшая польза? И можно ли запускать потоки с частотой меньше 10 миллисекунд. Или процессор "с ума" сойдет?
|
![]() |
![]() |
![]() |
#33 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
процессор выполняет миллиарды операций в секунду...
но чтоб докопатся в отдельные тики нужно использовать АСМ а вообще...попробывать ваш вариант можно...поидее на многоядерном проце польза будет...а вот на одно ядерном...врятли ![]() Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#34 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
![]()
Если хочешь дать программе одно ядро, то запрети через диспетчер задачь всем программам использовать одно из ядер, а этой разреши (но запрети испоьзовать первое).
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
![]() |
![]() |
![]() |
#35 | |
Форумчанин
Регистрация: 06.01.2009
Сообщений: 340
|
![]() Цитата:
Т.е. есть глобальный массив (длинное число) и переменная, хранящая текущее количество знаков этого числа. По ней определяем (разделив на 2) сколько знаков будет умножать первый, а сколько второй поток. Далее в потоках происходит умножение на 2. Важно не потерять перенос, который возможен при вычислении младшей части числа. Также необходима синхронизация потоков, после каждой итерации умножения.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник". |
|
![]() |
![]() |
![]() |
#36 |
Пользователь
Регистрация: 30.06.2009
Сообщений: 39
|
![]()
Ну вот
![]() вот моя попытка реализации, скажите что не правильно: Код:
From Stilet: Код оформляй по кнопке # Последний раз редактировалось Stilet; 06.07.2009 в 08:52. |
![]() |
![]() |
![]() |
#37 |
Форумчанин
Регистрация: 06.01.2009
Сообщений: 340
|
![]()
Проблема в том, что вы создаете потоки, но не уничтожаете их.
Скажите, что за значения вы считываете из файла? Зачем постоянно создавать потоки, их можно приостанавливать на время. + нет синхронизации. + еще несколько недочетов. Я переделаю, выложу исправленную версию.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник". Последний раз редактировалось Daramant; 05.07.2009 в 20:57. |
![]() |
![]() |
![]() |
#38 |
Пользователь
Регистрация: 30.06.2009
Сообщений: 39
|
![]()
Я считываю числа из файла которые состоят из одной цифры. Эти сохранения и загрузки сделаны для того что бы в случае непредвиденного прерывания программы, обработанные данные не терялись. А так как на такой объем обработки нужны месяцы работы компьютера поэтому приходится прерывать обработку. Ну и соответственно для этого я и сделал загрузку и сохранение.
|
![]() |
![]() |
![]() |
#39 |
Форумчанин
Регистрация: 06.01.2009
Сообщений: 340
|
![]()
Вот, что получилось.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник". |
![]() |
![]() |
![]() |
#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 |