.net && parallel computing
От: -n1l-  
Дата: 06.08.13 10:46
Оценка: :))) :))
Привет всем.
Скажите пожалуйста есть ли способ в .net обеспечить параллельное вычисление, именно параллельное, не асинхронное или многопоточное, именно параллельное, которое на нескольких ядрах и юзает процессор на полную без использования TPL и parallel linq?
Если да то подскажите как?
Если нет то, правда ли что в принципе это не нужно и если я создам в винде несколько потоков, то в принципе винда сама их распределить по ядрам? Т.е. получается мне нужно только синхронизировать эти потоки?
Re: .net && parallel computing
От: Mihas  
Дата: 06.08.13 11:16
Оценка: 3 (1)
Здравствуйте, -n1l-, Вы писали:

N>Если нет то, правда ли что в принципе это не нужно и если я создам в винде несколько потоков, то в принципе винда сама их распределить по ядрам?

Распределит. По потоку на свободное ядро. И если ядер окажется меньше, то какие-то потоки будут ждать своей очереди.
Re[2]: .net && parallel computing
От: -n1l-  
Дата: 07.08.13 02:36
Оценка:
Здравствуйте, Mihas, Вы писали:

M>Здравствуйте, -n1l-, Вы писали:


N>>Если нет то, правда ли что в принципе это не нужно и если я создам в винде несколько потоков, то в принципе винда сама их распределить по ядрам?

M>Распределит. По потоку на свободное ядро. И если ядер окажется меньше, то какие-то потоки будут ждать своей очереди.

Т.е. это относится к функциям OS? В ручную это делать возможно?(Проф. интерес)
Re[3]: .net && parallel computing
От: a_g_99 США http://www.hooli.xyz/
Дата: 07.08.13 05:55
Оценка: 16 (4) +1
Здравствуйте, -n1l-, Вы писали:

N>Т.е. это относится к функциям OS? В ручную это делать возможно?(Проф. интерес)

В целом Windows дает мало возможностей для ручного управления threads (в целом это и не требуется).

Для x64 есть UMS (available for 64-bit applications running on 64-bit versions of Windows 7 and Windows Server 2008 R2 or later 64-bit versions of Windows).

Есть также парочка функций SetThreadAffinityMask() и SetThreadIdealProcessor() которые теоретически могут помочь вам, но скорее всего вы навредите системе используя их.

Вот и вся теория
Re[4]: .net && parallel computing
От: -n1l-  
Дата: 07.08.13 08:01
Оценка:
Здравствуйте, a_g_99, Вы писали:

__>SetThreadAffinityMask() и SetThreadIdealProcessor()


Да вот я как раз в гугле только на них и натыкаюсь.
Ну что-ж, спасибо.
Re[5]: .net && parallel computing
От: Mr.Delphist  
Дата: 07.08.13 22:25
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Здравствуйте, a_g_99, Вы писали:


__>>SetThreadAffinityMask() и SetThreadIdealProcessor()


N>Да вот я как раз в гугле только на них и натыкаюсь.

N>Ну что-ж, спасибо.

Суть грустной басни такова, что попытки регулировать планирование потоков на ядра могут привести к результату лучшему, чем системный шедулер. Но этот выигрыш с 99% вероятностью будет существовать лишь для текущей ситуации. Доустановка ещё какого-то софта (если там есть фоновые активности, желающие кусочек проца), переход на другую модель процессора (особенно если Intel <-> AMD), да даже очередной Windows Update перевернёт всё с ног на голову.

Т.е. стандартный шедулер пусть не идеален, но статистически хорош на широком спектре ситуаций. Можете написать лучший? Тогда cv@hr.microsoft.com или куда там у них принято резюме слать
Re: .net && parallel computing
От: AngeL B. Россия  
Дата: 08.08.13 09:20
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Привет всем.

N>Скажите пожалуйста есть ли способ в .net обеспечить параллельное вычисление, именно параллельное, не асинхронное или многопоточное, именно параллельное, которое на нескольких ядрах и юзает процессор на полную без использования TPL и parallel linq? Если да то подскажите как? Если нет то, правда ли что в принципе это не нужно и если я создам в винде несколько потоков, то в принципе винда сама их распределить по ядрам? Т.е. получается мне нужно только синхронизировать эти потоки?

Если тебя интересует "параллельное" в смысле "распределенное по кластеру из нескольких машин", то это один вопрос.
Если тебя интересует "параллельное" в смысле "на нескольких ядрах одной машины", то многопоточная = параллельное. И потоки (Thread) .NET, а также TPL, как раз предназначены для этого.
И перестаньте уже писать велосипеды к тому, что и так хорошо и эффективно работает.
Re: .net && parallel computing
От: Константин Черногория  
Дата: 08.08.13 19:03
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Скажите пожалуйста есть ли способ в .net обеспечить параллельное вычисление, именно параллельное, не асинхронное или многопоточное, именно параллельное, которое на нескольких ядрах и юзает процессор на полную

"именно параллельное, которое на нескольких ядрах и юзает процессор на полную" называется "многопоточное".

N>в принципе это не нужно и если я создам в винде несколько потоков, то в принципе винда сама их распределить по ядрам?

Именно так.
Только вот создавать потоки не советую — в .NET уже есть CLR thread pool, который обычно прекрасно работает.

N>Т.е. получается мне нужно только синхронизировать эти потоки?

Не обязательно, есть несколько подходов, при которых вам их даже не нужно синхронизовывать, они сами.
Например TPL и parallel linq.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.