2009-04-26 20 views
1

我有一個函數需要每次調用不同數量的線程(我正在做一些性能計算,因此需要知道性能何時開始惡化)。調用傳遞給應用程序的線程數不同的函數

getTime() { 
    return 0; 
} 

int main() { 
    boost::threadpool::thread_pool<> threads(nThreads); 

    for(int j = 0; j <= nLines; j++){ 
     threads.schedule(boost::bind(&getTime, nThreads, 1)); 
    } 

    threads.wait(); 
} 

其中, 來確定nthreads:值在命令行

我的問題是給定的,就這樣給我所期望的結果,以將這種稱之爲「的getTime」功能例子如下每次通過程序訪問for循環時都使用'nThreads'?或者我需要其他方法來找出相同的?

我真正想要做的是這樣的:

boost::threadpool::thread_pool<> threads(nThreads); 
// start a new thread that calls the "getTime" function 
for(int j = 0; j <= nLines; j++){ 
    //threads.schedule(boost::bind(&getTime, nThreads, 1)); 
    threads.schedule(boost::bind(&getTime, 0, nLines, pc)); 
} 

(不知道這上面是正確的。)

中的getTime()函數與指定的行數運行我從一個文本文件中獲得,並給每一行api,我希望計算其性能。但這與我的問題無關。

我希望每次調用不同數量的線程的函數,並計算每個線程完成所花費的時間。什麼是有1個線程,什麼將完成由2個線程所花費的總時間等所花費的總時間

回答

1

如果我理解正確的,你真正想要做的是這樣的:

int main() 
{ 
    int nbThreads = 20; 
    boost::threadpool::thread_pool<> threads(nbThreads); 

    for(int threadId = 0; threadId <= nbThreads ; ++threadId) 
    { 
     threads.schedule(getTime); 
    } 
    threads.wait(); 
} 

如果我是對的,你不需要在這裏使用boost :: bind。

請注意,Boost.ThreadPool不是Boost的一部分(但它?)。這將是reviewed,但尚未計劃審閱日期。

+0

對不起我的壞。沒有說明我想讓該進程運行多個不同的值,這些值存儲在該行變量中,並在getTime()中初始化。因此需要一個FOR循環。你給出的意思是另一個FOR循環。糾正我,如果錯了? – gagneet 2009-04-26 10:49:36

1

怎麼樣使用類似OpenMP?如果可擴展性是您的目標,那麼這可能是更好的選擇。

相關問題