| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > многопроцессорный комплекс |
| Автор: gryzli 6.1.2005, 03:02 |
| помогите, народ! надо написать программку для управления многопроцессоным комплексом, а с какой стороны подойти не знаю!!! надо процессы раскидать по процессорам, ну и если моно распараллелить последовательную программу. ПОМОГИТЕ!!! СЫПЛЮСЬ!!! хотя бы с какой стороны подойти!!! |
| Автор: chipset 6.1.2005, 05:43 |
| Подходи со стороны создания потоков+синхронизирование Вроде как Винда сама должна их по процам раскидать.. |
| Автор: En_t_end 6.1.2005, 07:31 |
| gryzli Смотри в гугл, я через него и не такое находил... chipset Логически верно, но винде, как все отлично знают косвенно вообще опасно что-либо доверять |
| Автор: _hunter 6.1.2005, 13:35 |
| En_t_end, есть подозрение что вручную потоку процессор, на котором он должен выполнятся, ты не назначиш |
| Автор: En_t_end 6.1.2005, 14:27 |
| "есть подозрение что вручную потоку процессор, на котором он должен выполнятся, ты не назначиш" Поэтому надо отойти от стандартного виндузного понимания потока... не будем использовать обьект класса CWinThread, создадим свой класс ! |
| Автор: _hunter 6.1.2005, 14:40 |
| причем тут класс? поток -- это объект системы и уйти от него IMHO не получится |
| Автор: En_t_end 6.1.2005, 14:50 |
| "причем тут класс? поток -- это объект системы и уйти от него IMHO не получится" Начнём с конца Ну... поток - обьект системы, это конечно верно, но вот каким образом мы управляем этим потоком ?, правильно через класс !, значит во первых надо имхо переделывать класс, в котором будет присутсвовать механизм разделения обьектов системы(в данном случае потоков) между разными процессорами... ещё раз повторюсь, делать это можно и нужно только через нискоуровневые вставки из асма, та что я создаю у колег тему... |
| Автор: _hunter 6.1.2005, 14:55 |
| если пойти с конца, то увидим функции API CreateThread/TerminateThreat и еще несколько причем тут класс я так и не понял. |
| Автор: En_t_end 6.1.2005, 14:59 |
| _hunter Упс... извини, а вот про это забыл... Но всё равно делать это надо в низкоуровневом режиме... |
| Автор: _hunter 6.1.2005, 15:03 |
| только не факт что винда даст заниматься переключением потоков |
| Автор: En_t_end 6.1.2005, 15:06 |
| "только не факт что винда даст заниматься переключением потоков " Главное получить ид. процессоров. "не факт" --- согласен, но всё же будет интересно по-пробывать! |
| Автор: chipset 6.1.2005, 15:37 | ||||
А я к примеру не знал
ИМХО, довольно малореализуемая затея... Не проще ли по потокам? |
| Автор: En_t_end 6.1.2005, 15:45 |
| "А я к примеру не знал " Ну это вопрос чисто философ., поэтому ему отдельное место во Флейме... |
| Автор: Girder 6.1.2005, 18:37 |
| Воспользуйся http://parallel.ru/tech/tech_dev/mpi.html |
| Автор: chipset 7.1.2005, 02:17 |
| Кстати, http://boost.org тоже http://boost.org/doc/html/threads.html мультитридинг |
| Автор: Гость_gryzli 7.1.2005, 02:55 |
| Народ, я конечно понимаю что необходимо через потоки и т.д. у меня загвоздка в следующем: камешков 256 и надо дать им задачу на обработку матриц, т.е. распараллелить эту задачу, но когда я переправляю какую нибудь операцию, то он мне выдаёт (через проверочные данные) что камешек уже загружен, и так к любому. Может у меня подход неправильный к выбору камешка или к обработке матриц пока не пойму!? А MPICHем пользоваться низя как и другими подобными!!! спасибо что откликаетесь, мож чаго ещё подскажите??? |
| Автор: chipset 7.1.2005, 03:00 |
| Просто давай различные задачи разным потокам и синхронизь их в общей матрице. |
| Автор: gryzli 7.1.2005, 06:21 |
| Подскажите как различные задачи дать различным потокам, и потом собрать резельтаты воедино!!! хреново с понятием синхронизации в разных камешках, не могу этого понять!!! Корче ни как не могу раскидать задачи на каждый камень!!! Помогите чайнику, плиз!!!!!! |
| Автор: chipset 7.1.2005, 14:26 | ||||
Этот вопрос уже зависит от алгоритма.
Все процессоры выполняют свои потоки соответственно выполняя задачу, и по выполнении встраивают в глобальный блок памяти - который и является ответом. |
| Автор: chipset 7.1.2005, 14:40 |
| Вот к примеру: Нужно найти все простые числа от 0 до 32768. Создаешь просто два поток и одному задаешь функцию по поиску ПЧ от 32768 до 16384, а другому от 0 и до 16383 (включительно). Когда поток находит число - он кладёт его в глобальную память и по завершению ждёт пока второй (первый) поток закончится и можно будет заняться сортировкой и т.д.. Пример довольно простой и плохо распарарелленый, но я думаю суть показывает... |
| Автор: Фа 23.1.2005, 02:15 | ||
|
| Автор: En_t_end 23.1.2005, 13:46 |
| Фа Воооо!!! - а ведь действительно! |
| Автор: _hunter 24.1.2005, 13:38 |
| что Вооо? теперь мы окнам уже доверяем? ;) |
| Автор: Intro 25.1.2005, 15:33 | ||
это типа я
Не это я про битовые маски А к окнам я и впредь с недоверием относиться буду |
| Автор: _hunter 25.1.2005, 17:13 |
| существуют. но положится на них == положится на окна. и какое уж тут Воооо? ;) |