Параллелизм в C ++ с Boost - PullRequest
       3

Параллелизм в C ++ с Boost

0 голосов
/ 21 февраля 2012

У меня очень простая функция в C ++:

double testSpeed()
{
    using namespace boost;
    int temp = 0;

    timer aTimer; 
    //1 billion iterations.  
    for(int i = 0; i < 1000000000; i++) {
        temp = temp + i;
    }
    double elapsedSec =  aTimer.elapsed();
    double speed = 1.0/elapsedSec;

    return speed;
}

Я хочу запустить эту функцию с несколькими потоками. Я видел примеры онлайн, которые я могу сделайте это следующим образом:

 // start two new threads that calls the "hello_world" function
  boost::thread my_thread1(&testSpeed);
  boost::thread my_thread2(&testSpeed);

  // wait for both threads to finish
  my_thread1.join();
  my_thread2.join();

Однако, при этом будут запущены два потока, каждый из которых будет повторяться по миллиарду, верно? Я хочу два потока выполняют работу одновременно, поэтому все будет работать быстрее. Мне все равно о синхронизации, это просто тест скорости.

Спасибо!

1 Ответ

3 голосов
/ 21 февраля 2012

Возможно, есть более приятный способ, но он должен работать, он передает диапазон переменных для итерации в поток, он также запускает один таймер до запуска потоков и заканчивается после таймера после того, как они оба сделанный. Должно быть довольно очевидно, как масштабировать это до большего количества потоков.

void testSpeed(int start, int end)
{
  int temp = 0;
  for(int i = start; i < end; i++)
  {
    temp = temp + i;
  }
}  


using namespace boost;

timer aTimer;

// start two new threads that calls the "hello_world" function

boost::thread my_thread1(&testSpeed,         0,  500000000);
boost::thread my_thread2(&testSpeed, 500000000, 1000000000);

// wait for both threads to finish
my_thread1.join();
my_thread2.join();

double elapsedSec =  aTimer.elapsed();
double speed = 1.0/elapsedSec;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...