Pergunta

Eu tenho uma função que precisa ser chamado com um número diferente de tópicos de cada vez (estou fazendo algum cálculo de desempenho, por isso necessidade de saber quando o desempenho começa a deteriorar). Exemplo é dado abaixo:

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();
}

Onde, nThreads: O valor de um dado na linha de comando

A minha pergunta é, se este me dar o resultado desejado, como a faria esta chamada a função 'getTime' com 'nThreads' cada vez que o loop é acessado pelo programa? Ou que eu preciso de algum outro método para descobrir o mesmo?

o que eu realmente quero fazer é esta:

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)); 
}

(não tenho certeza qual das alternativas acima está correta.)

a função getTime () é para ser executado com um determinado número de linhas que eu começar a partir de um arquivo de texto e dar a cada linha para uma API, cujo desempenho i deseja calcular. mas isso não está relacionado com a pergunta que eu tenho.

i deseja chamar uma função com diferente número de tópicos de cada vez e calcular quanto tempo demorou cada thread ao fim. Qual foi o tempo total tomado com 1 fio, qual foi o tempo total por 2 fios para acabamento, etc.

Foi útil?

Solução

Se bem entendi, o que você realmente quer fazer é algo como isto:

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

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

Se estou certo, você não precisa usar boost :: bind aqui.

Note que Boost.ThreadPool não faz parte do Impulso (ainda?-Lo). Será revisada , mas nenhuma data de revisão ainda não foi planejado.

Outras dicas

Que tal usar algo como OpenMP ? Se escalabilidade é o seu objetivo, é provavelmente uma escolha melhor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top