A Practical Approach to High-Performance Computing


Book Description

The book discusses the fundamentals of high-performance computing. The authors combine visualization, comprehensibility, and strictness in their material presentation, and thus influence the reader towards practical application and learning how to solve real computing problems. They address both key approaches to programming modern computing systems: multithreading-based parallelizing in shared memory systems, and applying message-passing technologies in distributed systems. The book is suitable for undergraduate and graduate students, and for researchers and practitioners engaged with high-performance computing systems. Each chapter begins with a theoretical part, where the relevant terminology is introduced along with the basic theoretical results and methods of parallel programming, and concludes with a list of test questions and problems of varying difficulty. The authors include many solutions and hints, and often sample code.




A Practical Approach to Compiler Construction


Book Description

This book provides a practically-oriented introduction to high-level programming language implementation. It demystifies what goes on within a compiler and stimulates the reader's interest in compiler design, an essential aspect of computer science. Programming language analysis and translation techniques are used in many software application areas. A Practical Approach to Compiler Construction covers the fundamental principles of the subject in an accessible way. It presents the necessary background theory and shows how it can be applied to implement complete compilers. A step-by-step approach, based on a standard compiler structure is adopted, presenting up-to-date techniques and examples. Strategies and designs are described in detail to guide the reader in implementing a translator for a programming language. A simple high-level language, loosely based on C, is used to illustrate aspects of the compilation process. Code examples in C are included, together with discussion and illustration of how this code can be extended to cover the compilation of more complex languages. Examples are also given of the use of the flex and bison compiler construction tools. Lexical and syntax analysis is covered in detail together with a comprehensive coverage of semantic analysis, intermediate representations, optimisation and code generation. Introductory material on parallelisation is also included. Designed for personal study as well as for use in introductory undergraduate and postgraduate courses in compiler design, the author assumes that readers have a reasonable competence in programming in any high-level language.




Cloud Computing: A Practical Approach


Book Description

"The promise of cloud computing is here. These pages provide the 'eyes wide open' insights you need to transform your business." --Christopher Crowhurst, Vice President, Strategic Technology, Thomson Reuters A Down-to-Earth Guide to Cloud Computing Cloud Computing: A Practical Approach provides a comprehensive look at the emerging paradigm of Internet-based enterprise applications and services. This accessible book offers a broad introduction to cloud computing, reviews a wide variety of currently available solutions, and discusses the cost savings and organizational and operational benefits. You'll find details on essential topics, such as hardware, platforms, standards, migration, security, and storage. You'll also learn what other organizations are doing and where they're headed with cloud computing. If your company is considering the move from a traditional network infrastructure to a cutting-edge cloud solution, you need this strategic guide. Cloud Computing: A Practical Approach covers: Costs, benefits, security issues, regulatory concerns, and limitations Service providers, including Google, Microsoft, Amazon, Yahoo, IBM, EMC/VMware, Salesforce.com, and others Hardware, infrastructure, clients, platforms, applications, services, and storage Standards, including HTTP, HTML, DHTML, XMPP, SSL, and OpenID Web services, such as REST, SOAP, and JSON Platform as a Service (PaaS), Software as a Service (SaaS), and Software plus Services (S+S) Custom application development environments, frameworks, strategies, and solutions Local clouds, thin clients, and virtualization Migration, best practices, and emerging standards




Spatial Cloud Computing


Book Description

An exploration of the benefits of cloud computing in geoscience research and applications as well as future research directions, Spatial Cloud Computing: A Practical Approach discusses the essential elements of cloud computing and their advantages for geoscience. Using practical examples, it details the geoscience requirements of cloud computing, covers general procedures and considerations when migrating geoscience applications onto cloud services, and demonstrates how to deploy different applications. The book discusses how to choose cloud services based on the general cloud computing measurement criteria and cloud computing cost models. The authors examine the readiness of cloud computing to support geoscience applications using open source cloud software solutions and commercial cloud services. They then review future research and developments in data, computation, concurrency, and spatiotemporal intensities of geosciences and how cloud service can be leveraged to meet the challenges. They also introduce research directions from the aspects of technology, vision, and social dimensions. Spatial Cloud Computing: A Practical Approach a common workflow for deploying geoscience applications and provides references to the concepts, technical details, and operational guidelines of cloud computing. These features and more give developers, geoscientists, and IT professionals the information required to make decisions about how to select and deploy cloud services.




Essential Algorithms


Book Description

A friendly and accessible introduction to the most useful algorithms Computer algorithms are the basic recipes for programming. Professional programmers need to know how to use algorithms to solve difficult programming problems. Written in simple, intuitive English, this book describes how and when to use the most practical classic algorithms, and even how to create new algorithms to meet future needs. The book also includes a collection of questions that can help readers prepare for a programming job interview. Reveals methods for manipulating common data structures such as arrays, linked lists, trees, and networks Addresses advanced data structures such as heaps, 2-3 trees, B-trees Addresses general problem-solving techniques such as branch and bound, divide and conquer, recursion, backtracking, heuristics, and more Reviews sorting and searching, network algorithms, and numerical algorithms Includes general problem-solving techniques such as brute force and exhaustive search, divide and conquer, backtracking, recursion, branch and bound, and more In addition, Essential Algorithms features a companion website that includes full instructor materials to support training or higher ed adoptions.




A Practical Introduction to Computer Architecture


Book Description

