Good questions. In general, it is a safe assumption that the latest Linux kernels will place the threads on different processors. Older kernels sometimes had trouble with thread placement but those problems have long since been resolved.
The kernel ultimately controls scheduling of CPU resources. However, Intel's OpenMP implementation has two environment variablesto control thread behavior: KMP_LIBRARY and KMP_BLOCKTIME. Intel's OpenMP library has three modes: serial, throughput, and turnaround. In turnaround mode, the threads actively wait for more work rather than yielding the processors at the end of a parallel region. Turnaround mode is designed for dedicated systems. On a shared system, it can lead to poor resource utilization.
Throughput mode is the default. In throughput mode, the threads actively wait for more work but eventually yield the processors at the end of a parallel region. The KMP_BLOCKTIME variable controls how long the threads wait. It is set to 200 ms by default.
The Intel compiler supports Linux kernels 2.4.X so you're up-to-date. Your system should boot the SMP version of the kernel by default if you're using a multiprocessor or Hyper-Threading is enabled.
If you're running on a dedicated system with a 1:1 ratio of threads to processors, your threads are likely to remain in place and run without interruption. However, there's no guarantee because the operating system controls CPU resources. The Intel OpenMP library does not control thread migration,regardless of whether you're using throughput or turnaround mode. Nor can the library prevent preemption. The operating system is free to migrate or preemptthreads as it sees fit. Otherwise, a rogue application or library could commandeer the system.
Message Edited by hagabb on 06-28-2004 04:39 PM