Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.

Core Access Limit for PARDISO Solver?

Nan_Deng
Beginner
347 Views

I encountered a very strange problem and I would like to hear opinions and suggestions from the Gurus:

I use Visual Composer XE, ver 12.1, coded the PARDISO solver in my program on a Windows 7 machine.  The program is running on HP DL980 servers with Windows Server 2008R2 OS, each server has 10 CPUs, or 80 cores, and 1TB RAM.  The program works well, each session can access  50% of all cores, or 40 cores.  Now the IS&T personel turns on the HT (hyper threading) switch, supposely to speed up the execution. The task manager now shows 160 logical cores, instead of 80, BUT, each program session can access only 20 cores, or use only 12.5% of total cores available!  So instead of speed up, it slows down.

My questions are: Is this access limit caused by some internal conflict between PARDISO's numerical routines and the HT technology?  Does PARDISO have any built-in limit on how many cores it can access, especially for the HT enabled machines?  Is there any workaround/solution to increase/improve the number of cores that a program can access?  And leads and suggestions on how to solving this issue are greatly appreciated.

0 Kudos
5 Replies
Chao_Y_Intel
Moderator
347 Views

Hello,
In your new system with HT one,  you mentioned, the program can access only 20 core. Since each core has 2 threadings, does

this program still run with 40 threadings?

You can check this article on learn MKL behavior on HT system.
http://software.intel.com/en-us/forums/topic/294954
If your problem already has 40 threading, but it is distributed on the 20 phsical cores, you can set the following

environment with the threading affinity:
KMP_AFFINITY=granularity=fine,compact,1,0.

Thanks,
Chao

0 Kudos
Nan_Deng
Beginner
347 Views

Thank you for your response. To answer your question: No.  The program accesss only 20 threadings (It's strange that on two identical machines, one is running on 20 threadings and the other can run on 30 threadings), not 20 cores.

Sorry for my ignorance, where should I put the environment statements in? (In the code or the project settings)? By the way, I use the Windows version with Visual Studio shell, so I don't usually use makefiles. Would you show me how to modify the settings to get the desired results?

0 Kudos
Nan_Deng
Beginner
347 Views

duplicate. deleted

0 Kudos
SergeyKostrov
Valued Contributor II
347 Views
>>...where should I put the environment statements in?.. The easiest way is with System applet from Windows Control Panel. You could also do the same at runtime ( modifications in sources will be needed ) and I always prefer that way when it comes to OpenMP.
0 Kudos
SergeyKostrov
Valued Contributor II
347 Views
>>... You could also do the same at runtime ( modifications in sources will be needed )... Here is example ( _UNICODE / _MBCS compatible version ) on how to set OMP_STACKSIZE OpenMP environment variable: ... int iRetCode = _tputenv( _T("OMP_STACKSIZE=32K") ); if( iRetCode == 0 ) _tprintf( _T("OMP_STACKSIZE=%s\n"), _tgetenv( _T("OMP_STACKSIZE") ) ); else _tprintf( _T("Error: Failed to Set Environment Variable OMP_STACKSIZE\n") ); ...
0 Kudos
Reply