It is a great pleasure to write a preface to this book. In my view, the content is unique in that it blends traditional teaching approaches with the use of mathematics and a mainstream Hardware Design Language (HDL) as formalisms to describe key concepts. The book keeps the “machine” separate from the “application” by strictly following a bottom-up approach: it starts with transistors and logic gates and only introduces assembly language programs once their execution by a processor is clearly de ned. Using a HDL, Verilog in this case, rather than static circuit diagrams is a big deviation from traditional books on computer architecture. Static circuit diagrams cannot be explored in a hands-on way like the corresponding Verilog model can. In order to understand why I consider this shift so important, one must consider how computer architecture, a subject that has been studied for more than 50 years, has evolved. In the pioneering days computers were constructed by hand. An entire computer could (just about) be described by drawing a circuit diagram. Initially, such d- grams consisted mostly of analogue components before later moving toward d- ital logic gates. The advent of digital electronics led to more complex cells, such as half-adders, ip- ops, and decoders being recognised as useful building blocks.




Embedded Operating Systems


Book Description

This easy-to- follow textbook/reference guides the reader through the creation of a fully functional embedded operating system, from its source code, in order to develop a deeper understanding of each component and how they work together. The text describes in detail the procedure for building the bootloader, kernel, filesystem, shared libraries, start-up scripts, configuration files and system utilities, to produce a GNU/Linux operating system. This fully updated second edition also includes new material on virtual machine technologies such as VirtualBox, Vagrant and the Linux container system Docker. Topics and features: presents an overview of the GNU/Linux system, introducing the components of the system, and covering aspects of process management, input/output and environment; discusses containers and the underlying kernel technology upon which they are based; provides a detailed examination of the GNU/Linux filesystem; explains how to build an embedded system under a virtual machine, and how to build an embedded system to run natively on an actual processor;introduces the concept of the compiler toolchain, and reviews the platforms BeagleBone and Raspberry Pi; describes how to build firmware images for devices running the Openwrt operating system. The hands-on nature and clearly structured approach of this textbook will appeal strongly to practically minded undergraduate and graduate level students, as well as to industry professionals involved in this area.




What Can Be Computed?


Book Description

An accessible and rigorous textbook for introducing undergraduates to computer science theory What Can Be Computed? is a uniquely accessible yet rigorous introduction to the most profound ideas at the heart of computer science. Crafted specifically for undergraduates who are studying the subject for the first time, and requiring minimal prerequisites, the book focuses on the essential fundamentals of computer science theory and features a practical approach that uses real computer programs (Python and Java) and encourages active experimentation. It is also ideal for self-study and reference. The book covers the standard topics in the theory of computation, including Turing machines and finite automata, universal computation, nondeterminism, Turing and Karp reductions, undecidability, time-complexity classes such as P and NP, and NP-completeness, including the Cook-Levin Theorem. But the book also provides a broader view of computer science and its historical development, with discussions of Turing's original 1936 computing machines, the connections between undecidability and Gödel's incompleteness theorem, and Karp's famous set of twenty-one NP-complete problems. Throughout, the book recasts traditional computer science concepts by considering how computer programs are used to solve real problems. Standard theorems are stated and proven with full mathematical rigor, but motivation and understanding are enhanced by considering concrete implementations. The book's examples and other content allow readers to view demonstrations of—and to experiment with—a wide selection of the topics it covers. The result is an ideal text for an introduction to the theory of computation. An accessible and rigorous introduction to the essential fundamentals of computer science theory, written specifically for undergraduates taking introduction to the theory of computation Features a practical, interactive approach using real computer programs (Python in the text, with forthcoming Java alternatives online) to enhance motivation and understanding Gives equal emphasis to computability and complexity Includes special topics that demonstrate the profound nature of key ideas in the theory of computation Lecture slides and Python programs are available at whatcanbecomputed.com




Feature Engineering and Selection


Book Description

The process of developing predictive models includes many stages. Most resources focus on the modeling algorithms but neglect other critical aspects of the modeling process. This book describes techniques for finding the best representations of predictors for modeling and for nding the best subset of predictors for improving model performance. A variety of example data sets are used to illustrate the techniques along with R programs for reproducing the results.




Essential Algorithms


Book Description

A friendly introduction to the most useful algorithms written in simple, intuitive English The revised and updated second edition of Essential Algorithms, offers an accessible introduction to computer algorithms. The book contains a description of important classical algorithms and explains when each is appropriate. The author shows how to analyze algorithms in order to understand their behavior and teaches techniques that the can be used to create new algorithms to meet future needs. The text includes useful algorithms such as: methods for manipulating common data structures, advanced data structures, network algorithms, and numerical algorithms. It also offers a variety of general problem-solving techniques. In addition to describing algorithms and approaches, the author offers details on how to analyze the performance of algorithms. The book is filled with exercises that can be used to explore ways to modify the algorithms in order to apply them to new situations. This updated edition of Essential Algorithms: Contains explanations of algorithms in simple terms, rather than complicated math Steps through powerful algorithms that can be used to solve difficult programming problems Helps prepare for programming job interviews that typically include algorithmic questions Offers methods can be applied to any programming language Includes exercises and solutions useful to both professionals and students Provides code examples updated and written in Python and C# Essential Algorithms has been updated and revised and offers professionals and students a hands-on guide to analyzing algorithms as well as the techniques and applications. The book also includes a collection of questions that may appear in a job interview. The book’s website will include reference implementations in Python and C# (which can be easily applied to Java and C++).