Как использовать мои вычислительные ресурсы
Я написал программу для решения сложной проблемы. Эта программа является консольным приложением aC# и не выполняет 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 поток может занимать только 1 ядро, поэтому вам нужно разделить задачу на несколько потоков, чтобы использовать ваш процессор. Вы абсолютно уверены, что не выполняете операции ввода-вывода в своем алгоритме?
Ваш i7 поддерживает гиперпоточность, поэтому четырехъядерный i7 может одновременно обрабатывать восемь потоков.
Кажется, что ваша программа использует один поток, поэтому диспетчер задач Windows покажет вам загрузку ЦП 12–13 % просто потому, что вы используете один из восьми доступных "виртуальных" ЦП.
Как сказал HeavyWave, вам нужно найти способ разделить ваши вычисления на большее количество потоков, которые вы можете запускать параллельно, чтобы увеличить загрузку процессора.
Intel i7 должен отображать 8 ядер (по 4 физических ядра, каждое по 2 ядра из-за гиперпоточности).
Запуская один единственный поток, вы должны получить 12,5% центрального процессора в целом. Что почти идеально соответствует тому, что вы описываете.
Один поток не может и не будет работать на нескольких ядрах, потребляя все ресурсы. Если вы хотите использовать больше ресурсов, вам нужно запустить несколько потоков. В идеале вам понадобится минимум 4 потока и, скорее всего, от 6 до 8 потоков, чтобы приблизиться к 100% загрузке.
Чтобы сделать это, вам нужно найти способ разбить вашу "сложную проблему" на распараллеливаемые пути инструкций.
Узнайте, на что тратится время, в процентном соотношении. Это метод, который я использую, независимо от платформы. У меня были программы, в которых я был уверен, что не делал ввода-вывода, и знаете что? Я был, по самым неясным причинам.