2009-04-26 29 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?如果可扩展性是您的目标,那么这可能是更好的选择。

相关问题