Я написал однопоточную программу с использованием кодовых блоков, но в диспетчере задач это показывает, что программа использует 2 потока? - PullRequest
2 голосов
/ 20 марта 2019

Я написал программу в кодовых блоках, и код показан ниже.

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
    int Param, i, j, k;
    if(argc != 2){
        fprintf(stderr, "An integer parameter is required \n");
        return -1;
    }
    Param = atoi(argv[1]);
    if(Param<0){
        fprintf(stderr, "An integer >= 0 is required \n");
    }

    printf("first \n");
    for(i = 0; i < 1500; i++)
        for(j = 0; j < 1500; j++)
            for(k = 0; k < 1500; k++);

    printf("second \n");
    for(i = 0; i < 1500; i++)
        for(j = 0; j < 1500; j++)
            for(k = 0; k < 1500; k++);
    printf("Done \n");

    return 0;
}

В программе я не использовал многопоточные функции и библиотеки, такие как windows.h или thread.h. Но когда я открыл диспетчер задач для наблюдения за используемыми потоками, я был удивлен, что программа использовала 2 потока. Я понятия не имею, почему это может произойти. Что-то добавлено в программу, которую я написал, пока компилятор компилирует мою программу? Пожалуйста, помогите мне узнать тайну.

enter image description here

Это картинка о вопросе.

1 Ответ

1 голос
/ 20 марта 2019

Это может быть случай неявного параллелизма, когда ваш ЦП / компилятор будет использовать параллелизм на уровне команд (для краткости ILP ) для повышения производительности последовательного процессора. Поскольку ваши два цикла for не зависят друг от друга, ваш компилятор будет использовать векторизацию , а ваш процессор автоматически создаст потоки, чтобы сократить время выполнения. Поэтому вы используете 2 или даже 4 потока, в зависимости от вашего компилятора / системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...