2022-02-17 22:33:27 -05:00
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
<html lang="en">
|
|
|
|
|
<head>
|
2022-02-18 15:59:12 -05:00
|
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
|
|
|
<style>
|
2022-02-17 22:33:27 -05:00
|
|
|
|
body {
|
|
|
|
|
max-width: 30em;
|
|
|
|
|
margin-left: 2em;
|
|
|
|
|
}
|
|
|
|
|
p.center {
|
|
|
|
|
text-align:center;
|
|
|
|
|
}
|
|
|
|
|
</style>
|
2022-02-18 15:59:12 -05:00
|
|
|
|
<link rel="shortcut icon" href="../rho.ico">
|
|
|
|
|
<title>Multicore</title>
|
2022-02-17 22:33:27 -05:00
|
|
|
|
</head>
|
|
|
|
|
<body>
|
2022-02-18 15:59:12 -05:00
|
|
|
|
<p><a href="./index.html"> To Home page</a> </p>
|
|
|
|
|
<h1>Multicore</h1>
|
|
|
|
|
<p> At the same time as the security crisis has hit, the multicore crisis
|
|
|
|
|
has hit. A short while ago we were dealing with isolated serial
|
|
|
|
|
machines, now our programs must utilize a sea of machines. </p>
|
|
|
|
|
<p> Multithreading is hard. Doing it routinely, doing it with large
|
|
|
|
|
programs, invariably fails. </p>
|
|
|
|
|
<p> Intel, NVIDIA, and Google however have this crisis well in hand. </p>
|
|
|
|
|
<p> Big Businesses are attacking the problem, with competence and success,
|
|
|
|
|
and we can leave them to it and not worry too much. Google is pioneering
|
|
|
|
|
the way, and Intel and NVIDIA are making similar tools available to the
|
|
|
|
|
masses. </p>
|
|
|
|
|
<p> Since massive parallelism is a hard problem, requiring good people, much
|
|
|
|
|
thought, and much care, the meta solution is to solve that problem as few
|
|
|
|
|
times as possible, and re-use the resulting solutions as much as
|
|
|
|
|
possible. If, for example, one uses the hash table provided by
|
|
|
|
|
Intel’s threaded building blocks library, the Intel library and Intel
|
|
|
|
|
compiler takes care of hash table related coordination issues that
|
|
|
|
|
otherwise the programmer would have to take care of, and would probably
|
|
|
|
|
foul up. </p>
|
|
|
|
|
<p> Intel has provided a bunch of utilities that make it a good deal easier,
|
|
|
|
|
Vtune, thread checker, OpenMP, compiler auto parallelism, Intel Thread
|
|
|
|
|
Checker, Intel VTune Performance Analyzer, and most importantly, Threaded
|
|
|
|
|
Building Blocks. it is still hard – but no longer damn near
|
|
|
|
|
impossible. </p>
|
|
|
|
|
<p> Back in the days when there was one hardware thread of execution driving
|
|
|
|
|
multiple software threads, locking worked well. These day, not so
|
|
|
|
|
well. Rather, it is often more desirable to use a lockless
|
|
|
|
|
transactional approach to handle any shared state. Shared state is
|
|
|
|
|
hard, better to share nothing – or to leave any sharing to those utilities
|
|
|
|
|
that someone else has already written and debugged. If rolling your
|
|
|
|
|
own, better to use InterlockedXxx than Lock. Note that you construct
|
|
|
|
|
your <a href="interlockedxxx.html">own InterlockedXxx</a> operation for
|
|
|
|
|
any Xxx using InterlockedCompareExchange. </p>
|
|
|
|
|
<p> The big solution, however is that pioneered by Google. Rather than each
|
|
|
|
|
programmer designing his own multithreading and multicore design, one has
|
|
|
|
|
a small number of very general massively parallel algorithms embodied in
|
|
|
|
|
useful software for massaging masses of data. The programmer then
|
|
|
|
|
calls that software and lets it handle the parallelism. Google’s Map
|
|
|
|
|
Reduce is the classic example of this, but every database servicing a web
|
|
|
|
|
application is also an example of this, since one typically has many web
|
|
|
|
|
servers running many processes all of which might potentially update the
|
|
|
|
|
same data at the same time, and the database is supposed to sort out any
|
|
|
|
|
resulting problems, while the developers write in single threaded python
|
|
|
|
|
or ruby on rails, and let the database handle any problems related to
|
|
|
|
|
massive parallelism. </p>
|
|
|
|
|
<p> Google’s “app engine” allows programmers to write straightforward single
|
|
|
|
|
threaded python code in the easy to use Django framework that can be
|
|
|
|
|
executed in a massively parallel manner with coordination between many
|
|
|
|
|
parallel processes being performed by Google’s datastore. </p>
|
|
|
|
|
<p> In short, the multicore crisis, unlike the other crises I describe in
|
|
|
|
|
this group of web pages, is well in hand. </p>
|
2022-02-17 22:33:27 -05:00
|
|
|
|
<p style="background-color : #ccffcc; font-size:80%">These documents are
|
|
|
|
|
licensed under the <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Creative
|
2022-02-18 15:59:12 -05:00
|
|
|
|
Commons Attribution-Share Alike 3.0 License</a></p>
|
2022-02-17 22:33:27 -05:00
|
|
|
|
</body>
|
|
|
|
|
</html>
|