Commit 79fabf01 authored by Vít Hanousek's avatar Vít Hanousek
Browse files

Implementace Array Operations pro MIC, vedoucí k zpřehlednění kódu -> kód...

Implementace Array Operations pro MIC, vedoucí k zpřehlednění kódu -> kód použitý pro srovnávací test MIC-krakow, MIC-sharedpoiters, MIC-ArrayOperations
parent 559c9f5c
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
#!/bin/bash

module load gcc-5.3.0 cmake-3.4.3 intel_parallel_studio_ex-2016.1
cd Release
#make -j 6 tnlSatanExperimentalTest-dbg
#make -j 6 tnlSatanMICVectorExperimentalTest-dbg
#make -j 6 tnl-image-converter-dbg
make -j 6 tnl-heat-equation
 No newline at end of file
cd Debug
#make -j 6 tnlMICArrayTest-dbg
make -j 6 tnlMICVectorTest-dbg
#make -j 6 tnl-heat-equation-dbg
 No newline at end of file
+6 −7
Original line number Diff line number Diff line
#!/bin/bash

function heat_eq {
ext=""
#ext=""
#cd Debug/bin
#ext="-dbg"
ext="-dbg"

export LD_LIBRARY_PATH=`pwd`"/../lib":$LD_LIBRARY_PATH

@@ -113,9 +113,8 @@ done


module load gcc-5.3.0 cmake-3.4.3 intel_parallel_studio_ex-2016.1
cd Release/bin
cd Debug/bin
 export OFFLOAD_REPORT=0
#./tnlSatanExperimentalTest-dbg
#./tnlSatanExperimentalTest-dbg
#./tnlSatanMICVectorExperimentalTest-dbg
 heat_eq
#./tnlMICArrayTest-dbg
./tnlMICVectorTest-dbg
# heat_eq
+88 −17
Original line number Diff line number Diff line
@@ -25,24 +25,53 @@ template< typename DestinationDevice,
class ArrayOperations{};

template<>
class ArrayOperations< Devices::MIC >
class ArrayOperations< Devices::Host >
{
   public:

   template< typename Element, typename Index >
   static bool allocateMemory( Element*& data,
                               const Index size );

   template< typename Element >
   static bool freeMemory( Element* data );

   template< typename Element >
   static void setMemoryElement( Element* data,
                                 const Element& value );

   template< typename Element >
   static Element getMemoryElement( Element* data );

   template< typename Element, typename Index >
   static Element& getArrayElementReference( Element* data, const Index i );

   template< typename Element, typename Index >
   static const Element& getArrayElementReference( const Element* data, const Index i );


   template< typename Element, typename Index >
   static bool setMemory( Element* data,
                          const Element& value,
                          const Index size );

   template< typename DestinationElement,
             typename SourceElement,
             typename Index >
   static bool copyMemory( DestinationElement* destination,
                           const SourceElement* source,
                           const Index size )
   {
       std::cout << "Never Will be implemented tnlArrayOperations-copyMemory on MIC" <<std::endl;
       return false;
   };  
                           const Index size );

   template< typename Element1,
             typename Element2,
             typename Index >
   static bool compareMemory( const Element1* destination,
                              const Element2* source,
                              const Index size );
};

template<>
class ArrayOperations< Devices::Host >
class ArrayOperations< Devices::Cuda >
{
   public:

@@ -58,7 +87,7 @@ class ArrayOperations< Devices::Host >
                                 const Element& value );

   template< typename Element >
   static Element getMemoryElement( Element* data );
   static Element getMemoryElement( const Element* data );

   template< typename Element, typename Index >
   static Element& getArrayElementReference( Element* data, const Index i );
@@ -66,7 +95,6 @@ class ArrayOperations< Devices::Host >
   template< typename Element, typename Index >
   static const Element& getArrayElementReference( const Element* data, const Index i );


   template< typename Element, typename Index >
   static bool setMemory( Element* data,
                          const Element& value,
@@ -88,7 +116,48 @@ class ArrayOperations< Devices::Host >
};

template<>
class ArrayOperations< Devices::Cuda >
class ArrayOperations< Devices::Cuda, Devices::Host >
{
   public:

   template< typename DestinationElement,
             typename SourceElement,
             typename Index >
   static bool copyMemory( DestinationElement* destination,
                           const SourceElement* source,
                           const Index size );

