PDF Data Parallel C++: Programming Accelerated Systems Using C++ and SYCL 2nd Edition James Reinders download
PDF Data Parallel C++: Programming Accelerated Systems Using C++ and SYCL 2nd Edition James Reinders download
com
https://ebookmass.com/product/data-parallel-c-programming-
accelerated-systems-using-c-and-sycl-2nd-edition-james-
reinders/
OR CLICK HERE
DOWLOAD NOW
https://ebookmass.com/product/data-parallel-c-programming-accelerated-
systems-using-c-and-sycl-2nd-edition-james-reinders/
ebookmass.com
https://ebookmass.com/product/programming-principles-and-practice-
using-c-2nd-edition-ebook-pdf/
ebookmass.com
https://ebookmass.com/product/c-programming-language-c-programming-
lang-_p2-2nd-edition-ebook-pdf/
ebookmass.com
https://ebookmass.com/product/la-parole-est-une-force-captiver-
emouvoir-convaincre-trevor-currie/
ebookmass.com
Egg Innovations and Strategies for Improvements Patricia
Hester
https://ebookmass.com/product/egg-innovations-and-strategies-for-
improvements-patricia-hester/
ebookmass.com
https://ebookmass.com/product/lenny-moon-burrow-bears-book-8-mm-fel-
fern/
ebookmass.com
https://ebookmass.com/product/the-ascent-adam-plantinga/
ebookmass.com
https://ebookmass.com/product/the-existential-crisis-of-motherhood-
claire-arnold-baker/
ebookmass.com
https://ebookmass.com/product/burning-desire-marie-harte-2/
ebookmass.com
A Hundred Other Girls: A Novel Iman Hariri-Kia
https://ebookmass.com/product/a-hundred-other-girls-a-novel-iman-
hariri-kia/
ebookmass.com
Data Parallel C++
Programming Accelerated Systems Using
C++ and SYCL
—
Second Edition
—
James Reinders
Ben Ashbaugh
James Brodman
Michael Kinsner
John Pennycook
Xinmin Tian
Foreword by Erik Lindahl, GROMACS and
Stockholm University
Data Parallel C++
Programming Accelerated
Systems Using C++ and SYCL
Second Edition
James Reinders
Ben Ashbaugh
James Brodman
Michael Kinsner
John Pennycook
Xinmin Tian
Foreword by Erik Lindahl, GROMACS and
Stockholm University
Data Parallel C++: Programming Accelerated Systems Using C++ and SYCL, Second Edition
James Reinders Michael Kinsner
Beaverton, OR, USA Halifax, NS, Canada
Ben Ashbaugh John Pennycook
Folsom, CA, USA San Jose, CA, USA
James Brodman Xinmin Tian
Marlborough, MA, USA Fremont, CA, USA
Preface����������������������������������������������������������������������������������������������xxi
Foreword������������������������������������������������������������������������������������������ xxv
Acknowledgments��������������������������������������������������������������������������� xxix
Chapter 1: Introduction������������������������������������������������������������������������1
Read the Book, Not the Spec��������������������������������������������������������������������������������2
SYCL 2020 and DPC++�����������������������������������������������������������������������������������������3
Why Not CUDA?�����������������������������������������������������������������������������������������������������4
Why Standard C++ with SYCL?����������������������������������������������������������������������������5
Getting a C++ Compiler with SYCL Support���������������������������������������������������������5
Hello, World! and a SYCL Program Dissection�������������������������������������������������������6
Queues and Actions����������������������������������������������������������������������������������������������7
It Is All About Parallelism��������������������������������������������������������������������������������������8
Throughput������������������������������������������������������������������������������������������������������8
Latency������������������������������������������������������������������������������������������������������������9
Think Parallel���������������������������������������������������������������������������������������������������9
Amdahl and Gustafson����������������������������������������������������������������������������������10
Scaling�����������������������������������������������������������������������������������������������������������11
Heterogeneous Systems��������������������������������������������������������������������������������11
Data-Parallel Programming���������������������������������������������������������������������������13
iii
Table of Contents
iv
Table of Contents
v
Table of Contents
vi
Table of Contents
vii
Table of Contents
Data Management���������������������������������������������������������������������������������������������165
Initialization�������������������������������������������������������������������������������������������������165
Data Movement�������������������������������������������������������������������������������������������166
Queries��������������������������������������������������������������������������������������������������������������174
One More Thing�������������������������������������������������������������������������������������������������177
Summary����������������������������������������������������������������������������������������������������������178
Chapter 7: Buffers����������������������������������������������������������������������������179
Buffers��������������������������������������������������������������������������������������������������������������180
Buffer Creation��������������������������������������������������������������������������������������������181
What Can We Do with a Buffer?������������������������������������������������������������������188
Accessors����������������������������������������������������������������������������������������������������������189
Accessor Creation���������������������������������������������������������������������������������������192
What Can We Do with an Accessor?������������������������������������������������������������198
Summary����������������������������������������������������������������������������������������������������������199
viii
Table of Contents
ix
Table of Contents
x
Table of Contents
xi
Table of Contents
xii
Table of Contents
GPU Hardware���������������������������������������������������������������������������������������������402
Beware the Cost of Offloading!��������������������������������������������������������������������403
GPU Kernel Best Practices��������������������������������������������������������������������������������405
Accessing Global Memory���������������������������������������������������������������������������405
Accessing Work-Group Local Memory���������������������������������������������������������409
Avoiding Local Memory Entirely with Sub-Groups��������������������������������������412
Optimizing Computation Using Small Data Types����������������������������������������412
Optimizing Math Functions��������������������������������������������������������������������������413
Specialized Functions and Extensions��������������������������������������������������������414
Summary����������������������������������������������������������������������������������������������������������414
For More Information�����������������������������������������������������������������������������������415
xiii
Table of Contents
xiv
Table of Contents
xv
Table of Contents
Summary����������������������������������������������������������������������������������������������������������556
For More Information�����������������������������������������������������������������������������������557
xvi
Table of Contents
Index�������������������������������������������������������������������������������������������������615
xvii
About the Authors
James Reinders is an Engineer at Intel Corporation with more than four
decades of experience in parallel computing and is an author/coauthor/
editor of more than ten technical books related to parallel programming.
James has a passion for system optimization and teaching. He has had the
great fortune to help make contributions to several of the world’s fastest
computers (#1 on the TOP500 list) as well as many other supercomputers
and software developer tools.
xix
About the Authors
xx
Preface
If you are new to parallel programming that is okay. If you have never
heard of SYCL or the DPC++ compilerthat is also okay
Compared with programming in CUDA, C++ with SYCL offers
portability beyond NVIDIA, and portability beyond GPUs, plus a tight
alignment to enhance modern C++ as it evolves too. C++ with SYCL offers
these advantages without sacrificing performance.
C++ with SYCL allows us to accelerate our applications by harnessing
the combined capabilities of CPUs, GPUs, FPGAs, and processing devices
of the future without being tied to any one vendor.
SYCL is an industry-driven Khronos Group standard adding
advanced support for data parallelism with C++ to exploit accelerated
(heterogeneous) systems. SYCL provides mechanisms for C++ compilers
that are highly synergistic with C++ and C++ build systems. DPC++ is an
open source compiler project based on LLVM that adds SYCL support.
All examples in this book should work with any C++ compiler supporting
SYCL 2020 including the DPC++ compiler.
If you are a C programmer who is not well versed in C++, you are in
good company. Several of the authors of this book happily share that
they picked up much of C++ by reading books that utilized C++ like this
one. With a little patience, this book should also be approachable by C
programmers with a desire to write modern C++ programs.
Second Edition
With the benefit of feedback from a growing community of SYCL users, we
have been able to add content to help learn SYCL better than ever.
xxi
Preface
This edition teaches C++ with SYCL 2020. The first edition preceded
the SYCL 2020 specification, which differed only slightly from what the
first edition taught (the most obvious changes for SYCL 2020 in this edition
are the header file location, the device selector syntax, and dropping an
explicit host device).
xxii
Preface
xxiii
Preface
xxiv
Foreword
SYCL 2020 is a milestone in parallel computing. For the first time we have
a modern, stable, feature-complete, and portable open standard that can
target all types of hardware, and the book you hold in your hand is the
premier resource to learn SYCL 2020.
Computer hardware development is driven by our needs to solve
larger and more complex problems, but those hardware advances are
largely useless unless programmers like you and me have languages that
allow us to implement our ideas and exploit the power available with
reasonable effort. There are numerous examples of amazing hardware,
and the first solutions to use them have often been proprietary since it
saves time not having to bother with committees agreeing on standards.
However, in the history of computing, they have eventually always ended
up as vendor lock-in—unable to compete with open standards that allow
developers to target any hardware and share code—because ultimately the
resources of the worldwide community and ecosystem are far greater than
any individual vendor, not to mention how open software standards drive
hardware competition.
Over the last few years, my team has had the tremendous privilege
of contributing to shaping the emerging SYCL ecosystem through our
development of GROMACS, one of the world’s most widely used scientific
HPC codes. We need our code to run on every supercomputer in the
world as well as our laptops. While we cannot afford to lose performance,
we also depend on being part of a larger community where other teams
invest effort in libraries we depend on, where there are open compilers
available, and where we can recruit talent. Since the first edition of this
book, SYCL has matured into such a community; in addition to several
xxv
Foreword
1
Community-driven implementation from Heidelberg University: tinyurl.com/
HeidelbergSYCL
2
DPC++ compiler project: github.com/intel/llvm
3
GROMACS: gitlab.com/gromacs/gromacs/
xxvi
Foreword
xxvii
Foreword
Erik Lindahl
Professor of Biophysics
Dept. Biophysics & Biochemistry
Science for Life Laboratory
Stockholm University
xxviii
Acknowledgments
We have been blessed with an outpouring of community input for this
second edition of our book. Much inspiration came from interactions with
developers as they use SYCL in production, classes, tutorials, workshops,
conferences, and hackathons. SYCL deployments that include NVIDIA
hardware, in particular, have helped us enhance the inclusiveness and
practical tips in our teaching of SYCL in this second edition.
The SYCL community has grown a great deal—and consists of
engineers implementing compilers and tools, and a much larger group of
users that adopt SYCL to target hardware of many types and vendors. We
are grateful for their hard work, and shared insights.
We thank the Khronos SYCL Working Group that has worked diligently
to produce a highly functional specification. In particular, Ronan Keryell
has been the SYCL specification editor and a longtime vocal advocate
for SYCL.
We are in debt to the numerous people who gave us feedback from
the SYCL community in all these ways. We are also deeply grateful for
those who helped with the first edition a few years ago, many of whom we
named in the acknowledgement of that edition.
The first edition received feedback via GitHub,1 which we did review
but we were not always prompt in acknowledging (imagine six coauthors
all thinking “you did that, right?”). We did benefit a great deal from that
feedback, and we believe we have addressed all the feedback in the
samples and text for this edition. Jay Norwood was the most prolific at
commenting and helping us—a big thank you to Jay from all the authors!
1
github.com/apress/data-parallel-CPP
xxix
Acknowledgments
xxx
CHAPTER 1
Introduction
We have undeniably entered the age of accelerated computing. In order to
satisfy the world’s insatiable appetite for more computation, accelerated
computing drives complex simulations, AI, and much more by providing
greater performance and improved power efficiency when compared with
earlier solutions.
Heralded as a “New Golden Age for Computer Architecture,”1 we are
faced with enormous opportunity through a rich diversity in compute
devices. We need portable software development capabilities that are
not tied to any single vendor or architecture in order to realize the full
potential for accelerated computing.
SYCL (pronounced sickle) is an industry-driven Khronos Group
standard adding advanced support for data parallelism with C++ to
support accelerated (heterogeneous) systems. SYCL provides mechanisms
for C++ compilers to exploit accelerated (heterogeneous) systems in a way
that is highly synergistic with modern C++ and C++ build systems. SYCL is
not an acronym; SYCL is simply a name.
1
A New Golden Age for Computer Architecture by John L. Hennessy, David
A. Patterson; Communications of the ACM, February 2019, Vol. 62 No. 2,
Pages 48-60.
Data parallelism in C++ with SYCL provides access to all the compute
devices in a modern accelerated (heterogeneous) system. A single C++
application can use any combination of devices—including GPUs, CPUs,
FPGAs, and application-specific integrated circuits (ASICs)—that are
suitable to the problems at hand. No proprietary, single-vendor, solution
can offer us the same level of flexibility.
This book teaches us how to harness accelerated computing using
data-parallel programming using C++ with SYCL and provides practical
advice for balancing application performance, portability across compute
devices, and our own productivity as programmers. This chapter lays
the foundation by covering core concepts, including terminology, which
are critical to have fresh in our minds as we learn how to accelerate C++
programs using data parallelism.
2
Chapter 1 Introduction
3
Chapter 1 Introduction
4
Chapter 1 Introduction
5
Chapter 1 Introduction
debuggers, and other tools, known as the oneAPI project. The oneAPI
tools, including the DPC++ compiler, are freely available (www.oneapi.io/
implementations).
1. #include <iostream>
2. #include <sycl/sycl.hpp>
3. using namespace sycl;
4.
5. const std::string secret{
6. "Ifmmp-!xpsme\"\012J(n!tpssz-!Ebwf/!"
7. "J(n!bgsbje!J!dbo(u!ep!uibu/!.!IBM\01"};
8.
9. const auto sz = secret.size();
10.
11. int main() {
12. queue q;
13.
14. char* result = malloc_shared<char>(sz, q);
15. std::memcpy(result, secret.data(), sz);
16.
17. q.parallel_for(sz, [=](auto& i) {
18. result[i] -= 1;
19. }).wait();
20.
21. std::cout << result << "\n";
22. free(result, q);
23. return 0;
24. }
6
Chapter 1 Introduction
Line 18 is the kernel code that we want to run on devices. That kernel
code decrements a single character. With the power of parallel_for(),
that kernel is run on each character in our secret string in order to decode
it into the result string. There is no ordering of the work required, and it is
run asynchronously relative to the main program once the parallel_for
queues the work. It is critical that there is a wait (line 19) before looking at
the result to be sure that the kernel has completed, since in this example
we are using a convenient feature (Unified Shared Memory, Chapter 6).
Without the wait, the output may occur before all the characters have been
decrypted. There is more to discuss, but that is the job of later chapters.
7
Chapter 1 Introduction
Throughput
Increasing throughput of a program comes when we get more work done
in a set amount of time. Techniques like pipelining may stretch out the
time necessary to get a single work-item done, to allow overlapping of
8
Chapter 1 Introduction
Latency
What if we want to get one thing done faster—for instance, analyzing
a voice command and formulating a response? If we only cared about
throughput, the response time might grow to be unbearable. The concept
of latency reduction requires that we break up an item of work into
pieces that can be tackled in parallel. For throughput, image processing
might assign whole images to different processing units—in this case,
our goal may be optimizing for images per second. For latency, image
processing might assign each pixel within an image to different processing
cores—in this case, our goal may be maximizing pixels per second from a
single image.
Think Parallel
Successful parallel programmers use both techniques in their
programming. This is the beginning of our quest to Think Parallel.
We want to adjust our minds to think first about where parallelism
can be found in our algorithms and applications. We also think about how
different ways of expressing the parallelism affect the performance we
ultimately achieve. That is a lot to take in all at once. The quest to Think
Parallel becomes a lifelong journey for parallel programmers. We can learn
a few tips here.
9
Chapter 1 Introduction
10
Random documents with unrelated
content Scribd suggests to you:
indien de aantrekkelijkste en tegelijkertijd krachtigste mannen aan
de aantrekkelijkste vrouwen, en ook deze laatsten aan de eersten de
voorkeur gaven. En deze twee vormen van teeltkeus schijnen
werkelijk beide, hetzij al dan niet gelijktijdig, bij het menschelijk
geslacht plaats te hebben gegrepen, vooral gedurende de vroege
tijdvakken van onze lange geschiedenis.
Het ontbreken van haar op het lichaam is tot op zekere hoogte een
[369]secundair seksueel kenmerk; want in alle deelen der wereld zijn
de vrouwen minder harig dan de mannen. Wij mogen derhalve op
redelijke gronden vermoeden, dat het een kenmerk is, hetwelk door
seksueele teeltkeus werd verkregen. Wij weten, dat de aangezichten
van onderscheidene soorten van apen, en groote plekken aan het
achtereinde van het lichaam bij andere soorten, van haar zijn
ontbloot; en wij mogen dit veilig toeschrijven aan seksueele
teeltkeus; want deze plekken zijn niet alleen levendig gekleurd, maar
somtijds, gelijk bij den mannelijken Mandril en den vrouwelijken
Rhesus-aap, veel levendiger bij de eene sekse dan bij de andere.
(4) Naarmate deze dieren allengs tot vollen wasdom komen, nemen
de naakte plekken, naar de heer Bartlett mij heeft medegedeeld, in
omvang toe naar verhouding tot de geheele grootte hunner
lichamen. Het haar schijnt echter in deze gevallen niet te zijn
verwijderd ter wille van de naaktheid, maar opdat de kleur der huid
meer volkomen zou kunnen worden ten toon gesteld. Evenzoo zijn
ook bij vele vogels de kop en de hals door seksueele teeltkeus van
vederen ontbloot, opdat de levendig gekleurde huid zou kunnen
worden ten toon gesteld.
Daar de vrouw een minder harig lichaam heeft dan de man, en daar
dit kenmerk aan alle rassen gemeen is, mogen wij besluiten, dat
waarschijnlijk eerst onze vrouwelijke half-menschelijke voorouders
hun haar gedeeltelijk verloren, en dat dit plaats greep in een uiterst
verwijderd tijdvak, vóór de onderscheidene menschenrassen zich uit
een gemeenschappelijken stam in verschillende richtingen hadden
ontwikkeld. Toen onze vrouwelijke voorouders dit nieuwe kenmerk
van naaktheid allengs verkregen, moeten zij het in bijna gelijke mate
op hun jong kroost van beiderlei sekse hebben overgeplant, zoodat
de overplanting daarvan, gelijk met vele versierselen bij zoogdieren
en vogels het geval is, niet is beperkt noch door den leeftijd noch
door de sekse. Er is niets verwonderlijks in, dat een gedeeltelijk
verlies van het haar door de op apen gelijkende voorouders van den
mensch als een sieraad is beschouwd; want wij hebben gezien, dat
bij dieren van allerlei soort tallooze vreemde kenmerken als zoodanig
zijn beschouwd en bijgevolg door seksueele teeltkeus gewijzigd. Het
is ook niet te verwonderen, dat daardoor een eenigermate nadeelig
kenmerk zou zijn verkregen; want wij weten, dat dit het geval is met
de siervederen van sommige vogels en met de horens van sommige
herten.
Wat den baard aangaat, zoo vinden wij, als wij ons tot onze beste
gidsen, namelijk de Vierhandige Zoogdieren (Quadrumana), wenden,
baarden bij vele soorten bij beide seksen even goed ontwikkeld,
maar bij andere, hetzij tot de mannetjes beperkt of bij deze meer
ontwikkeld dan bij de wijfjes. Wegens dit feit en wegens de
merkwaardige rangschikking en ook levendige kleuren van het haar
op de koppen van vele apen, is het hoogst waarschijnlijk, gelijk
vroeger is uitgelegd, dat de mannetjes eerst hun baarden als een
versiering door seksueele teeltkeus verkregen, en ze in de meeste
gevallen in gelijke of bijna gelijke mate op hun nakomelingen van
beiderlei seksen overplantten. Wij weten door Eschricht 26, dat bij
den mensch de vrouwelijke foetus even goed als de mannelijke veel
haar op het aangezicht, vooral rondom den mond bezit; en dit toont
aan, dat wij afstammen van voorouders bij welke beide seksen
gebaard waren. Het schijnt daarom op het eerste gezicht
waarschijnlijk, dat de man zijn baard uit een zeer vroeg tijdperk
heeft behouden, terwijl de vrouw haar baard verloor op den zelfden
tijd, toen haar lichaam bijna volkomen van haren werd ontbloot.
Zelfs de kleur van den baard bij den mensch schijnt te zijn
overgeërfd van een op een aap gelijkenden voorvader; want, als er
eenig verschil in tint is tusschen het hoofdhaar en het baardhaar,
dan is dit laatste bij alle apen en bij den mensch lichter gekleurd. Er
is minder onwaarschijnlijkheid in gelegen, dat de mannen van de
gebaarde rassen hun baarden uit oorspronkelijke tijden hebben
behouden, dan in het geval van het haar op het lichaam; want bij de
Vierhandigen (Quadrumana) bij welke het mannetje een grooteren
baard dan het wijfje heeft, komt deze slechts op volwassen leeftijd
tot volkomen ontwikkeling, en de latere ontwikkelingstrappen
kunnen wellicht uitsluitend op den mensch zijn overgeplant. Wij
kunnen dan begrijpen, waarom onze mannelijke kinderen, gelijk
werkelijk het geval is, voordat zij den volwassen leeftijd
[372]bereiken, even ontbloot van baarden zijn als onze vrouwelijke
kinderen. Daarentegen bewijst de groote veranderlijkheid
(variabiliteit) van den baard binnen de grenzen van het zelfde ras en
bij verschillende rassen, dat er atavisme in het spel moet zijn
gekomen. Hoe dit ook moge zijn, wij moeten de rol die de seksueele
teeltkeus zelfs gedurende latere tijden kan hebben gespeeld, niet
voorbijzien; want wij weten, dat bij wilden de mannen van de
baardelooze rassen zich oneindig veel moeite geven om elk haartje
op hun gelaat uit te trekken, als iets onaangenaams, terwijl de
mannen van de gebaarde rassen den grootsten hoogmoed over hun
baarden gevoelen. De vrouwen deelen ongetwijfeld in deze
gevoelens, en indien dit zoo is, kan het moeilijk missen, of de
seksueele teeltkeus heeft in den loop van latere tijden eenigen
invloed uitgeoefend. 27 Het is ook mogelijk, dat de lang voortgezette
gewoonte om het haar uit te trekken, erfelijke gevolgen heeft gehad.
Dr. Brown-Séquard heeft aangetoond, dat, wanneer sommige dieren
op een bijzondere wijze worden geopereerd, hun jongen daardoor
worden aangedaan. Nog meer bewijzen zouden kunnen worden
geleverd van de erfelijkheid van de gevolgen van verminkingen;
maar een voor eenige jaren door den heer Salvin 28 ontdekt feit staat
meer rechtstreeks in betrekking tot de onderhavige vraag; want hij
heeft aangetoond, dat bij de motmots van welke men weet, dat zij
gewoon zijn de vlag van de beide middelste staartvederen af te
bijten, de vlag van deze vederen van nature eenigszins kleiner is. 29
Desniettemin zou bij den mensch de gewoonte van den baard en de
haren op het lichaam uit te trekken, [373]waarschijnlijk niet zijn
ontstaan, wanneer die niet reeds om de eene of andere reden
minder waren geworden.
Het is vrij moeilijk zich er een oordeel over te vormen, hoe het lange
haar op onze hoofden tot ontwikkeling kwam. Eschricht 30 getuigt,
dat bij den menschelijken foetus het haar op het gelaat gedurende
de vijfde maand langer is dan op het hoofd; en dit bewijst, dat onze
half-menschelijke voorouders niet van lange lokken waren voorzien,
die derhalve een laat verworven kenmerk moeten zijn geweest. Dit
wordt eveneens aangetoond door het buitengewone verschil in de
lengte van het haar bij de verschillende rassen; bij den Neger vormt
het haar eenvoudig een gekroesde mat; bij ons is het zeer lang, en
bij de inboorlingen van Amerika reikt het niet zelden tot op den
grond. Bij sommige soorten van Slankapen (Semnopithecus) is de
kop met matig lang haar bedekt, en dit dient waarschijnlijk tot
versiering en werd door seksueele teeltkeus verkregen. De zelfde
meening mag tot den mensch worden uitgebreid; want wij weten,
dat lange lokken heden ten dage zeer worden bewonderd, en zulks
ook vroeger werden; de apostel Paulus zegt: „Soo een vrouwe langh
hair draeght, dat het haer een eere is” (6); en wij hebben gezien,
dat in Noord-Amerika iemand alleen wegens de lengte van zijn haar
tot opperhoofd werd gekozen.
Kleur der Huid.—De beste soort van bewijs, dat de kleur der huid
door seksueele teeltkeus is gewijzigd, ontbreekt in het geval van den
mensch; want de seksen verschillen in dit opzicht in het geheel niet,
of slechts weinig en twijfelachtig. (7) Van den anderen kant weten
wij uit vele reeds medegedeelde feiten, dat de kleur der huid door
menschen van alle rassen als een hoogst belangrijk element van hun
schoonheid wordt beschouwd, zoodat het een kenmerk is, dat
geschikt zou zijn om door teeltkeus te worden gewijzigd, gelijk in
tallooze voorbeelden bij de lagere dieren is geschied. Het schijnt op
het eerste gezicht een monsterachtige veronderstelling, dat de
gitzwartheid van den neger door seksueele teeltkeus is verkregen;
doch deze meening wordt door onderscheidene analogieën
ondersteund, en wij weten, dat [374]de negers hun eigen zwartheid
bewonderen. Als bij Zoogdieren de seksen in kleur verschillen, is het
mannetje dikwijls zwart of veel donkerder dan het wijfje; en het
hangt eenvoudig van den vorm van erfelijkheid af, of deze of eenige
andere tint op beide seksen of alleen op ééne sekse zal worden
overgeplant. De gelijkenis van den Joden- of Satans-aap (Pithecia
satanas) met zijn gitzwarte huid, witte rollende oogappels en zijn op
de kruin van het hoofd gescheiden haar op een neger in miniatuur is
bijna belachelijk.
[Inhoud]
AANTEEKENINGEN.
(2) Dit kunnen wij Darwin volstrekt niet toegeven; wij zien volstrekt
niet in, waarom de mannen, als zij zich met geweld van hun
vrouwen meester maakten, niet liever de schoonste vrouwen, of de
vrouwen die hun in eenig ander opzicht het aantrekkelijkst
toeschenen, zouden hebben geroofd dan de minder schoone en de
minder aantrekkelijke. Wij houden het zelfs voor hoogst
waarschijnlijk, dat zij een dergelijke voorkeur toonden.
(3) „Taboe”. Dit woord drukt een betrekking tot de goden of een
uitsluiting van gewone doeleinden, en tevens een bijzondere
bestemming van taboe verklaarde personen, plaatsen of zaken uit.
Het hangt met den godsdienst der Polynesiërs samen en was zoowel
op de Sandwich-eilanden, als op Otaheite, Noukahiva, Nieuw-
Zeeland enz. in gebruik. Zoo waren bij voorbeeld het vleesch van
verschillende dieren en bijna alle tot offeren bestemde zaken taboe
ten gebruike van de goden en de mannen; de vrouwen waren
derhalve van het genot er van uitgesloten. Soms werd een eiland of
landstreek taboe verklaard, waarna geen vaartuig of persoon zich
derwaarts mocht begeven. In de Israëlietische paradijslegende vindt
men het zelfde begrip. De vrucht van den boom der kennis des
goeds en des kwaads was taboe ten gebruike van Jahve en daarom
mochten Adam en Eva er niet van eten. Dat een meisje taboe werd
verklaard voor een of ander opperhoofd, beteekent dus, dat zij
uitsluitend voor zijn gebruik werd bestemd, en niemand haar kon
huwen, zonder heiligschennis te begaan. Op het breken van de
taboe stond de dood.
(4) Bovenal wordt dit bewezen, doordat die apen die plekken
blijkbaar bewonderen, er mede pronken en bij wijze van groet aan
den beschouwer toedraaien. Zie Darwin’s supplementaire
aanteekening, blz. 306.
(6) 1 Cor. XI, 15; hij voegt er echter bij: „omdat het lang hair voor
een decksel haer is gegeven”, en zegt ook (ibid., vers 14): „dat soo
een man langh hair draeght, het hem oneere is.”
(7) Of dit ook bij alle vroegere volken zoo is geweest, schijnt min of
[377]twijfelachtig. Op de oude Egyptische monumenten (en, naar
men verzekert ook op de bouwvallen van Yucatan en Chiapas) zijn
de mannen standvastig bruin of rood, de vrouwen geel gekleurd.
Waarschijnlijk moet dit echter op een andere wijze worden
verklaard, dan door een werkelijk verschil in kleur tusschen de beide
seksen bij de oude Egyptenaren en Amerikanen.
(8) Emil Decker, een Duitscher, die langen tijd verblijf hield in Noord-
Amerika, meent, dat het roode ras dat zich in de streken van het
Alleghany-gebergte heeft gevormd, daar vooral door de kleur der
omgeving de gele kleur zijner stamouders heeft verloren. Alles is
daar rood; roodbruin is er het ijzerhoudend zand en de
ijzerhoudende leem; roodbruin de stammen der pijnboomen, ceders
en eiken; rood of roodbruin de herten, vossen en konijnen.
Voor een volk dat van de jacht moest leven, was het een voordeel
de zelfde kleur te bezitten om meer ongemerkt het wild te kunnen
naderen en veiliger te zijn voor roofdieren.
Omtrent Afrika merkt Decker ter loops op, dat daar eveneens een
zekere kleurenharmonie in de verschillende voorwerpen valt waar te
nemen. Zoo zijn de gorilla, chimpanzee en groote dikhuidige dieren
zwart, evenals de neger. Omtrent de Maleiers en den orang-oetan
had hij een soortgelijke opmerking kunnen maken. De gele kleur der
Chineezen is in treffende harmonie met den gelen löss-grond, de
gele rivieren, gele planten en dieren. Omtrent de
woestijnbewonende Arabieren (en hun Semitische stamverwanten)
zou hij eveneens zulk een opmerking hebben kunnen maken.
Een groote stap in de ontwikkeling van het verstand zal zijn gedaan,
zoodra ten gevolge van een voorafgaanden aanmerkelijken
vooruitgang de half als kunst, half als instinkt te beschouwen spraak
in gebruik kwam; want het voortdurende gebruik van de spraak zal
op de hersenen hebben teruggewerkt en een erfelijke uitwerking
voortgebracht; en dit zal weder op den vooruitgang van de taal
hebben teruggewerkt. De aanzienlijke grootte van de hersenen van
den mensch, in vergelijking van die der hoogere dieren, naar
verhouding van de grootte hunner lichamen, kan voornamelijk
worden toegeschreven, gelijk de heer Chauncey Wright terecht heeft
opgemerkt 1, aan het vroege gebruik van den eenen of anderen vorm
van taal,—dat wondervolle werktuig dat aan alle voorwerpen en
hoedanigheden teekens toekent, en aaneenschakelingen van
gedachten opwekt, die nimmer zouden zijn ontstaan ten gevolge van
den blooten indruk der zinnen, en, al waren zij ontstaan, nimmer ten
einde toe zouden kunnen zijn vervolgd. De hoogere verstandelijke
vermogens van den mensch, zooals dat van redeneering, dat om
afgetrokken denkbeelden te vormen, de zelfbewustheid enz. zullen
zijn gevolgd uit de voortdurende verbetering van andere
geestvermogens; maar zonder aanmerkelijke veredeling van den
geest, zoowel bij het ras als bij het individu, is het twijfelachtig, of
deze hooge vermogens zouden zijn geoefend en daardoor in
volkomenheid verkregen.
De ontwikkeling der zedelijke vermogens is een belangwekkender en
moeilijker vraagstuk. Hun grond ligt in de sociale instinkten, wanneer
men in deze uitdrukking de familiebanden insluit. Deze instinkten
zijn van een hoogst ingewikkelden aard, en geven in het geval van
de lagere dieren bijzondere neigingen tot zekere bepaalde
handelingen; maar voor ons zijn de belangrijkste elementen liefde
en de daarvan te onderscheiden aandoening van medegevoel.
Dieren die met sociale instinkten zijn begaafd, scheppen behagen in
elkanders gezelschap, waarschuwen elkander voor gevaar,
verdedigen en helpen elkander op vele wijzen. Deze instinkten
worden niet tot alle individu’s van de soort, maar alleen tot die van
de zelfde vereeniging uitgestrekt. Daar [384]zij in hooge mate
voordeelig voor de soort zijn, zijn zij waarschijnlijk door natuurlijke
teeltkeus verkregen.
Het geloof in God is dikwijls niet alleen als het grootste, maar als het
volkomenste van alle verschillen tusschen den mensch en de lagere
dieren voorgesteld. Het is echter onmogelijk, gelijk wij hebben
gezien, om vol te houden, dat dit geloof bij den mensch aangeboren
of instinktmatig is. Daarentegen schijnt het geloof aan in alles
verspreide geestelijke invloeden algemeen te zijn, en schijnt het
gevolg te zijn van een aanmerkelijken vooruitgang in de
redeneerende vermogens van den mensch en van een nog grooter
vooruitgang in zijn vermogens van verbeelding, nieuwsgierigheid en
verwondering. Ik weet zeer goed, dat het vermeende instinktmatige
geloof aan God door vele personen is gebruikt als een bewijsgrond
voor Zijn bestaan. Dit is echter een overijlde bewijsgrond, daar wij
dan ook gedwongen zouden zijn in het bestaan te gelooven van vele
wreede en kwaadwillige geesten die slechts een weinig meer macht
dan de mensch bezitten; want het geloof in hen is veel algemeener
dan dat in een weldoende Godheid. Het denkbeeld van een
algemeen en weldoend Schepper van het Heelal schijnt niet in den
geest van den mensch op te komen, totdat hij door een lang
voortgezette beschaving is opgeheven.
Hij die gelooft, dat de mensch zich uit den eenen of anderen laag
[387]georganiseerden vorm heeft ontwikkeld, zal natuurlijk vragen
welken invloed dit heeft op het geloof aan de onsterfelijkheid van de
ziel. De barbaarsche menschenrassen bezitten, gelijk Sir J. Lubbock
heeft aangetoond, geen duidelijk geloof van deze soort; maar
bewijsgronden, aan de oorspronkelijke godsdienstige meeningen van
wilden ontleend, zijn, gelijk wij juist hebben gezien, van weinig of
geen nut. Weinige menschen gevoelen eenige bezorgdheid wegens
de onmogelijkheid om nauwkeurig te bepalen, op welk tijdstip in de
ontwikkeling van het individu, van het eerste spoor van het kleine
kiemblaasje af tot het kind, hetzij voor of na de geboorte toe, de
mensch een onsterfelijk wezen wordt; en er is geen grooter reden
tot bezorgdheid, omdat het juiste tijdstip in de trapsgewijze
opklimmende reeks der organismen bij geen mogelijkheid kan
worden bepaald. 2 (3)
Ik weet wel, dat de besluiten waartoe wij in dit werk zijn gekomen,
door sommigen van groote ongodsdienstigheid zullen worden
beschuldigd; maar hij, die hen daarvan beschuldigt, is verplicht aan
te toonen, waarom het ongodsdienstiger is om den oorsprong van
den mensch als een afzonderlijke soort door afstamming uit den
eenen of anderen lageren vorm te verklaren door de wetten van
afwijking (variatie) en natuurlijke teeltkeus, dan om de geboorte van
het individu door de wetten van de gewone voortplanting te
verklaren. De geboorte zoowel van de soort als van het individu zijn
gelijkelijk deelen van die groote aaneenschakeling van
gebeurtenissen die onze geest weigert als gevolgen van een blind
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
ebookmass.com