(Как) Компилирует ли компилятор монолитную программу как многопоточную? - PullRequest
0 голосов
/ 14 октября 2011

Я написал монолитно спроектированную программу, которая довольно груба по потребностям процессоров.И поскольку у меня есть двухъядерный процессор, я решил, что один процессор должен быть всегда на 100%.Но оба моих процессора все время на 100%.Теперь я предполагаю, что мой компилятор каким-то образом превратил мое монолитное приложение в многопоточное.Каковы ограничения этой функции оптимизации, и когда все еще необходимо явно сделать что-то потоковое?

Я использую gcc на Ubuntu linux 64-Bit

Ответы [ 2 ]

1 голос
/ 14 октября 2011

Любые обращения к ОС или другим библиотекам (например, CRT) могут использовать и другие потоки. Я вряд ли удивлюсь, если консоль будет работать в своем собственном потоке, и если вы делаете много операций ввода-вывода любого рода, это может привести к тому, что другой процессор будет работать с максимальной нагрузкой.

1 голос
/ 14 октября 2011

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

[EDIT]

Согласно комментариям, используйте программунапример top(1), чтобы убедиться, что на самом деле процесс вашей программы использует 100% обоих процессоров.В вашем случае процесс XORG перепрыгивает на 100%, потому что ваша программа производит большое количество вывода.

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