mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 14:04:32 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			45 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
This library provides data parallel C++ container classes with internal memory layout
 | 
						|
that is transformed to map efficiently to SIMD architectures. CSHIFT facilities
 | 
						|
are provided, similar to HPF and cmfortran, and user control is given over the mapping of
 | 
						|
array indices to both MPI tasks and SIMD processing elements.
 | 
						|
 | 
						|
* Identically shaped arrays then be processed with perfect data parallelisation.
 | 
						|
* Such identically shapped arrays are called conformable arrays.
 | 
						|
 | 
						|
The transformation is based on the observation that Cartesian array processing involves
 | 
						|
identical processing to be performed on different regions of the Cartesian array.
 | 
						|
 | 
						|
The library will (eventually) both geometrically decompose into MPI tasks and across SIMD lanes.
 | 
						|
 | 
						|
Data parallel array operations can then be specified with a SINGLE data parallel paradigm, but
 | 
						|
optimally use MPI, OpenMP and SIMD parallelism under the hood. This is a significant simplification
 | 
						|
for most programmers.
 | 
						|
 | 
						|
The layout transformations are parametrised by the SIMD vector length. This adapts according to the architecture.
 | 
						|
Presently SSE2 (128 bit) AVX, AVX2 (256 bit) and IMCI and AVX512 (512 bit) targets are supported.
 | 
						|
 | 
						|
These are presented as 
 | 
						|
 | 
						|
  vRealF, vRealD, vComplexF, vComplexD 
 | 
						|
 | 
						|
internal vector data types. These may be useful in themselves for other programmers.
 | 
						|
The corresponding scalar types are named
 | 
						|
 | 
						|
  RealF, RealD, ComplexF, ComplexD
 | 
						|
 | 
						|
MPI parallelism is UNIMPLEMENTED and for now only OpenMP and SIMD parallelism is present in the library.
 | 
						|
 | 
						|
   You can give `configure' initial values for configuration parameters
 | 
						|
by setting variables in the command line or in the environment.  Here
 | 
						|
is are examples:
 | 
						|
 | 
						|
     ./configure CXX=clang++ CXXFLAGS="-std=c++11 -O3 -msse4" --enable-simd=SSE4
 | 
						|
 | 
						|
     ./configure CXX=clang++ CXXFLAGS="-std=c++11 -O3 -mavx" --enable-simd=AVX1
 | 
						|
 | 
						|
     ./configure CXX=clang++ CXXFLAGS="-std=c++11 -O3 -mavx2" --enable-simd=AVX2
 | 
						|
 | 
						|
     ./configure CXX=icpc CXXFLAGS="-std=c++11 -O3 -mmic" --enable-simd=AVX512 --host=none
 | 
						|
     
 | 
						|
     
 |