   template< typename DestinationElement,
             typename SourceElement,
             typename Index >
   static bool compareMemory( const DestinationElement* destination,
                              const SourceElement* source,
                              const Index size );
};

template<>
class ArrayOperations< Devices::Host, Devices::Cuda >
{
   public:

   template< typename DestinationElement,
             typename SourceElement,
             typename Index >
   static bool copyMemory( DestinationElement* destination,
                           const SourceElement* source,
                           const Index size );

   template< typename Element1,
             typename Element2,
             typename Index >
   static bool compareMemory( const Element1* destination,
                              const Element2* source,
                              const Index size );
};


template<>
class ArrayOperations< Devices::MIC >
{
   public:

@@ -133,7 +202,7 @@ class ArrayOperations< Devices::Cuda >
};

template<>
class ArrayOperations< Devices::Cuda, Devices::Host >
class ArrayOperations< Devices::MIC, Devices::Host >
{
   public:

@@ -153,7 +222,7 @@ class ArrayOperations< Devices::Cuda, Devices::Host >
};

template<>
class ArrayOperations< Devices::Host, Devices::Cuda >
class ArrayOperations< Devices::Host, Devices::MIC >
{
   public:

@@ -164,17 +233,19 @@ class ArrayOperations< Devices::Host, Devices::Cuda >
                           const SourceElement* source,
                           const Index size );

   template< typename Element1,
             typename Element2,
   template< typename DestinationElement,
             typename SourceElement,
             typename Index >
   static bool compareMemory( const Element1* destination,
                              const Element2* source,
   static bool compareMemory( const DestinationElement* destination,
                              const SourceElement* source,
                              const Index size );
};


} // namespace Algorithms
} // namespace Containers
} // namespace TNL

#include <TNL/Containers/Algorithms/ArrayOperationsHost_impl.h>
#include <TNL/Containers/Algorithms/ArrayOperationsCuda_impl.h>
#include <TNL/Containers/Algorithms/ArrayOperationsMIC_impl.h>
 No newline at end of file
