2013-05-21 4 views
1

Есть ли способ получить текущий номер задания для использования в make-файле?Получить текущий номер задания в make-файле

Позвольте мне дать вам небольшой контекст. Я использую инструмент, который работает на нескольких файлах. Естественно, я использую параллельные задания для ускорения работы. Реальная проблема здесь в том, что этот инструмент порождает несколько потоков, и я бы хотел, чтобы они запускались в одном ядре - так как это быстрее. Я сделал несколько тестов, и он работает быстрее.

Мне нужен номер вакансии, чтобы установить сродство процесса к ядру процессора.

ответ

1

Невозможно получить «номер задания», поскольку make не отслеживает номер задания. В основном все экземпляры make в одной сборке содержат список идентичных токенов. Когда make хочет начать работу, он получает токен. Когда make закончен с заданием, он добавляет токен обратно в список. Если он пытается получить токен, и один из них недоступен, он будет спать, пока не станет доступным. Для токенов нет отличительной черты, поэтому нет никакого «номера задания».

Чтобы узнать больше о том, как GNU делают ручки параллельно строит, вы можете прочитать http://make.mad-scientist.net/jobserver.html

Я не совсем уверен, как это все равно поможет. Make ничего не знает о потоках, он только запускает процессы. Если один процесс состоит из нескольких потоков, make все равно будет рассматривать его как одно задание.

EDIT: Предполагая, что вы находитесь в одной, нерекурсивен вызове марки вы можете сделать это следующим образом:

COUNT := 

%.foo : 
     $(eval COUNT += x) 
     @echo "[email protected]: Number of rules run is $(words $(COUNT))" 

all: a.foo b.foo c.foo d.foo 
+0

Я был напуган этим. Я просматривал исходный код файла makefile и не видел ничего, что было бы связано с моей потребностью. Возможно, у вас есть другое предложение - например, как получить идентификатор uniqe для каждого запуска инструмента? Я думал о чем-то вроде $ RANDOM - но насколько случайный случайный;) – Wojciech

+0

Я все еще не понимаю, зачем вам это нужно, но почему бы просто не использовать PID? Это общесистемное уникальное значение. – MadScientist

+0

Да, PID уникален, как вы сказали. Я не упоминал, что мне нужны последовательные уникальные идентификаторы - так что ситуации, как 2 процесса, выполняющиеся на одном и том же ядре процессора, не произойдет. – Wojciech

Смежные вопросы