我有AMD Opteron(tm)6282SE 2.6 GHZ 32核(2个处理器,每个16核)
我有C#数学应用程序,我可以在并行核心上运行.
我有C#数学应用程序,我可以在并行核心上运行.
我得到的应用主要部分的最佳性能是当我使用16个线程(即将工作分成16个线程)时,该部分的最佳运行时间为1MS.
如果我使用超过16个线程,我获得超过1MS.
我的问题是为什么我不能将这部分与更多线程并行,假设我有32个核心.
这是并行运行的代码.
int N = 238; int P = 16; int Chunk = N / P; AutoResetEvent signal = new AutoResetEvent(false); // use a counter to reduce int counter = P; // kernel transitions for (int c = 0; c < P; c++) { // for each chunk ThreadPool.QueueUserWorkItem(delegate(Object o) { int lc = (int)o; for (int i = lc * Chunk; i < (lc + 1 == P ? N : (lc + 1) * Chunk); i++) { // do something } if (Interlocked.Decrement(ref counter) == 0) { signal.Set(); } },c); } signal.WaitOne();