Страница: 1 | 2 | 3 | 4 | 5 |
Вопрос: Два ядра под VB6
Добавлено: 08.08.11 21:43
Автор вопроса: Сергей Юдин
Ответы
Всего ответов: 69
Номер ответа: 61
Автор ответа:
Сергей Юдин
Вопросов: 8
Ответов: 81
Профиль | | #61
Добавлено: 16.08.11 07:42
Надо внимательнее читать текст, т.к. я только предположил, что возможно Вы что-то не так поняли (из прочитанных Вами книжек), а не сознательно вводите нас в заблуждение, т.е. ни в чем я Вас не обвинял. А то что мне как пользователю компьютера хочется, чтобы он работал, так, как мне надо ни коим образом не является глупостью, а является техзаданием для создателей компьютеров. И сформулировал я его из общих соображений о многопоточности, т.к. вообще то многопоточность подразумевает параллельное решение разных кусков программы на множестве ядер, а не одного и того же куска. И то, что сейчас называется многопоточностью на многоядерных компьютерах это многостаночность, т.е. когда одна и та же деталь изготавливается одним рабочим на разных станках. А при многопоточности одну деталь на одном станке обрабатывают сразу несколько различных инструментов. В общем, будем считать, что поговорили и спасибо за консультацию.
С наилучшими пожеланиями Сергей Юдин.
Номер ответа: 62
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #62
Добавлено: 16.08.11 08:24
т.к. вообще то многопоточность подразумевает параллельное решение разных кусков программы на множестве ядер, а не одного и того же куска.
Никто не запрещает решать разные куски программы паралллельно. Просто сценарий в котором к каждому элементу данных применяется одна и та же обработка очень распространен и легко реализуется.
Если же элемент данных один, и нужно распараллелить его обработку, это тоже возможно, хотя и намного сложнее, так как многие операции будут зависеть от операций, выполнявшихся ранее. Нужно будет потратить намного больше усилий для синхронизации потоков и обмена данными между ними. И при этом следить, чтоб затраты на синхронизацию были не больше того выигрыша, который дает распараллеливание.
Номер ответа: 63
Автор ответа:
Сергей Юдин
Вопросов: 8
Ответов: 81
Профиль | | #63
Добавлено: 16.08.11 14:12
//Я сейчас один умный вещь скажу.// Если многоядерные компьютеры созданы для многостаночной работы, то надо попытаться и использовать их в этом режиме. Как раз для решаемой мною задачи это и возможно. Ведь я создаю матрицу полного ортогонального или рототабельного плана для шести факторов, где соответственно надо выполнить 77 или 79 вычислительных экспериментов на математической модели Солнечной системы. Таким образом, запускаю программу Solsys7, создаю план (допустим ортогональный) и выполняю эксперименты с 1-го по 39-ый. А затем опять запускаю программу Solsys7, которая, как я разумею, должна запуститься уже на втором ядре, точно так же создаю план и выполняю эксперименты с 40-го по 77-ой. А т.к. данные по всем экспериментам записываются каждый в отдельный файл, то и компилировать их не надо (просто скопировать все в одну папку). Сам не ожидал, что решение будет таким простым и не надо заморачиваться с потоками для параллельного выполнения программы на двух ядрах.
С наилучшими пожеланиями Сергей Юдин.
Номер ответа: 64
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #64
Добавлено: 16.08.11 18:15
А функциональные языки не пробовали? Они проще параллелятся, т.к. нет сайд-эффектов.
Номер ответа: 65
Автор ответа:
Сергей Юдин
Вопросов: 8
Ответов: 81
Профиль | | #65
Добавлено: 16.08.11 20:39
Нет не пробовал, т.к. даже не знаю о чем Вы говорите (а может быть за 30 лет программирования уже успел забыть). По этому, вкратце скажите, что это за языки, хотя навряд-ли я буду переделывать программу Solsys7 (даже в урезанном виде) на другой язык. Тем боле, что решение я, кажется, нашел (см. предыдущий пост). Да, еще, что такое сайд-эффект.
С наилучшими пожеланиями Сергей Юдин.
Номер ответа: 66
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #66
Добавлено: 16.08.11 21:15
Про языки функционального программирования можно тут почитать:
http://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F
Наиболее известные: LISP, Haskell, Erlang, F#.
"Побо́чный эффе́кт (side effect) функции — возможность в процессе выполнения своих вычислений: читать и модифицировать значения глобальных переменных, осуществлять операции ввода/вывода, реагировать на исключительные ситуации, вызывать их обработчики. Если вызвать функцию с побочным эффектом дважды с одним и тем же набором значений входных аргументов, может случиться так, что в качестве результата вычислятся разные значения. Такие функции называются недетерминированными функциями с побочными эффектами."
Если нет побочных эффектов - то программа очень легко параллелится. Потому что при программировании многопоточных приложений самый гемморой - синхронизация доступа к общим ресурсам.
Номер ответа: 67
Автор ответа:
Сергей Юдин
Вопросов: 8
Ответов: 81
Профиль | | #67
Добавлено: 16.08.11 22:56
Спасибо, а то я уже и забыл, что LISP даже пробовал изучать лет 25 тому назад, но я все же останусь с VB6. А описание функциональных языков мне почему то показалось похожим на языки различных современных математических пакетов Maple, Statistica и т.д.
С наилучшими пожеланиями Сергей Юдин.
Номер ответа: 68
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #68
Добавлено: 17.08.11 06:56
Последнее время функциональные языки становятся всё популярней. На Erlang'е пишут большие промышленные системы. Microsoft несколько лет назад выпустил F#, включив его поддержку в Visual Studio. Говорят что тоже неплохой язык.
Но это совсем другая парадигма, и переучиваться нелегко.
Впрочем, если уже есть много существующего кода, который нужно поддерживать и с которым нужно интегрироваться - то наверное проще что-то более понятное использовать. C#, Java.
Номер ответа: 69
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #69
Добавлено: 17.08.11 07:22
Перечитал топик. Да, пожалуй автору могу предложить два варианта
1. Распараллелить выполнение разных экспериментов (если они независимы)
2. Для более тонкой работы (скажем, если потребуется решать задачу в сотни раз быстрее) - нанять специалиста