Почему несколько ядер задействованы в последовательных алгоритмах? - PullRequest
0 голосов
/ 16 декабря 2011

Когда я запускаю пузырьковые, коктейльные и быстрые сортировки в C #, я вижу, что все 3 ядра задействованы на моем AMD X3 (X4 поставляется с 1 сломанным ядром).

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

Пузырьковая сортировка, например, по запросу:

 public void BubbleSort()
    {
        for (int i = 1; i < amount; i++)
        {

            for (int j = 0; j < a; j++)
            {
                if (numbers[j] > numbers[j + 1])
                {
                    t = numbers[j + 1];
                    numbers[j + 1] = numbers[j];
                    numbers[j] = t;
                }
             }
          a--;
        }

    }

Ответы [ 2 ]

3 голосов
/ 16 декабря 2011

Ваш код потенциально может поменять ядра при переключении контекста. Но будет использовать только один за раз.

1 голос
/ 16 декабря 2011

Алгоритмы сортировки могут выполняться параллельно и использовать несколько ядер. Какие процедуры сортировки вы используете? Очень возможно, что они не последовательные алгоритмы.

Например, Quicksort очень просто распараллелить через разделяй и властвуй .

...