+34 −34
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ typename Vector::RealType VectorOperations< Devices::MIC >::getVectorMax( const
 //tady je možnost paralelizace  
  typename Vector :: RealType result;
  typename Vector ::IndexType size=v.getSize();
  Devices::satanHider<const typename Vector :: RealType > vct;
  Devices::MICHider<const typename Vector :: RealType > vct;
  vct.pointer=v.getData();
  
  #pragma offload target(mic) in(vct,size) out(result)
@@ -70,7 +70,7 @@ typename Vector :: RealType VectorOperations< Devices::MIC > :: getVectorMin( co
 //tady je možnost paralelizace  
  typename Vector :: RealType result;
  typename Vector ::IndexType size=v.getSize();
  Devices::satanHider<const typename Vector :: RealType > vct;
  Devices::MICHider<const typename Vector :: RealType > vct;
  vct.pointer=v.getData();
  
  #pragma offload target(mic) in(vct,size) out(result)
@@ -91,7 +91,7 @@ typename Vector :: RealType VectorOperations< Devices::MIC > :: getVectorAbsMax(
 //tady je možnost paralelizace  
  typename Vector :: RealType result;
  typename Vector ::IndexType size=v.getSize();
  Devices::satanHider<const typename Vector :: RealType > vct;
  Devices::MICHider<const typename Vector :: RealType > vct;
  vct.pointer=v.getData();
  
  #pragma offload target(mic) in(vct,size) out(result)
@@ -113,7 +113,7 @@ typename Vector :: RealType VectorOperations< Devices::MIC > :: getVectorAbsMin(
 //tady je možnost paralelizace  
  typename Vector :: RealType result;
  typename Vector ::IndexType size=v.getSize();
  Devices::satanHider<const typename Vector :: RealType > vct;
  Devices::MICHider<const typename Vector :: RealType > vct;
  vct.pointer=v.getData();
  
  #pragma offload target(mic) in(vct,size) out(result)
@@ -138,7 +138,7 @@ VectorOperations< Devices::MIC >::getVectorL1Norm( const Vector& v )
   
   Real result( 0.0 );
   const Index n = v. getSize();
   Devices::satanHider<const typename Vector :: RealType > vct;
   Devices::MICHider<const Real > vct;
   vct.pointer=v.getData();

#pragma offload target(mic) in(vct,n) inout(result)
@@ -159,7 +159,7 @@ VectorOperations< Devices::MIC >::getVectorL2Norm( const Vector& v )
   TNL_ASSERT( v. getSize() > 0, );
   Real result( 0.0 );
   const Index n = v. getSize();
   Devices::satanHider<const typename Vector :: RealType > vct;
   Devices::MICHider<const Real > vct;
   vct.pointer=v.getData();

#pragma offload target(mic) in(vct,n) inout(result)
@@ -191,7 +191,7 @@ VectorOperations< Devices::MIC >:: getVectorLpNorm( const Vector& v,
   
   Real result( 0.0 );
   const Index n = v. getSize();
   Devices::satanHider<const typename Vector :: RealType > vct;
   Devices::MICHider<const Real > vct;
   vct.pointer=v.getData();

#pragma offload target(mic) in(vct,n) inout(result)
@@ -215,7 +215,7 @@ typename Vector :: RealType VectorOperations< Devices::MIC > :: getVectorSum( co

   Real result( 0.0 );
   const Index n = v. getSize();
   Devices::satanHider<const typename Vector :: RealType > vct;
   Devices::MICHider<const Real > vct;
   vct.pointer=v.getData();

#pragma offload target(mic) in(vct,n) inout(result)
@@ -239,8 +239,8 @@ typename Vector1 :: RealType VectorOperations< Devices::MIC> :: getVectorDiffere
 
   Real result( 0.0 );
   const Index n = v1. getSize();
   Devices::satanHider<const typename Vector1 :: RealType > vct1;
   Devices::satanHider<const typename Vector1 :: RealType > vct2;
   Devices::MICHider<const Real > vct1;
   Devices::MICHider<const Real > vct2;
   vct1.pointer=v1.getData();
   vct2.pointer=v2.getData();
  
@@ -264,8 +264,8 @@ typename Vector1 :: RealType VectorOperations< Devices::MIC > :: getVectorDiffer
 
   Real result( 0.0 );
   const Index n = v1. getSize();
   Devices::satanHider<const typename Vector1 :: RealType > vct1;
   Devices::satanHider<const typename Vector1 :: RealType > vct2;
   Devices::MICHider<const Real > vct1;
   Devices::MICHider<const Real > vct2;
   vct1.pointer=v1.getData();
   vct2.pointer=v2.getData();
  
@@ -289,8 +289,8 @@ typename Vector1 :: RealType VectorOperations< Devices::MIC > :: getVectorDiffer
 
   Real result( 0.0 );
   const Index n = v1. getSize();
   Devices::satanHider<const typename Vector1 :: RealType > vct1;
   Devices::satanHider<const typename Vector1 :: RealType > vct2;
   Devices::MICHider<const Real > vct1;
   Devices::MICHider<const Real > vct2;
   vct1.pointer=v1.getData();
   vct2.pointer=v2.getData();
  
@@ -314,8 +314,8 @@ typename Vector1 :: RealType VectorOperations< Devices::MIC > :: getVectorDiffer
 
   Real result( 0.0 );
   const Index n = v1. getSize();
   Devices::satanHider<const typename Vector1 :: RealType > vct1;
   Devices::satanHider<const typename Vector1 :: RealType > vct2;
   Devices::MICHider<const Real > vct1;
   Devices::MICHider<const Real > vct2;
   vct1.pointer=v1.getData();
   vct2.pointer=v2.getData();
  
@@ -342,8 +342,8 @@ getVectorDifferenceL1Norm( const Vector1& v1,

   Real result( 0.0 );
   const Index n = v1. getSize();
   Devices::satanHider<const typename Vector1 :: RealType > vct1;
   Devices::satanHider<const typename Vector1 :: RealType > vct2;
   Devices::MICHider<const Real> vct1;
   Devices::MICHider<const Real > vct2;
   vct1.pointer=v1.getData();
   vct2.pointer=v2.getData();
  
@@ -372,8 +372,8 @@ getVectorDifferenceL2Norm( const Vector1& v1,
   Real result( 0.0 );
   const Index n = v1. getSize();
   
   Devices::satanHider<const typename Vector1 :: RealType > vct1;
   Devices::satanHider<const typename Vector1 :: RealType > vct2;
   Devices::MICHider<const Real > vct1;
   Devices::MICHider<const Real > vct2;
   vct1.pointer=v1.getData();
   vct2.pointer=v2.getData();
  
@@ -415,8 +415,8 @@ getVectorDifferenceLpNorm( const Vector1& v1,
   Real result( 0.0 );
   const Index n = v1. getSize();
   
   Devices::satanHider<const typename Vector1 :: RealType > vct1;
   Devices::satanHider<const typename Vector1 :: RealType > vct2;
   Devices::MICHider<const Real > vct1;
   Devices::MICHider<const Real > vct2;
   vct1.pointer=v1.getData();
   vct2.pointer=v2.getData();
  
@@ -443,8 +443,8 @@ typename Vector1::RealType VectorOperations< Devices::MIC > :: getVectorDifferen

   Real result( 0.0 );
   const Index n = v1. getSize();
   Devices::satanHider<const typename Vector1 :: RealType > vct1;
   Devices::satanHider<const typename Vector1 :: RealType > vct2;
   Devices::MICHider<const Real > vct1;
   Devices::MICHider<const Real > vct2;
   vct1.pointer=v1.getData();
   vct2.pointer=v2.getData();
  
@@ -467,7 +467,7 @@ void VectorOperations< Devices::MIC > :: vectorScalarMultiplication( Vector& v,
   TNL_ASSERT( v. getSize() > 0, );

   const Index n = v. getSize();
   Devices::satanHider<typename Vector :: RealType > vct;
   Devices::MICHider<Real > vct;
   vct.pointer=v.getData();
   Real a=alpha;
   
@@ -491,8 +491,8 @@ typename Vector1 :: RealType VectorOperations< Devices::MIC > :: getScalarProduc

   Real result( 0.0 );
   const Index n = v1. getSize();
   Devices::satanHider<const typename Vector1 :: RealType > vct1;
   Devices::satanHider<const typename Vector1 :: RealType > vct2;
   Devices::MICHider<const Real > vct1;
   Devices::MICHider<const Real > vct2;
   vct1.pointer=v1.getData();
   vct2.pointer=v2.getData();
   
@@ -536,8 +536,8 @@ void VectorOperations< Devices::MIC > :: addVector( Vector1& y,
   TNL_ASSERT( x. getSize() == y. getSize(), );
   
   const Index n = y. getSize();
   Devices::satanHider<typename Vector1 :: RealType > vct;
   Devices::satanHider<const typename Vector1 :: RealType > vct2;
   Devices::MICHider<Real> vct;
   Devices::MICHider<const Real> vct2;
   vct.pointer=y.getData();
   vct2.pointer=x.getData();
   Real a=alpha;
@@ -570,9 +570,9 @@ addVectors( Vector1& v,
   TNL_ASSERT( v.getSize() == v2.getSize(), );
   
    const Index n = v. getSize();
    Devices::satanHider<typename Vector1 :: RealType > vct;
    Devices::satanHider<const typename Vector1 :: RealType > vct1;
    Devices::satanHider<const typename Vector1 :: RealType > vct2;
    Devices::MICHider<Real> vct;
    Devices::MICHider<const Real> vct1;
    Devices::MICHider<const Real> vct2;
    vct.pointer=v.getData();
    vct1.pointer=v1.getData();
    vct2.pointer=v2.getData();
@@ -603,7 +603,7 @@ void VectorOperations< Devices::MIC >::computePrefixSum( Vector& v,
   TNL_ASSERT( v.getSize() > begin, );
   TNL_ASSERT( end > begin, );
   
   Devices::satanHider<typename Vector :: RealType > vct;
   Devices::MICHider<typename Vector :: RealType> vct;
   vct.pointer=v.getData();
#pragma offload target(mic) in(vct,begin,end)
{
@@ -627,7 +627,7 @@ void VectorOperations< Devices::MIC >::computeExclusivePrefixSum( Vector& v,
   TNL_ASSERT( begin >= 0, );
   TNL_ASSERT( end > begin, );
   
   Devices::satanHider<typename Vector :: RealType > vct;
   Devices::MICHider<Real> vct;
   vct.pointer=v.getData();
   
#pragma offload target(mic) in(vct,begin,end)
+0 −5
Original line number Diff line number Diff line
@@ -183,10 +183,5 @@ std::ostream& operator << ( std::ostream& str, const Array< Element, Device, Ind
} // namespace TNL

#include <TNL/Containers/Array_impl.h>
#include <TNL/Containers/ArrayMIC_impl.h>

#ifdef HAVE_MIC
    //MIC specializaton of Araray
    #include <TNL/Containers/ArrayMIC_impl.h>
#endif
Loading