Changeset 413:20c82345510c

Show
Ignore:
Timestamp:
10/28/2012 10:17:46 PM (8 months ago)
Author:
Andreas Schaefer <gentryx@…>
Branch:
default
Message:

importing cuda tests from Wolf HPC paper

Location:
src
Files:
2 added
3 modified

Legend:

Unmodified
Added
Removed
  • src/misc/soaaccessor.h

    r412 r413  
    22#define _libgeodecomp_misc_soaaccessor_h_ 
    33 
    4 // fixme: check for boost pp in configure 
    54#include <boost/preprocessor/seq.hpp> 
    65#include <libgeodecomp/misc/coord.h> 
     6#include <libgeodecomp/misc/cudautil.h> 
    77#include <libgeodecomp/misc/fixedcoord.h> 
    88 
     
    2222 
    2323} 
    24  
    25 // fixme: ugly hack for compatibility with non-cuda builds 
    26 #ifndef __host__ 
    27 #define __host__ 
    28 #endif  
    29  
    30 #ifndef __device__ 
    31 #define __device__ 
    32 #endif  
    3324 
    3425#define DEFINE_FIELD_OFFSET(r, CELL_TYPE, t)                            \ 
  • src/testbed/performancetests/CMakeLists.txt

    r387 r413  
    66if(FEATURE_INTRINSICS) 
    77  # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") 
    8   add_executable(performancetests ${SOURCES}) 
     8  add_executable(performancetests main.cpp) 
    99  target_link_libraries(performancetests ${LOCAL_LIBGEODECOMP_LINK_LIB}) 
    1010endif() 
     11 
     12if(FEATURE_CUDA) 
     13  cuda_add_library(cudatests cudatests.cu) 
     14  target_link_libraries(performancetests cudatests) 
     15endif() 
  • src/testbed/performancetests/main.cpp

    r410 r413  
    33#include <iomanip> 
    44#include <iostream> 
     5#include <libgeodecomp/config.h> 
    56#include <libgeodecomp/io/simpleinitializer.h> 
    67#include <libgeodecomp/misc/cellapitraits.h> 
     
    1112#include <libgeodecomp/misc/linepointerupdatefunctor.h> 
    1213#include <libgeodecomp/misc/region.h> 
     14#include <libgeodecomp/misc/soaaccessor.h> 
    1315#include <libgeodecomp/misc/stencils.h> 
    1416#include <libgeodecomp/misc/updatefunctor.h> 
     
    10771079} 
    10781080 
     1081#ifdef LIBGEODECOMP_FEATURE_CUDA 
     1082void cudaTests(std::string revision, bool quick, int cudaDevice); 
     1083#endif 
     1084 
    10791085int main(int argc, char **argv) 
    10801086{ 
    1081     if (argc != 2) { 
    1082         std::cerr << "usage: " << argv[0] << " REVISION\n"; 
     1087    if ((argc < 3) || (argc > 4)) { 
     1088        std::cerr << "usage: " << argv[0] << "[-q,--quick] REVISION CUDA_DEVICE\n"; 
    10831089        return 1; 
    10841090    } 
    10851091 
    1086     revision = argv[1]; 
     1092    bool quick = false; 
     1093    int revIndex = 1; 
     1094    if (argc == 4) { 
     1095        if ((std::string(argv[1]) == "-q") || 
     1096            (std::string(argv[1]) == "--quick")) { 
     1097            quick = true; 
     1098        } 
     1099        revIndex = 2; 
     1100    } 
     1101    revision = argv[revIndex]; 
     1102    std::stringstream s; 
     1103    s << argv[revIndex + 1]; 
     1104    int cudaDevice; 
     1105    s >> cudaDevice; 
    10871106 
    10881107    std::cout << "#rev              ; date                 ; host            ; device                                          ; order   ; family          ; species ; dimensions              ; perf        ; unit\n"; 
    10891108 
    1090     evaluate(RegionInsert(), Coord<3>( 128,  128,  128)); 
    1091     evaluate(RegionInsert(), Coord<3>( 512,  512,  512)); 
    1092     evaluate(RegionInsert(), Coord<3>(2048, 2048, 2048)); 
    1093  
    1094     evaluate(RegionIntersect(), Coord<3>( 128,  128,  128)); 
    1095     evaluate(RegionIntersect(), Coord<3>( 512,  512,  512)); 
    1096     evaluate(RegionIntersect(), Coord<3>(2048, 2048, 2048)); 
    1097  
    1098     evaluate(CoordEnumerationVanilla(), Coord<3>( 128,  128,  128)); 
    1099     evaluate(CoordEnumerationVanilla(), Coord<3>( 512,  512,  512)); 
    1100     evaluate(CoordEnumerationVanilla(), Coord<3>(2048, 2048, 2048)); 
    1101  
    1102     evaluate(CoordEnumerationBronze(), Coord<3>( 128,  128,  128)); 
    1103     evaluate(CoordEnumerationBronze(), Coord<3>( 512,  512,  512)); 
    1104     evaluate(CoordEnumerationBronze(), Coord<3>(2048, 2048, 2048)); 
    1105  
    1106     evaluate(CoordEnumerationGold(), Coord<3>( 128,  128,  128)); 
    1107     evaluate(CoordEnumerationGold(), Coord<3>( 512,  512,  512)); 
    1108     evaluate(CoordEnumerationGold(), Coord<3>(2048, 2048, 2048)); 
    1109  
    1110     SuperVector<Coord<3> > sizes; 
    1111     sizes << Coord<3>(22, 22, 22) 
    1112           << Coord<3>(64, 64, 64) 
    1113           << Coord<3>(68, 68, 68) 
    1114           << Coord<3>(106, 106, 106) 
    1115           << Coord<3>(128, 128, 128) 
    1116           << Coord<3>(150, 150, 150) 
    1117           << Coord<3>(512, 512, 32) 
    1118           << Coord<3>(518, 518, 32) 
    1119           << Coord<3>(1024, 1024, 32) 
    1120           << Coord<3>(1026, 1026, 32); 
    1121  
    1122     for (int i = 0; i < sizes.size(); ++i) { 
    1123         evaluate(Jacobi3DVanilla(), sizes[i]); 
    1124     } 
    1125  
    1126     for (int i = 0; i < sizes.size(); ++i) { 
    1127         evaluate(Jacobi3DSSE(), sizes[i]); 
    1128     } 
    1129  
    1130     for (int i = 0; i < sizes.size(); ++i) { 
    1131         evaluate(Jacobi3DClassic(), sizes[i]); 
    1132     } 
    1133  
    1134     for (int i = 0; i < sizes.size(); ++i) { 
    1135         evaluate(Jacobi3DFixedHood(), sizes[i]); 
    1136     } 
    1137  
    1138     for (int i = 0; i < sizes.size(); ++i) { 
    1139         evaluate(Jacobi3DStreakUpdate(), sizes[i]); 
    1140     } 
    1141  
    1142     for (int i = 0; i < sizes.size(); ++i) { 
    1143         evaluate(Jacobi3DStreakUpdateFunctor(), sizes[i]); 
    1144     } 
     1109    // evaluate(RegionInsert(), Coord<3>( 128,  128,  128)); 
     1110    // evaluate(RegionInsert(), Coord<3>( 512,  512,  512)); 
     1111    // evaluate(RegionInsert(), Coord<3>(2048, 2048, 2048)); 
     1112 
     1113    // evaluate(RegionIntersect(), Coord<3>( 128,  128,  128)); 
     1114    // evaluate(RegionIntersect(), Coord<3>( 512,  512,  512)); 
     1115    // evaluate(RegionIntersect(), Coord<3>(2048, 2048, 2048)); 
     1116 
     1117    // evaluate(CoordEnumerationVanilla(), Coord<3>( 128,  128,  128)); 
     1118    // evaluate(CoordEnumerationVanilla(), Coord<3>( 512,  512,  512)); 
     1119    // evaluate(CoordEnumerationVanilla(), Coord<3>(2048, 2048, 2048)); 
     1120 
     1121    // evaluate(CoordEnumerationBronze(), Coord<3>( 128,  128,  128)); 
     1122    // evaluate(CoordEnumerationBronze(), Coord<3>( 512,  512,  512)); 
     1123    // evaluate(CoordEnumerationBronze(), Coord<3>(2048, 2048, 2048)); 
     1124 
     1125    // evaluate(CoordEnumerationGold(), Coord<3>( 128,  128,  128)); 
     1126    // evaluate(CoordEnumerationGold(), Coord<3>( 512,  512,  512)); 
     1127    // evaluate(CoordEnumerationGold(), Coord<3>(2048, 2048, 2048)); 
     1128 
     1129    // SuperVector<Coord<3> > sizes; 
     1130    // sizes << Coord<3>(22, 22, 22) 
     1131    //       << Coord<3>(64, 64, 64) 
     1132    //       << Coord<3>(68, 68, 68) 
     1133    //       << Coord<3>(106, 106, 106) 
     1134    //       << Coord<3>(128, 128, 128) 
     1135    //       << Coord<3>(150, 150, 150) 
     1136    //       << Coord<3>(512, 512, 32) 
     1137    //       << Coord<3>(518, 518, 32) 
     1138    //       << Coord<3>(1024, 1024, 32) 
     1139    //       << Coord<3>(1026, 1026, 32); 
     1140 
     1141    // for (int i = 0; i < sizes.size(); ++i) { 
     1142    //     evaluate(Jacobi3DVanilla(), sizes[i]); 
     1143    // } 
     1144 
     1145    // for (int i = 0; i < sizes.size(); ++i) { 
     1146    //     evaluate(Jacobi3DSSE(), sizes[i]); 
     1147    // } 
     1148 
     1149    // for (int i = 0; i < sizes.size(); ++i) { 
     1150    //     evaluate(Jacobi3DClassic(), sizes[i]); 
     1151    // } 
     1152 
     1153    // for (int i = 0; i < sizes.size(); ++i) { 
     1154    //     evaluate(Jacobi3DFixedHood(), sizes[i]); 
     1155    // } 
     1156 
     1157    // for (int i = 0; i < sizes.size(); ++i) { 
     1158    //     evaluate(Jacobi3DStreakUpdate(), sizes[i]); 
     1159    // } 
     1160 
     1161    // for (int i = 0; i < sizes.size(); ++i) { 
     1162    //     evaluate(Jacobi3DStreakUpdateFunctor(), sizes[i]); 
     1163    // } 
     1164 
     1165#ifdef LIBGEODECOMP_FEATURE_CUDA 
     1166    cudaTests(revision, quick, cudaDevice); 
     1167#endif 
    11451168 
    11461169    return 0;