#c #multithreading #compiler-construction
#c #многопоточность #построение компилятора
Вопрос:
Я написал монолитную программу, которая довольно приблизительна к потребностям процессоров. И поскольку у меня двухъядерный процессор, я решил, что поэтому один процессор должен быть всегда на 100%. Но оба моих процессора постоянно работают на 100%. Теперь я предполагаю, что мой компилятор каким-то образом превратил мое монолитное приложение в многопоточное. Каковы пределы этих функций оптимизации и когда все еще необходимо явно создавать что-то многопоточное?
Я использую gcc в 64-разрядной версии Ubuntu linux
Комментарии:
1. Ваше предположение звучит ошибочно.
2. Вы уверены, что именно ваша программа использует оба процессора?
3. @Sim: Вы использовали что-то вроде
top(1)
для проверки того, что процесс вашей программы фактически использует оба процессора на 100%?4. Это также может зависеть от того, что делает ваша программа. Если вы передаете огромные объемы данных в стандартный вывод, вы также можете привязать эмулятор терминала и графическую среду. Я вижу это время от времени.
5. @Adam, спасибо, что ты не знал об этом shelltool, он показал, что XORG прыгает, как только моя программа запускается, вероятно, из-за ее быстрого вывода. Я действительно запускал там в довольно ошибочном предположении, спасибо. Если вы предоставите это в качестве ответа, я приму его.
Ответ №1:
Это не так, по крайней мере, без использования чего-то вроде Cilk. Вы, должно быть, непреднамеренно используете несколько потоков (или процессов), не осознавая этого. Возможно, вы используете стороннюю библиотеку, которая создает один или два дополнительных потока в вашем процессе?
[ПРАВИТЬ / ПРАВИТЬ КОД]
Согласно комментариям, используйте программу, подобную top(1)
для проверки того, что на самом деле процесс вашей программы использует оба процессора на 100%. В вашем случае процесс XORG переходит на 100%, потому что ваша программа выдает большой объем выходных данных.
Комментарии:
1. Я просто использую STL-контейнер, все остальное я реализовал самостоятельно
Ответ №2:
Любые вызовы ОС или других библиотек (например, CRT) могут также использовать другие потоки. Я вряд ли удивлюсь, если консоль будет работать в своем собственном потоке, и если вы выполняете много операций ввода-вывода любого рода, это может привести к максимальной загрузке другого процессора.