1

誰でも考えてみてください。ダンベルを処理するために CPU の筋肉を調整する OpenMP 機能。私のopenmpの研究では、強力な筋肉でブロックコードを実行するためにスレッドの優先度を設定することはできません。最も優先度の高いスレッドを作成する方法は 1 つだけです (_beginthreadex または 5. パラメータを指定した CreateThread 関数)。

この問題のコードは次のとおりです。

これは手動設定です。

int numberOfCore = ( execute __cpuid to obtain number of cores on your cpu ).

HANDLES* hThreads = new HANDLES[ numberOfCore ];
hThreads[0] = _beginthreadex( NULL, 0, someThreadFunc, NULL, 0, NULL );

SetThreadPriority( hThreads[0], HIGH_PRIORITY_CLASS );

WaitForMultipleObjects(...); 

ここに私が見たいのはこの部分です:

#pragma omp parallel
{
#pragma omp for ( threadpriority:HIGH_PRIORITY_CLASS )
 for( ;; ) { ... }
}

または

#pragma omp parallel
{
// Generally this function greatly appreciativable.
_omp_set_priority( HIGH_PRIORITY_CLASS );
#pragma omp for
 for( ;; ) { ... }
}

openmp で優先順位を設定する方法があったかどうかはわかりません。お知らせください。

4

2 に答える 2

3

SetThreadPriorityOpenMP からの特別なサポートを必要とせずに、ループの本体で行うことができます。

for (...)
{
  DWORD priority=GetThreadPriority(...);
  SetThreadPriority(...);
  // stuff
  SetThreadPriority(priority);
}
于 2009-03-23T00:35:13.177 に答える