Явные многоядерные приложения на C # - PullRequest
5 голосов
/ 10 октября 2008

Есть ли простой способ явно сделать уже многопоточное приложение использующим многоядерную среду? (при наличии).

Первая проблема: как определить, поддерживает ли моя среда выполнения многоядерные приложения?

Если я определю, что могу использовать многоядерные функции, могу ли я явно назначить потоки для работы на разных ядрах? Если да, обрабатывается ли связь между потоками операционной системой или аппаратным обеспечением или мне нужно испачкать руки?

Ответы [ 5 ]

11 голосов
/ 10 октября 2008

Если ваше приложение уже правильно создано, вам не нужно ничего делать. Выполнение контекста потока и его обработка для вас.

Теперь, когда дело доходит до многопоточности, ваше приложение ориентировано на использование ядер? Есть ли у вас процессорные задачи, разделенные на отдельные потоки. Если нет, то вам нужно будет внести изменения, чтобы разделить задачи обработки на большее количество потоков. Вы можете использовать Environment.ProcessorCount, чтобы получить количество ядер и создать столько потоков, сколько необходимо во время выполнения для ваших задач.

На данный момент нет никакого способа превратить неправильно потоковое приложение (однопоточное) в многопоточное приложение, использующее преимущества всех процессоров / ядер, если вы не посмотрите на будущие технологии, такие как plinq и Параллельный FX

3 голосов
/ 10 октября 2008

Привет, есть 2 расширения, которые я знаю о

Параллельная домашняя страница C #

Посетите блог MSDN Somasegars по MS June CTP для параллельных расширений 3.5

MSDN

Библиотека состоит из следующих компонентов:

  • Библиотека параллельных задач (TPL), обеспечивающая поддержку обязательного параллелизма данных и задач.
  • Parallel LINQ (PLINQ), обеспечивающий поддержку декларативного параллелизма данных.
  • Структуры данных координации (CDS), которые обеспечивают поддержку координации работы и управления общим состоянием.
1 голос
/ 22 января 2009

В этом проблема. Как создать потоковое приложение, как преобразовать существующий код. Я хочу использовать многоядерный в C #. Тем не менее, ParallelFX все еще бета. Я не буду разрабатывать с использованием бета-версии. И я не хочу снова менять весь код (я перевел свои приложения из VB 6). Сегодня я получил рассылку от Packt Publishing, в которой объявляется новая книга о параллельном программировании на C #. C # 2008 и 2005 Потоковое программирование. Я думаю, что это сосредотачивается на вещах, о которых мы ведем блог везде. Как думать и разрабатывать потоковое приложение, не дожидаясь нового чудо-языка. Здорово видеть книги, полностью посвященные этой теме, потому что у нас полно блогов на эту тему. Ссылка http://www.packtpub.com/beginners-guide-for-C-sharp-2008-and-2005-threaded-programming/book Я думаю, что это заслуживает возможности. Я дам вам знать мой отзыв, когда я его куплю.

1 голос
/ 10 октября 2008

В настоящее время вы можете установить доступные процессоры для данного процесса , используя Process.ProcessorAffinity , но назначение определенных потоков определенным процессорам выполняется неявно. На самом деле это хорошая вещь в большинстве случаев, поскольку интеллектуальная среда выполнения, использующая информацию о производительности в реальном времени и о балансе нагрузки, обычно может выполнять работу лучше, чем статически, по крайней мере, для многоядерного контекста, в котором работает мейнстрим.

0 голосов
/ 10 октября 2008

Не вдаваясь в подробности (пока я не уверен, какой объем информации является общедоступным), следующая версия .NET Framework будет более полезна для этого. Скорее всего, вы не захотите или должны подумать об управлении потоками вручную. Я уверен, что после PDC (конец октября) появится больше информации об этом.

...