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:在命令行中给出的值

我的问题是,这是否会给我想要的结果,至于每次程序访问 for 循环时是否会使用“nThreads”调用“getTime”函数?还是我需要一些其他方法来找出相同的?

我真正想做的是:

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 个线程完成所花费的总时间是多少,等等。

4

2 回答 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 的一部分(但是?它)。它将被审查,但尚未计划审查日期。

于 2009-04-26T10:16:28.957 回答
1

使用类似OpenMP的东西怎么样?如果可扩展性是您的目标,那么它可能是一个更好的选择。

于 2009-04-26T10:53:50.037 回答