Julia high performance : optimizations, distributed computing, multithreading, and GPU programming with Julia 1.0 and beyond /
Julia is a high-level, high-performance dynamic programming language for numerical computing. This book will help you understand the performance characteristics of your Julia programs and achieve near-C levels of performance in Julia.
Clasificación: | Libro Electrónico |
---|---|
Autor principal: | |
Otros Autores: | |
Formato: | Electrónico eBook |
Idioma: | Inglés |
Publicado: |
Birmingham :
Packt Publishing Ltd.,
2019.
|
Edición: | Second edition. |
Temas: | |
Acceso en línea: | Texto completo |
Tabla de Contenidos:
- Cover; Title Page; Copyright and Credits; Dedication; About Packt; Foreword; Contributors; Table of Contents; Preface; Chapter 1: Julia is Fast; Julia
- fast and dynamic; Designed for speed; JIT and LLVM; Types, type inference, and code specialization; How fast can Julia be?; Summary; Chapter 2: Analyzing Performance; Timing Julia functions; The @time macro; Other time macros; The Julia profiler; Using the profiler; ProfileView; Using Juno for profiling; Using TimerOutputs; Analyzing memory allocation; Using the memory allocation tracker; Statistically accurate benchmarking
- Using BenchmarkTools.jlSummary; Chapter 3: Types, Type Inference, and Stability; The Julia type system; Using types; Multiple dispatch; Abstract types; Julia's type hierarchy; Composite and immutable types; Type parameters; Type inference; Type-stability; Definitions; Fixing type instability; The performance pitfalls; Identifying type stability; Loop variables; Kernel methods and function barriers; Types in storage locations; Arrays; Composite types; Parametric composite types; Summary; Chapter 4: Making Fast Function Calls; Using globals; The trouble with globals
- Fixing performance issues with globalsInlining; Default inlining; Controlling inlining; Disabling inlining; Constant propagation; Using macros for performance; The Julia compilation process; Using macros; Evaluating a polynomial; Horner's method; The Horner macro; Generated functions; Using generated functions; Using generated functions for performance; Using keyword arguments; Summary; Chapter 5: Fast Numbers; Numbers in Julia, their layout, and storage; Integers; Integer overflow; BigInt; The floating point; Floating point accuracy; Unsigned integers; Trading performance for accuracy
- The @fastmath macroThe K-B-N summation; Subnormal numbers; Subnormal numbers to zero; Summary; Chapter 6: Using Arrays; Array internals in Julia; Array representation and storage; Column-wise storage; Adjoints; Array initialization; Bounds checking; Removing the cost of bounds checking; Configuring bound checks at startup; Allocations and in-place operations; Preallocating function output; sizehint!; Mutating functions; Broadcasting; Array views; SIMD parallelization (AVX2, AVX512); SIMD.jl; Specialized array types; Static arrays; Structs of arrays; Yeppp!
- Writing generic library functions with arraysSummary; Chapter 7: Accelerating Code with the GPU; Technical requirements; Getting started with GPUs; CUDA and Julia; CuArrays; Monte Carlo simulation on the GPU; Writing your own kernels; Measuring GPU performance; Performance tips; Scalar iteration; Combining kernels; Processing more data; Deep learning on the GPU; ArrayFire; Summary; Chapter 8: Concurrent Programming with Tasks; Tasks; Using tasks; The task life cycle; task_local_storage; Communicating between tasks; Task iteration; High-performance I/O