c # распараллелить симуляцию - PullRequest
0 голосов
/ 01 октября 2010

У меня есть движок симуляции, который я хотел бы сначала распараллелить, а затем разработать как веб-сервис на C #. Это интенсивная симуляция, которая требует много процессора и оперативной памяти, и я хотел бы разделить каждый запуск в отдельном потоке. Чтобы дать вам лучшее представление, симуляция может выполнить 100 прогонов, и для каждого прогона я собираю некоторые результаты. Было бы просто собрать результаты каждого прогона, а затем собрать их в один большой файл. Так, если у меня, например, многоядерный компьютер с 4 ядрами, идея состоит в том, чтобы запустить 4 запуска на каждом ядре, а затем еще 4 ... и т. Д. Я прочитал несколько вещей о параллельных расширениях в новой версии .net. Могу ли я добиться того же в 3.5 или лучше перейти на 4.0? Также есть что посмотреть, если я сделаю этот веб-сервис? Любые дальнейшие идеи или предложения приветствуются.

1 Ответ

1 голос
/ 07 апреля 2011

Вам лучше перейти на 4.0 и использовать TPL. Таким образом, вы можете создать Задачу <> для запуска каждого моделирования и иметь планировщик TPL планировать их соответствующим образом, когда ресурсы становятся доступными. По окончании запусков вы можете поместить результаты в ConcurrentCollection <> и, как только все закончится, выполнить сопоставление для них (вы можете даже сопоставить другую задачу, пока другие выполняются, если это окажется важным для вас.

В 3.5 большая часть работы по планированию была бы оставлена ​​вам, и API не настолько чисты для создания задач. У вас также не было бы ни одной из параллельных коллекций, которые могли бы значительно упростить сопоставление результатов (никогда не недооценивайте сложность написания параллельной коллекции, которая является как правильной, так и производительной).

Если вы сделаете это веб-службой, вы должны понимать, как использовать эту службу и как это повлияет на веб-службу. По сути, вы можете улучшить задержку отдельных запросов, но это может быть достигнуто за счет снижения общей пропускной способности. См. Следующую ссылку для обсуждения этого.

http://blogs.msdn.com/b/pfxteam/archive/2010/02/08/9960003.aspx

...