Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Можно ли в qt creator при компиляции задействовать два ядра?  (Прочитано 4492 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн neon1ks

  • Старожил
  • *
  • Сообщений: 1183
    • Просмотр профиля
    • Блог молодого разработчика
Ferum01,
Тогда изучать потоки, у Qt даже есть свои реализации. Есть еще openMP.
И конечно есть CUDA.

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3271
    • Просмотр профиля
Как компилировать в несколько потоков, я не знаю,
а флаги компилятора включаются в *.pro с помощью флага
QMAKE_CXXFLAGS, например,
QMAKE_CXXFLAGS += -O3 -mtune=genericСмотрите справку по qmake.
Пётр.

Оффлайн accipiter

  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
Компилятор компилирует в один поток. Многопоточно работает система сборки (make). Qmake просто генерирует Makefile для вашего проекта. Поэтому достаточно просто добавить в свойствах проекта BuildSteps -> Make arguments опцию -j2

Также можно зайти в директорию со сгенерированным Makefile и выполнить команду make -j2 - это будет тоже самое.

Оффлайн Ferum01

  • Автор темы
  • Участник
  • *
  • Сообщений: 146
    • Просмотр профиля
Компилятор компилирует в один поток. Многопоточно работает система сборки (make). Qmake просто генерирует Makefile для вашего проекта. Поэтому достаточно просто добавить в свойствах проекта BuildSteps -> Make arguments опцию -j2

Также можно зайти в директорию со сгенерированным Makefile и выполнить команду make -j2 - это будет тоже самое.

не работает
artur@artur-All-Series:~/build-progs-Desktop-Debug$ make -j2
make: Цель `first' не требует выполнения команд.

Оффлайн accipiter

  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля

не работает
artur@artur-All-Series:~/build-progs-Desktop-Debug$ make -j2
make: Цель `first' не требует выполнения команд.

Все работает. Вы просто не знаете, что такое make и для чего он вообще нужен. Это не ошибка - это просто сообщение о том, что в проекте ни один файл не изменялся с последней сборки, т.е. нечего пересобирать. Просто измените файл с исходниками.

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3271
    • Просмотр профиля
Однако при компиляции ядра с помощью make-kpkg эта опция работает, она есть и в "man make".
На всякий случай попробуйте сделать "make clean" и потом дать команду "make -j".
Вообще она будет работать, только если это возможно, если там есть что компилировать
в несколько потоков.
Пётр.

Оффлайн neon1ks

  • Старожил
  • *
  • Сообщений: 1183
    • Просмотр профиля
    • Блог молодого разработчика
Ferum01,
Почитай книгу: Иванов, Программирование в Linux. Самоучитель. Хватит первой части книги для начала.

Оффлайн Ferum01

  • Автор темы
  • Участник
  • *
  • Сообщений: 146
    • Просмотр профиля
Однако при компиляции ядра с помощью make-kpkg эта опция работает, она есть и в "man make".
На всякий случай попробуйте сделать "make clean" и потом дать команду "make -j".
Вообще она будет работать, только если это возможно, если там есть что компилировать
в несколько потоков.
Спасибо! Получилось скомпилировать. Но к сожалению работает по прежнему на одном ядре.
Видимо моя программа не может компилироваться в несколько потоков (программа состоит из десятка вложенных циклов один в другой.

Пользователь решил продолжить мысль [time]03 Июнь 2015, 18:50:43[/time]:
Ferum01,
Почитай книгу: Иванов, Программирование в Linux. Самоучитель. Хватит первой части книги для начала.
Спасибо, почитаю.

Пользователь решил продолжить мысль 03 Июня 2015, 17:51:58:

не работает
artur@artur-All-Series:~/build-progs-Desktop-Debug$ make -j2
make: Цель `first' не требует выполнения команд.

Все работает. Вы просто не знаете, что такое make и для чего он вообще нужен. Это не ошибка - это просто сообщение о том, что в проекте ни один файл не изменялся с последней сборки, т.е. нечего пересобирать. Просто измените файл с исходниками.
Спасибо за советы, буду изучать make.
« Последнее редактирование: 03 Июня 2015, 17:51:58 от Ferum01 »

Оффлайн accipiter

  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
Спасибо! Получилось скомпилировать. Но к сожалению работает по прежнему на одном ядре.
Видимо моя программа не может компилироваться в несколько потоков (программа состоит из десятка вложенных циклов один в другой.

make запускает на каждый файл по одной копии компилятора. Если у вас всего один файл, то он будет компилироваться на одном ядре. На самом деле выигрыш от параллельной сборки маленького проекта не заметен.

Оффлайн neon1ks

  • Старожил
  • *
  • Сообщений: 1183
    • Просмотр профиля
    • Блог молодого разработчика
Спасибо! Получилось скомпилировать. Но к сожалению работает по прежнему на одном ядре.
Видимо моя программа не может компилироваться в несколько потоков (программа состоит из десятка вложенных циклов один в другой.

Цитировать
Тогда изучать потоки, у Qt даже есть свои реализации. Есть еще openMP.
И конечно есть CUDA.

Например,http://habrahabr.ru/search/?q=openmp


Пользователь решил продолжить мысль [time]03 Июнь 2015, 20:04:07[/time]:
accipiter,
Ferum01,
Здесь вопрос про компиляцию в несколько потоков или про то чтобы скомпилированная программа выполнялась в несколько потоков ?
скомпилированная программа выполнялась в несколько потоков
« Последнее редактирование: 03 Июня 2015, 19:08:13 от neon1ks »

 

Страница сгенерирована за 0.038 секунд. Запросов: 23.