From: Naveen N. <nav...@gm...> - 2016-04-17 22:01:37
|
Hello, I am looking into the thread model for the dacapo benchmarks and quite a few of them are tagged as "Externally single-threaded, Internally Multi-threaded". I take it this means that the benchmark utilizes several user-level Java threads but there is only one single kernel-level thread such that at any one time only one of the user-level Java threads is running. But, I believe the JVM is responsible for scheduling the user-level Java threads to a pool of kernel-level threads. So my question is, how do these applications that are "Externally single-threaded" ensure that the JVM only schedules the Java threads to a single kernel-thread? Thanks, Naveen |
From: Eliot M. <mo...@cs...> - 2016-04-18 03:14:14
|
On 4/17/2016 6:01 PM, Naveen Neel wrote: > Hello, > > I am looking into the thread model for the dacapo benchmarks and quite a few of them are tagged as > "Externally single-threaded, Internally Multi-threaded". I take it this means that the benchmark > utilizes several user-level Java threads but there is only one single kernel-level thread such that > at any one time only one of the user-level Java threads is running. > > But, I believe the JVM is responsible for scheduling the user-level Java threads to a pool of > kernel-level threads. So my question is, how do these applications that are "Externally > single-threaded" ensure that the JVM only schedules the Java threads to a single kernel-thread? > > Thanks, > Naveen No, I don;t think that's what it means. I think it means that the benchmark runner fires off only one thread, but the application internally uses multiple threads. Each one of these is most likely mapped to a different OS thread, and on a multicore machine they can actually progress concurrently. Some of the benchmarks have multiple threads spawned by the benchmark runner, I believe. These are externally multi-threaded. I expect that if I am wrong, one of the other folks will correct me :-) ... Regards -- Eliot Moss |