FrontPageRoast+>リファレンス>std>parallelable.hpp

std/parallelable.hpp

並列実行をサポートします。

include

  • C++ : roast/std/parallelable.hpp

クラス

namespace roast {

  • parallelable0 - 呼び出す関数の引数が0個の場合
  • parallelable1 - 呼び出す関数の引数が1個の場合
  • parallelable2 - 呼び出す関数の引数が2個の場合
  •   :
  • parallelable63 - 呼び出す関数の引数が63個の場合

}

パフォーマンス

テンプレート引数 enable_prallel に false を指定した場合での、parallelableを使用した場合と使用しない場合では、VC++2008 コンパイルの Core2 動作で1.3倍程度のパフォーマンス低下が見られる。

例)

  1. #include "stdafx.h"
  2. #include "roast/includes.hpp"
  3. #include <time.h>
  4. #define USE_PARALLELABLE
  5. class CHoge
  6. {
  7. private:
  8. int m_r;
  9. int para(int i)
  10. {
  11. int n = clock()+i;
  12. m_r += n;
  13. return n;
  14. }
  15. public:
  16. CHoge(){ m_r = 0; }
  17. int start()
  18. {
  19. for(int i=0; i<0x02ffffff; i++)
  20. {
  21. #ifdef USE_PARALLELABLE
  22. roast::parallelable1<CHoge,int,int> paraobj(this, &CHoge::para);
  23. paraobj.call(i);
  24. #else
  25. para(i);
  26. #endif
  27. }
  28. return m_r;
  29. }
  30. };
  31. void main()
  32. {
  33. CHoge hoge;
  34. int r = hoge.start();
  35. printf("%d (%d)\n", r, clock());
  36. /*
  37. Enable USE_PARALLELABLE: 2000 ms (Core2 Quad Q6600)
  38. Disable USE_PARALLELABLE: 1500 ms (Core2 Quad Q6600)
  39. */
  40. }