*** Outline ***
❌ wikipedia: Grappe de serveurs
❌ wikipedia: Parallel computing
❌ supercomputingblog: CUDA, MPI, OpenMP, Graphics Programming, OpenCL, Mobile Computing
❌ Frank Kusters: Massively Parallel Computing as a Service (PDF file), Designing a service for use of massively parallel computation in a service-oriented architecture
❌ scribd: Java Code Transformation for Parallelization
❌ Alan Kaminsky: Parallel Java
❌ MAGMA: Matrix Algebra on GPU and Multicore Architectures
❌ PLASMA: Parallel Linear Algebra for Scalable Multi-core Architectures
A. CUDA
CUDA stands for Compute Unified Device Architecture
CUDA works on NVIDIA cards
Another limitation of GPU processing is that you cannot execute Java code on the GPU. This code must be created in a C-like language called OpenCL.
cl.exe is the Microsoft compiler which ships with Visual Studio, which is required to compile CUDA C++ programs
❌ NVIDIA: CUDA GPUs
❌ NVIDIA: CUDA basic (PDF file)
❌ developer.NVIDIA: CUDA Toolkit
❌ developer.NVIDIA: NVIDIA CUDA C Programming Guide (PDF file, Version 4.2)
❌ Jason Sanders: Introduction to CUDA C (PDF file, San Jose Convention Center | September 20, 2010)
❌ Sarah Tariq, NVIDIA Corporation: An Introduction to GPU Computing and CUDA Architecture
❌ wikipedia: CUDA
❌ Klaus Mueller: CUDA Specifics (PDF file)
❌ Barry Wilkinson and Yaohang Li: Basic CUDA programming (PowerPoint file)
❌ Cédric Castagnède and François Rué: GPU for dummies (PDF file)
B. CUDA setting
❌ SearchSystemsChannel: Setting Windows 7 environment variables
❌ answers.microsoft: Can not find the "program data" folder
❌ Andreas Klöckner's wiki: Windows 7 64-bit with Visual Studio Professional 2008
❌ IXMX: CUDA compiler Problems with 64bit
❌ stackOverflow: CUDA linking error - Visual Express 2008 - nvcc fatal due to (null) configuration file
❌ rays of hope: Compiling CUDA projects
❌ stackOverflow: Error:identifer “blockIdx” is undefined
❌ NVIDIA: Driver installation hints
❌ life of a programmer geek: Using Eclipse for CUDA development
❌ Ferdy Christant: C/C++ Development Tools downloads
C. CUDA tutorial
❌ enseignement.polytechnique: Introduction à CUDA
❌ Richard Membarth: CUDA Parallel Programming Tutorial (PDF)
❌ Cyril Zeller, Nvidia: Tutorial CUDA
❌ /// Parallel Panorama ///: CUDA tutorial
❌ The Supercomputing Blog: CUDA tutorial
❌ YouTube: Cuda Tutorial 1: Introduction
❌ Developpez.com: Une introduction à CUDA
Un petit parallèle avec le matériel. Un thread est exécuté par un processeur : posons donc l'égalité entre le thread et le processeur. Ainsi, le bloc est le multiprocesseur, tandis que la grille représente l'entièreté de la carte.
Un warp a une taille de 32 threads et il y a 16 banques
D. jCUDA
❌ jcuda.org: Java bindings for CUDA
❌ Java Code Geeks: CPU vs. GPGPU
❌ Java Code Geeks: General Processing on the Graphics Processing Unit (GPGPU) Java programming
❌ Java Code Geeks: GPGPU with Jcuda the Good, the Bad and … the Ugly
❌ stackoverflow: JCuda: doing parallel arithmetic operations on arrays?
❌ Yonghong Yan, Max Grossman, and Vivek Sarkar:
JCUDA: A Programmer-Friendly Interface for Accelerating Java Programs with CUDA (PDF)
❌ CommentCaMarche: dll dans Eclipse java
❌ coderanch: Configuring eclipse to use dll files at runtime
❌ stackoverflow: Error running JCuda
E. OpenCL
❌ Khronos: OpenCL - The open standard for parallel programming of heterogeneous systems
❌ wikipedia: OpenCL - Open Computing Language
❌ developer.nvidia: OpenCL runs on CUDA-powered GPUs
❌ The Code Project: Part 1: Programming your Graphics Card (GPU) with Java & OpenCL
❌ Jun Ni: CUDA and OpenCL -- Development interfaces for multicore programming (PDF)
❌ George van Venrooij: Cross-platform GPGPU with OpenCL
❌ ArrayFire: GPU computing libraries for CUDA, OpenCL, and OpenGL
F. JOCL
❌ JOCL: Java bindings for OpenCL
❌ codeproject: Part 1: Programming your Graphics Card (GPU) with Java & OpenCL
❌ byte-welt: Error while launching JOCL
G. Ateji-PX
❌ wikipedia: Ateji PX
H. OpenMP
❌ Ruud van der Pas (SUN): An Introduction Into OpenMP
❌ Seung-Jai Min: OpenMP Tutorial
❌ wikipedia: OpenMP
❌ OpenMP.org: OpenMP compilers
❌ idris: cours OpenMP
❌ Centre de Calcul Recherche et Technologie, CEA: MPC (MultiProcessor Computing)
I. JOMP
An OpenMP-like set of directives and library routines for shared memory parallel programming in Java
❌ Georg Dotzler, Ronald Veldema, and Michael Klemm: JCudaMP: OpenMP/Java on CUDA
❌ Ronald Veldema, Thorsten Blass, and Michael Philippsen: Enabling multiple accelerator acceleration for Java/OpenMP
J. HMPP
❌ F. Bodin, CAPS entreprise: Introduction au calcul scientifique sur GPU (PDF file)
The CAPS HMPP toolkit is a set of compiler directives, tools and software runtime that supports multi-core processor parallel programming in C and Fortran on Unix platforms.
❌ wikipedia: OpenHMPP
❌ insideHPC: Video: An overview of the CAPS OpenACC compiler
K. MPI
❌ wikipedia: Message Passing Interface
❌ supercomputingblog: Getting Started with MPI using Visual Studio 2008 Express
❌ MPJ Express Blog: Nested parallelism using MPJ Express
❌ Bibrak's Experiments: MPJ + CUDA
❌ dartmouth.edu: Advantages of Parallel Programming
❌ idris: Cours MPI
L. OpenGL
❌ wikipedia: OpenGL (Open Graphics Library)
❌ The Industry's Foundation for High Performance Graphics: OpenGL
❌ glprogramming: The Official Guide to Learning OpenGL, Version 1.1
❌ developer.nvidia: OpenGL developed by Silicon Graphics
M. CULA tools for zgesvd
❌ a set of GPU-accelerated linear algebra libraries utilizing the NVIDIA CUDA parallel computing architecture
❌ CULA programmer’s guide (PDF file)
Inside Visual C++ 2010 express, navigate to Project > Properties > Configuration Properties > VC++ Directories. From this dialog you will be able to configure global executable, include, and library paths, which will allow any project that you create to use CULA and CUDA.
When setting up your environment, prepend the path of your CULA and CUDA installations to
the entries of X64 executable files, include files, and library files.
C:\Program Files\CULA\R15\bin64;
C:\Program Files\CULA\R15\include; C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\include;
C:\Program Files\CULA\R15\lib64; C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\lib\x64;
To use CULA and CUDA, you must instruct Visual C++ to link CULA and CUDA to your application.
To do this, right-click on your project and select Properties. From here, navigate
to Configuration Properties > Linker > Input. In the Additional Dependencies field, enter
cula_core.lib; cula_lapack.lib; cudart.lib;
❌ linux.die: zgesvd(l) - Linux man page
❌ NAG parallel library: Eigenvalues and Eigenvectors
❌ netlib: zgesvd.c
---------- GEMM ------------
❌ wikipedia: General matrix multiply
❌ wikipedia: Basic Linear Algebra Subprograms
❌ mymathlib: Matrix multiplication
❌ Lung-Sheng Chien: Hand-tuned CGEMM on GT200 GPU
❌ culaTools: CULA and Java ?
❌ culaTools: Does CULA Dense R14 support CUDA 4.2?
❌ culaTools: Visual Studio 2010 - configuring environment problem
❌ culaTools: Problem with matrix multiplication (in Cula R12)
❌ culaTools: LU decomposition in CULA
❌ John R. Humphrey, Daniel K. Price, Kyle E. Spagnoli, Aaron L. Paolini, and Eric J. Kelmelis: CULA: Hybrid GPU accelerated linear algebra routines (PDF file)
❌ Lung Sheng Chien (簡龍昇) and Yin-Liang Huang (黃印良): 2008 summer C-language
N.Parallel SVD
❌ Sheetal Lahabar:
Exploiting the graphics hardware to solve two compute intensive
problems: Singular Value Decomposition and Ray Tracing Parametric
Patches:
thesis and
presentation
❌ Sheetal Lahabar and P J Narayanan: Singular Value Decomposition on GPU using CUDA
❌ wolfram: Singular Value Decomposition
❌ 赵佳:
在CUDA中实现奇异值分解算法的提速:
presentation
❌ Gabriel Okša, Ondrej Sýkora, and Marián Vajteršic: New class of block matrix orderings for the parallel two-sided Jacobi SVD algorithm
❌ Gagandeep S. Sachdev, Vishay Vanjani, and Mary W. Hall: Takagi factorization on GPU using CUDA
❌ Gagandeep S. Sachdev, Vishay Vanjani, and Mary W. Hall: Takagi factorization on a GPU using CUDA
❌ Nariankadu D. Hemkumar: A systolic VLSI architecture for complex SVD
❌ Yanwei Niu, Ziang Hu, and Guang R. Gao: Parallel reconstruction for parallel imaging SPACERIP on cellular computer architecture
❌ S. Qiao and X. Wang: Computing the singular values of 2X2 complex matrices
❌ Piotr Wendykier: Parallel Colt
❌ Charlotte Kotas and Jacob Barhen: Singular value decomposition utilizing parallel algorithms on graphical processors
O. Calling C code from Java
❌ Wikipedia: Java Native Interface
❌ Andrew Downs: Using native code with Java applications and the Sun JDK
❌ Numerical Algorithms Group: Calling C library routines from Java, using the Java Native Interface
❌ jonisalonen: Calling C from Java is easy
P. Java Native Access
❌ Mickael Baron and Frégéric Martini: Exécuter du code natif en Java : JNI VS JNA
❌ ImageJ: Developing using native libraries
❌ Wikipedia: Java Native Access
❌
Java Native Access, Version 3.4.1
JNA provides Java programs easy access to native shared libraries (DLLs on Windows) without writing anything but Java code—no JNI or native code is required.
❌ Scriptol: JNA, using native code with Java, demo
Java Native Access is an extension to Java that allows the use of native APIs by including dynamically library files, DLLs under Windows.
❌ m-hewedy.blogspot.fr: Java Native Access (JNA) by example..
❌ Electric Bacon: On writing a DLL and using it with JNA
❌ Michał Wróbel: How to call/invoke external DLL library method/function from Java code?
❌ jnaexamples.blogspot.fr: JAVA native access examples
❌ aspsp.blogspot.fr: Java Native Access
❌ Ethan Shayne: JNA examples
❌ msdn.microsoft: Windows API reference
❌ Erik D. Demaine: C to Java: converting pointers into references, (PDF file)
❌ Erik D. Demaine: C to Java: converting pointers into references
❌ Baski: Converting pointer parameters in C++ to Java
❌ Web Based Programming Tutorials: Moving C and C++ code to Java
❌ stanford: Pointer basics
❌ Returning C array to Java using JNA
❌ Pointer to array of structures as JNA method arguments
❌ java jna - get byte array by reference java.lang.IndexOutOfBoundsException
❌ Passing a Java class into a void* parameter with JNA
❌ msdn MICROSOFT: How to import a .lib and .dll into the project?
1. You #include the header file (.h) file in your project as necessary.
2. You list the import library (.lib) in the Linker->Input->Additional Dependencies
section of your project settings.
3. You place the DLL itself (.dll) in the same directory as the executable.
so it can be found at run time.
❌ horstmann: Moving from Java to C++
❌ ippon: Java : Accès directs à la mémoire (off-Heap)
--------- FloatBuffer ----------
❌ velocityreviews: Why are Buffers not Serializable in Java?
❌ How to allocate a float buffer in java
❌ Create a float buffer by using wrap method of FloatBuffer class
❌ rlentz.blogspot.fr: Java NIO ByteOrdering with JNA and native C code on OSX
❌ oracle: java.nio - Class FloatBuffer
❌ Why FloatBuffer instead of float[]?
-------- JNA tool ----------
❌ JNAerator brings native libs to Java
❌ BridJ: Call C, C++, ObjectiveC libraries without compiling native code
A free utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules.
❌ Ché zOlive: JNAerator 0.12 released
Q. Dynamic Link Library
❌ msdn MICROSOFT: DLLs
❌ tenouk: Dynamic Link Library - DLL, Part 1: Story
❌ How to compile a 64-bit DLL using Visual Studio 2010
❌ dreamincode: DLLs - Explicit linking loading DLL without import library (.lib)
R. Visual studio 2010 and CUDA
❌ Steven Mark Ford:
Ensure you have Microsoft Visual Studio 2010 installed before you install the CUDA toolkit, if you have already installed the CUDA toolkit and have not yet installed Visual Studio then un-install it before continuing (not doing so will result in Visual Studio integration not functioning!)
❌ The code project: CUDA 3.2 on VS2010 in 9 steps
❌ Ade Miller: Using CUDA and Thrust with Visual Studio 2010
❌ Ade Miller: Visual Studio 2010 and CUDA
------ Syntax highlighting ------
❌ stackoverflow:
How can I get syntax highlighting for a .cu file in Visual Studio?❌ digitalerr0r: Parallel Computing using the GPU – Tutorial 3: Integrate CUDA 3.2 into Visual Studio 2008
❌ ProgrammerFish: Easiest Way to Run CUDA on Visual Studio 2008
❌ 3D Game Engine Programming: Introduction to CUDA using Visual Studio 2008
❌ Ingemar Ragnemalm: The real "Hello World!" for CUDA!
S. Visual studio 2010 and C
❌ wikibooks: C++ Programming /Compiler /Linker /Libraries /Configuring Visual Studio
❌ Travis Gockel: Visual Studio 2010: Property sheets and C++ directories
Visual Studio 2008 provides a fairly obtuse (but working) system for referencing libraries accessable from the Tools > Options menu. It turns out they had moved -- to the property page of the project (just right-click the project and open properties)in Visual Studio 2010.
❌ msdn MICROSOFT: Property Pages (C++)
❌ wikipedia: Dynamic-link library
❌ Where does Visual Studio look for C++ header files?
The order is
(1) current source directory
(2) Additional Include Directories in the project properties. (Under C++ | General)
(3) Visual Studio C++ Include directories under Tools | Options |
Projects and Solutions | VC++ Directories.
The preprocessor in VS 2010 looks into the current dir only if the quoted include syntax is used (e.g #include "whatever.h"). Using angle brackets (e.g #include <whatever.h>) omits the current dir
❌ msdn.microsoft: #include directive (C/C++)
❌ functionX:
Win32 static libraries
The library file has the lib extension.
❌ Building a DLL with Visual C++ (PDF)
❌ Tutorials ++: C++ tutorial: Create a DLL in VC++ 2010/2008
❌ Manski: Projects in Visual C++ 2010 – Part 1: Creating a DLL project
❌ How to create a .DLL file in Visual Studio 2010?
A .DLL(dynamic linking library) file is a library that contains code and data that can be used by more than one program at the same time.
❌ code project: Regular DLL tutor for beginners
❌ flipcode: Creating and using DLLs
❌
msdn MICROSOFT:
Walkthrough: Creating and using a Dynamic Link Library (C++)
Guideline is wrong: replace the step 3 instruction "select Win32 Console Application" with "select Win32 Project"
❌ Can't include iostream in C using MS Visual C++?
If your source file is ".c", all you have to do is to rename it ".cpp".
❌ FunctionX: Win32 static DLL
❌ samlogic: Windows 64-bit: The 'Program Files (x86)' and 'SysWOW64' folders explained
❌ msdn.microsoft: Best practices for WOW64
❌ msdn.microsoft: File system redirector
T. Visual studio C++ 2010 express
❌ forum.celestialmatters: VS2010 express SP1 compiler & Windows SDK 7.1 updates
The installation order of MS Visual Studio C++ 2010 Express
with 64-bit compiler support is:
(1) Install MS Visual Studio C++ 2010 Express
(2) Install MS Windows SDK 7.1 and .NET Framework 4
(3) Install MS Visual Studio 2010 Service Pack 1
(4) Install MS Visual C++ 2010 Service Pack 1 compiler update for the Windows SDK 7.1
❌ wireshark.org: Install Microsoft C compiler and SDK
❌ developpez.com: Microsoft Visual C++ 2010 Express : Téléchargement, installation et configuration
❌ MathWorks: How do I install Microsoft Visual C++ 2010 Express and Microsoft Windows SDK 7.1?
❌ Soft32: Télécharger Microsoft Visual C++ 2010 Express
❌ MSDN Microsoft: Microsoft Windows Software Development Kit
❌ MSDN Microsoft: Chapter 2: Setting up the Hilo development environment
❌ askyb: Configure Visual C++ projects to target 64-bit platforms
❌ unknowncheats: error 2 fatal error lnk1104 cannot open file 'kernel32.lib
"kernel32.lib" is in C:\Program Files\Microsoft SDKs\Windows\vX.X\Lib
❌ MSDN Microsoft: Using the Windows Software Development Kit (SDK) for Windows 8 Consumer Preview with Visual Studio 2010
❌ MSDN Microsoft: Windows 8.1 desktop samples