Thông tin tài liệu
MANNING
Matthew Scarpino
How to accelerate graphics and computation
IN ACTION
OpenCL in Action
Download from Wow! eBook <www.wowebook.com>
Download from Wow! eBook <www.wowebook.com>
OpenCL in Action
HOW TO ACCELERATE GRAPHICS AND COMPUTATION
MATTHEW SCARPINO
MANNING
SHELTER ISLAND
Download from Wow! eBook <www.wowebook.com>
For online information and ordering of this and other Manning books, please visit
www.manning.com. The publisher offers discounts on this book when ordered in quantity.
For more information, please contact
Special Sales Department
Manning Publications Co.
20 Baldwin Road
PO Box 261
Shelter Island, NY 11964
Email: orders@manning.com
©2012 by Manning Publications Co. All rights reserved.
No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in
any form or by means electronic, mechanical, photocopying, or otherwise, without prior written
permission of the publisher.
Many of the designations used by manufacturers and sellers to distinguish their products are
claimed as trademarks. Where those designations appear in the book, and Manning
Publications was aware of a trademark claim, the designations have been printed in initial caps
or all caps.
Recognizing the importance of preserving what has been written, it is Manning’s policy to have
the books we publish printed on acid-free paper, and we exert our best efforts to that end.
Recognizing also our responsibility to conserve the resources of our planet, Manning books are
printed on paper that is at least 15 percent recycled and processed without the use of elemental
chlorine.
Manning Publications Co. Development editor: Maria Townsley
20 Baldwin Road Copyeditor: Andy Carroll
PO Box 261 Proofreader: Maureen Spencer
Shelter Island, NY 11964 Typesetter: Gordan Salinovic
Cover designer: Marija Tudor
ISBN 9781617290176
Printed in the United States of America
1 2 3 4 5 6 7 8 9 10 – MAL – 16 15 14 13 12 11
Download from Wow! eBook <www.wowebook.com>
v
brief contents
PART 1 FOUNDATIONS OF OPENCL PROGRAMMING 1
1 ■ Introducing OpenCL 3
2 ■ Host programming: fundamental data structures 16
3 ■ Host programming: data transfer and partitioning 43
4 ■ Kernel programming: data types and device memory 68
5 ■ Kernel programming: operators and functions 94
6 ■ Image processing 123
7 ■ Events, profiling, and synchronization 140
8 ■ Development with C++ 167
9 ■ Development with Java and Python 196
10 ■ General coding principles 221
PART 2 CODING PRACTICAL ALGORITHMS IN OPENCL 235
11 ■ Reduction and sorting 237
12 ■ Matrices and QR decomposition 258
13 ■ Sparse matrices 278
14 ■ Signal processing and the fast Fourier transform 295
Download from Wow! eBook <www.wowebook.com>
BRIEF CONTENTS
vi
PART 3 ACCELERATING OPENGL WITH OPENCL 319
15 ■ Combining OpenCL and OpenGL 321
16 ■ Textures and renderbuffers 340
Download from Wow! eBook <www.wowebook.com>
vii
contents
preface xv
acknowledgments xvii
about this book xix
PART 1 FOUNDATIONS OF OPENCL PROGRAMMING 1
1
Introducing OpenCL 3
1.1 The dawn of OpenCL 4
1.2 Why OpenCL? 5
Portability 6
■
Standardized vector processing 6
■
Parallel
programming 7
1.3 Analogy: OpenCL processing and a game of cards 8
1.4 A first look at an OpenCL application 10
1.5 The OpenCL standard and extensions 13
1.6 Frameworks and software development kits (SDKs) 14
1.7 Summary 14
Download from Wow! eBook <www.wowebook.com>
CONTENTS
viii
2
Host programming: fundamental data structures 16
2.1 Primitive data types 17
2.2 Accessing platforms 18
Creating platform structures 18
■
Obtaining platform
information 19
■
Code example: testing platform extensions 20
2.3 Accessing installed devices 22
Creating device structures 22
■
Obtaining device
information 23
■
Code example: testing device extensions 24
2.4 Managing devices with contexts 25
Creating contexts 26
Obtaining context information 28
■
Contexts and the reference
count 28
■
Code example: checking
a context’s reference
count 29
2.5 Storing device code in programs 30
Creating programs 30
■
Building programs 31
■
Obtaining
program information 33
■
Code example: building a program from
multiple source files 35
2.6 Packaging functions in kernels 36
Creating kernels 36
■
Obtaining kernel information 37
Code example: obtaining kernel information 38
2.7 Collecting kernels in a command queue 39
Creating command queues 40
■
Enqueuing kernel execution
commands 40
2.8 Summary 41
3
Host programming: data transfer and partitioning 43
3.1 Setting kernel arguments 44
3.2 Buffer objects 45
Allocating buffer objects 45
■
Creating subbuffer objects 47
3.3 Image objects 48
Creating image objects 48
■
Obtaining information about image
objects 51
3.4 Obtaining information about buffer objects 52
3.5 Memory object transfer commands 54
Read/write data transfer 54
■
Mapping memory objects 58
Copying data between memory objects 59
Download from Wow! eBook <www.wowebook.com>
CONTENTS
ix
3.6 Data partitioning 62
Loops and work-items 63
■
Work sizes and offsets 64
■
A simple
one-dimensional example 65
■
Work-groups and compute units 65
3.7 Summary 67
4
Kernel programming: data types and device memory 68
4.1 Introducing kernel coding 69
4.2 Scalar data types 70
Accessing the double data type 71
■
Byte order 72
4.3 Floating-point computing 73
The float data type 73
■
The double data type 74
■
The half
data type 75
■
Checking IEEE-754 compliance 76
4.4 Vector data types 77
Preferred vector widths 79
■
Initializing vectors 80
■
Reading
and modifying vector components 80
■
Endianness and memory
access 84
4.5 The OpenCL device model 85
Device model analogy part 1: math students in school 85
■
Device
model analogy part 2: work-items in a device 87
■
Address spaces
in code 88
■
Memory alignment 90
4.6 Local and private kernel arguments 90
Local arguments 91
■
Private arguments 91
4.7 Summary 93
5
Kernel programming: operators and functions 94
5.1 Operators 95
5.2 Work-item and work-group functions 97
Dimensions and work-items 98
■
Work-groups 99
■
An
example application 100
5.3 Data transfer operations 101
Loading and storing data of the same type 101
■
Loading vectors
from a scalar array 101
■
Storing vectors to a scalar array 102
5.4 Floating-point functions 103
Arithmetic and rounding functions 103
■
Comparison
functions 105
■
Exponential and logarithmic functions 106
Trigonometric functions 106
■
Miscellaneous floating-point
functions 108
Download from Wow! eBook <www.wowebook.com>
[...]... used to accelerate three-dimensional rendering, a topic of central interest in game development and scientific visualization Chapter 15 introduces the topic of OpenCL-OpenGL interoperability and shows how the two toolsets can share data corresponding to vertex attributes Chapter 16 expands on this and shows how OpenCL can accelerate OpenGL texture processing These chapters require an understanding of... and functions in detail and look at example applications that demonstrate their usage in code Chapter 1 introduces OpenCL, explaining what it’s used for and how it works Chapters 2 and 3 explain how host applications are coded, and chapters 4 and 5 discuss kernel coding Chapters 6 and 7 explore the advanced topics of image processing and event handling Chapters 8 and 9 discuss how OpenCL is coded in. .. and 16 discuss images, and the source code in these chapters makes use of the open-source PNG library Chapter 6 explains how to obtain this library for different systems Appendix B and chapters 15 and 16 all require access to OpenGL, and appendix B explains how to obtain and install this toolset Code conventions As lazy as this may sound, I prefer to copy and paste working code into my applications rather... between OpenGL and OpenCL 322 Creating the OpenCL context 323 Sharing data between OpenGL and OpenCL 325 Synchronizing access to shared data 328 ■ ■ 15.2 Obtaining information 329 Obtaining OpenGL object and texture information information about the OpenGL context 330 15.3 Basic interoperability example 329 ■ Obtaining 331 Initializing OpenGL operation 331 Initializing OpenCL operation 331 Creating data... host programming and kernel coding Specifically, chapter 6 presents image processing and chapter 7 discusses the important topics of event processing and synchronization Chapters 8 and 9 discuss the concepts first presented in chapters 2 through 5, but using languages other than C Chapter 8 discusses host/kernel coding in C++, and chapter 9 explains how to build OpenCL applications in Java and Python... structured to serve the needs of a programmer who has never coded a line of OpenCL Chapter 1 introduces the topic of OpenCL, explaining what it is, where it came from, and the basics of its operation Chapters 2 and 3 explain how to code applications that run on the host, and chapters 4 and 5 show how to code kernels that run on compliant devices Chapters 6 and 7 explore advanced topics that involve both... Figure 1.3 Matrix-vector multiplication sends it to the first device it finds The following listing shows what this host code looks like Notice that the source code is written in the C programming language NOTE Error-checking routines have been omitted from this listing, but you’ll find them in the matvec.c file in this book’s example code Listing 1.1 Creating and distributing a matrix-vector multiplication... eBook preface In the summer of 1997, I was terrified Instead of working as an intern in my major (microelectronic engineering), the best job I could find was at a research laboratory devoted to high-speed signal processing My job was to program the two-dimensional fast Fourier transform (FFT) using C and the Message Passing Interface (MPI), and get it running as quickly as possible The... platforms and CUDA on Nvidia platforms Author Online Nobody’s perfect If I failed to convey my subject material clearly or (gasp) made a mistake, feel free to add a comment through Manning’s Author Online system You can find the Author Online forum for this book by going to www.manning.com/ OpenCLinAction and clicking the Author Online link Simple questions and concerns get rapid responses In contrast,... SDKs provided by AMD and Nvidia Appendix B discusses the basics of OpenGL and shader development Appendix C explains how to install and use the Minimalist GNU for Windows (MinGW), which provides a GNU-like environment for building executables on the Windows operating system Lastly, appendix D discusses the specification for embedded OpenCL Obtaining and compiling the example code In the end, it’s the . 101
Loading and storing data of the same type 101
■
Loading vectors
from a scalar array 101
■
Storing vectors to a scalar array 102
5.4 Floating-point functions. and OpenCL 322
Creating the OpenCL context 323
■
Sharing data between OpenGL
and OpenCL 325
■
Synchronizing access to shared data 328
15.2 Obtaining information
Ngày đăng: 14/02/2014, 20:20
Xem thêm: Tài liệu How to accelerate graphics and computationIN ACTIONMatthew ScarpinoMANNING.OpenCL in docx, Tài liệu How to accelerate graphics and computationIN ACTIONMatthew ScarpinoMANNING.OpenCL in docx, 3 Analogy: OpenCL processing and a game of cards