2013-05-21 24 views
1

是否有辦法讓當前作業編號在生成文件規則中使用?在生成文件中獲取當前作業編號

讓我給你一點背景。 我正在使用一個在多個文件上運行的工具。當然,我使用並行作業來加快速度。這裏真正的問題是這個工具會產生多個線程,我希望它們能夠在單核中運行 - 因爲這樣會更快。我做了一些測試,運行速度更快。

我需要職位數量來設置CPU核心的進程親和力。

回答

1

沒有辦法獲得「工作號碼」,因爲make不跟蹤工作號碼。基本上所有在一個構建中構建的實例共享一個相同的標記列表。當make想要開始一項工作時,它會獲得一個令牌。當make完成一項工作時,它將令牌添加回列表中。如果它試圖獲得一個令牌並且一個不可用,它將會休眠直到有一個令牌可用。這些標記沒有明顯的特徵,因此無法獲得「工作號碼」。

要了解更多關於並行make如何處理GNU版本,你可以閱讀http://make.mad-scientist.net/jobserver.html

我不太清楚如何這可以幫助你的好意。 Make不知道線程的任何信息,它只會啓動進程。如果一個進程由多個線程組成,那麼make會將其視爲一個單獨的工作。

編輯: 假設你在化妝的一個單一的,非遞歸調用,你可以做這樣的:

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

我affraid這一點。我瀏覽過makefile源代碼,沒有看到任何與我的需求相關的東西。 也許你有其他建議 - 比如如何獲得每個工具運行的唯一ID?我正在考慮類似$ RANDOM的東西 - 但是隨機的隨機數是多少) – Wojciech

+0

我還是不明白你爲什麼需要這個,但爲什麼不使用PID呢?這是全系統獨特的價值。 – MadScientist

+0

是的,正如你所說,PID是唯一的。我沒有提到我需要連續的唯一ID--所以像在同一個CPU核上運行的2個進程的情況不會發生。 – Wojciech

相關問題