Как использовать мои вычислительные ресурсы - PullRequest
0 голосов
/ 01 апреля 2010

Я написал программу для решения сложной проблемы. Эта программа является просто консольным приложением на c # и не выполняет console.write до тех пор, пока не завершится вычисление, поэтому вывод не повлияет на производительность. Программа выглядит так:

static void Main(string[] args)
        {

            Thread WorkerThread = new Thread(new ThreadStart(Run), StackSize);
            WorkerThread.Priority = ThreadPriority.Highest;
            WorkerThread.Start();
            Console.WriteLine("Worker thread is runing...");
            WorkerThread.Join();
        }

Теперь запуск занимает 3 минуты, когда я открываю диспетчер задач, я вижу, что это занимает всего 12% времени процессора. У меня на самом деле процессор i7 Intel с 6G трехканальной памятью DDR3. Мне интересно, как я могу улучшить использование моего оборудования.

Большое спасибо

Ответы [ 4 ]

1 голос
/ 02 апреля 2010

Intel i7 должен сообщать о 8 ядрах (4 физических ядра, каждое о 2-ядерных, из-за гиперпоточности).

Запустив один-единственный поток, вы получите 12,5% центрального процессора. Что почти идеально соответствует тому, что вы описываете.

Один поток не может и не будет работать на нескольких ядрах, потребляя все ресурсы. Если вы хотите использовать больше ресурсов, вам нужно запустить несколько потоков. В идеале вам понадобится минимум 4 потока и, скорее всего, от 6 до 8 потоков, чтобы приблизиться к 100% использованию.

Чтобы сделать это, вам нужно найти способ разбить вашу «сложную задачу» на распараллеливаемые пути инструкций.

1 голос
/ 02 апреля 2010

Ваш i7 поддерживает гиперпоточность, поэтому четырехъядерный i7 может одновременно обрабатывать восемь потоков.

Кажется, что ваша программа использует один поток, поэтому диспетчер задач Windows покажет вам загрузку ЦП в 12-13% просто потому, что вы используете один из восьми доступных "виртуальных" ЦП.

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

0 голосов
/ 02 апреля 2010

Узнайте, на что тратится время, в процентном соотношении. Это метод, который я использую, независимо от платформы. У меня были программы, в которых я был уверен, что не делал ввода-вывода, и знаете что? Я был, по самым неясным причинам.

0 голосов
/ 01 апреля 2010

1 поток может занимать только одно ядро, поэтому вам нужно разделить задачу на несколько потоков, чтобы использовать ваш ЦП. Вы абсолютно уверены, что не выполняете операции ввода-вывода в своем алгоритме?

...