J
Joe Gwinn
Guest
On Tue, 1 Dec 2020 13:46:29 -0500, Phil Hobbs
<pcdhSpamMeSenseless@electrooptical.net> wrote:
I hadn\'t heard of Rocks 7. I\'ll look into it.
So, why not use realtime ones? This is done all the time. The
application code works the same.
>The Linux thread scheduler is a really-o truly-o Charlie Foxtrot.
The legacy UNIX \"nice\" scheduler, retained for backward compatibility,
it unsuited for realtime for sure. And for what you are doing it
would seem.
The present-day large-scale solution is to use shared memory via
Infiniband. Memory is transferred to and from IB to local memory
using DMA (Direct Memory Access) hardware.
This is done with a fleet of identical enterprise-class PCs, often
from HP or Dell or the like.
Wow! That\'s worth a bunch of trouble for sure.
Are there any metals that don\'t exhibit plasmons?
If I recall/understand, the imaginary epsilons are the loss factors,
so this is quite lossy.
This sounds like a problem that would benefit from parallelism, and
shared memory. And lots of physical memory.
Basically divide the propagation media into independent squares or
boxes that overlap somewhat, with inter square/box traffic needed only
for the overlap regions. So, there will be an optimum square/box area
or volume.
Joe Gwinn
<pcdhSpamMeSenseless@electrooptical.net> wrote:
On 12/1/20 12:48 PM, Joe Gwinn wrote:
On Mon, 30 Nov 2020 20:59:50 -0500, Phil Hobbs
pcdhSpamMeSenseless@electrooptical.net> wrote:
On 11/30/20 8:26 PM, Joe Gwinn wrote:
On Mon, 30 Nov 2020 17:26:03 -0500, Phil Hobbs
pcdhSpamMeSenseless@electrooptical.net> wrote:
On 11/30/20 12:07 PM, albert wrote:
In article
c8c0cf25-aa21-8b1d-b6f6-518624c35183@electrooptical.net>,
Phil Hobbs <pcdhSpamMeSenseless@electrooptical.net> wrote:
On 2020-08-02 20:56, Les Cargill wrote:
Phil Hobbs wrote:
On 2020-08-02 08:46, Martin Brown wrote:
On 23/07/2020 19:10, Phil Hobbs wrote:
On 2020-07-23 12:43, Tom Gardner wrote:
On 23/07/20 16:30, pcdhobbs@gmail.com wrote:
Isn\'t our ancient and settled idea of what a
computer is, and what an OS and languages
are, overdue for the next revolution?
In his other famous essay, \"No Silver Bullet\",
Brooks points out that the factors-of-10
productivity improvements of the early days
were gained by getting rid of extrinsic
complexity--crude tools, limited hardware, and
so forth.
Now the issues are mostly intrinsic to an
artifact built of thought. So apart from more
and more Python libraries, I doubt that there
are a lot more orders of magnitude available.
It is ironic that a lot of the potentially avoidable
human errors are typically fence post errors. Binary
fence post errors being about the most severe since
you end up with the opposite of what you intended.
Not in a single processor (except perhaps the
Mill).
But with multiple processors there can be
significant improvement - provided we are
prepared to think in different ways, and the
tools support it.
Examples: mapreduce, or xC on xCORE processors.
The average practitioner today really struggles on
massively parallel hardware. If you have ever done
any serious programming on such kit you quickly
realised that the process which ensures all the
other processes are kept busy doing useful things is
by far the most important.
I wrote a clusterized optimizing EM simulator that I
still use--I have a simulation gig just starting up
now, in fact. I learned a lot of ugly things about the
Linux thread scheduler in the process, such as that the
pthreads documents are full of lies about scheduling
and that you can\'t have a real-time thread in a user
mode program and vice versa. This is an entirely
arbitrary thing--there\'s no such restriction in Windows
or OS/2. Dunno about BSD--I should try that out.
In Linux, realtime threads are in \"the realtime context\".
It\'s a bit of a cadge. I\'ve never really seen a good
explanation of that that means.
Does anybody here know if you can mix RT and user
threads in a single process in BSD?
Sorry; never used BSD.
Realtime threads are simply of a different group of
priorities. You can install kernel loadable modules ( aka
device drivers ) to provide a timebase that will make
them eligible. SFAIK, you can\'t guarantee them to run.
You may be able to get close if you remove unnecessary
services.
I don\'t think this does what you want.
In Linux if one thread is real time, all the threads in the
process have to be as well. Any compute-bound thread in a
realtime process will bring the UI to its knees.
I\'d be perfectly happy with being able to _reduce_ thread
priority in a user process, but noooooo. They all have to
have the same priority, despite what the pthreads docs say.
So in Linux there is no way to express the idea that some
threads in a process are more important than others. That
destroys the otherwise-excellent scaling of my simulation
code.
Wouldn\'t the system call setpriority() work, after a thread
has bee started?
As I said way back in the summer, you can\'t change the priority
or scheduling of an individual user thread, and you can\'t mix
user and real-time threads in one process.
Thus you can have the default scheduler, which doesn\'t scale at
all well for this sort of job, or you can run the whole process
as real-time and make the box\'s user interface completely
unresponsive any time the real-time job is running.
In Windows and OS/2, you can set thread priorities any way you
like. Linux is notionally a multiuser system, so it\'s no
surprise there are limits to how much non-root users can
increase priority. I\'d be very happy being able to _reduce_
the priority of my compute threads so that the comms threads
would preempt them, but nooooooo.
I don\'t think that this is true for Red Hat Linux Enterprise
Edition. I don\'t recall if the realtime stuff is added, or built
in. People also use MRG with this.
More generally, not all Linux distributions care about such
things.
Joe Gwinn
It\'s in the kernel, so they mostly don\'t get to care or not care.
I\'ve recently tried again with CentOS, which is RHEL EE without
the support--no joy.
Let me add that while it does take root permission to turn realtime
on, it does not follow that the application must also run as root.
Running a big application as root is a real bad idea, for both
robustness and security reasons.
They\'re my boxes, and when doing cluster sims they usually run a special
OS for the purpose: Rocks 7. It has one head-node and N compute nodes
that get network-booted off the head, so I get a clean install every
time they boot up. So no worries there.
I hadn\'t heard of Rocks 7. I\'ll look into it.
There\'s no point in running as root, though, because you can\'t change
the priority of user threads even then--only realtime ones.
So, why not use realtime ones? This is done all the time. The
application code works the same.
>The Linux thread scheduler is a really-o truly-o Charlie Foxtrot.
The legacy UNIX \"nice\" scheduler, retained for backward compatibility,
it unsuited for realtime for sure. And for what you are doing it
would seem.
What I\'ve seen done is that during startup, the application startup
process or thread is given permission to run sudo, which it uses to
set scheduling policies (FIFO) and numerical priority (real urgent)
for the main processes and threads before normal operation
commences.
The other thing that is normally set up during startup is the
establishment of shared memory windows between processes. For may
applications, passing data blocks around by pointer passing is the
only practical approach.
Passing pointers only works on unis or shared-memory SMP boxes. My
pre-cluster versions did it that way, but by about 2006 I needed 20+
cores to do the job in a reasonable time.
The present-day large-scale solution is to use shared memory via
Infiniband. Memory is transferred to and from IB to local memory
using DMA (Direct Memory Access) hardware.
This is done with a fleet of identical enterprise-class PCs, often
from HP or Dell or the like.
I was building nanoantennas with travelling wave plasmonic waveguides,
coupled to SOI optical waveguides. (They eventually worked really well,
but it was a long slog, mostly by myself.)
The plasmonic section was intended to avoid the ~30 THz RC bandwidth of
my tunnel junction detectors--the light wave went transverse to the
photocurrent, so the light didn\'t have to drive the capacitance all at
once. That saved me over 30 dB of rolloff right there.
Wow! That\'s worth a bunch of trouble for sure.
The issue was that metals that exhibit plasmons (copper, silver, and
gold) exhibit free-electron behaviour in the infrared, i.e. their
epsilons are very nearly pure, negative real numbers. That makes the
real part of their refractive indices very very small, so you have to
take very small time steps or the simulation becomes unstable due to
superluminal propagation.
Are there any metals that don\'t exhibit plasmons?
Their imaginary epsilons are very large, so you need very small voxels
to represent the fields well. Small voxels and short time steps make
for loooong run times, especially when it\'s wrapped in an optimization loop.
If I recall/understand, the imaginary epsilons are the loss factors,
so this is quite lossy.
This sounds like a problem that would benefit from parallelism, and
shared memory. And lots of physical memory.
Basically divide the propagation media into independent squares or
boxes that overlap somewhat, with inter square/box traffic needed only
for the overlap regions. So, there will be an optimum square/box area
or volume.
Joe Gwinn