Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:49:16

0001 /**
0002 SCU_test.cc
0003 ============
0004 
0005 ::
0006 
0007     ~/o/sysrap/tests/SCU_test.sh 
0008 
0009 
0010 **/
0011 #include <iostream>
0012 #include <iomanip>
0013 #include <vector>
0014 #include <cassert>
0015 
0016 #include "SCU.h"
0017 
0018 struct SCU_test
0019 {
0020     static int ConfigureLaunch2D(); 
0021 
0022     template<typename T>
0023     static void FillVec( std::vector<T>& vec, int N );
0024  
0025     template<typename T>
0026     static int Compare( const T* arr0, const T* arr1, size_t num_item );
0027  
0028    static int UploadArray_DownloadArray();
0029     static int UploadBuf_DownloadBuf();
0030     static int Buf();
0031     static int FreeBuf();
0032 }; 
0033 
0034 
0035 inline int SCU_test::ConfigureLaunch2D()
0036 {
0037     std::cout << "[ SCU_test::ConfigureLaunch2D " << std::endl ;
0038     dim3 numBlocks ; 
0039     dim3 threadsPerBlock ; 
0040 
0041     int32_t width = 1024 ; 
0042     int32_t height = 768 ; 
0043     SCU::ConfigureLaunch2D(numBlocks, threadsPerBlock, width, height );   
0044 
0045     std::cout 
0046         << " width " << width
0047         << " height " << height
0048         << " numBlocks " << numBlocks   
0049         << " threadsPerBlock " << threadsPerBlock
0050         << std::endl
0051         ;
0052     std::cout << "] SCU_test::ConfigureLaunch2D " << std::endl ;
0053     return 0 ; 
0054 }
0055 
0056 
0057 template<typename T>
0058 inline void SCU_test::FillVec( std::vector<T>& vec, int N  )
0059 {
0060     vec.resize(N); 
0061     for(int i=0 ; i < N ; i++ ) vec[i] = T(i) ; 
0062 }
0063 
0064 
0065 template<typename T>
0066 inline int SCU_test::Compare( const T* arr0, const T* arr1, size_t num_item )
0067 {
0068     int deviant = 0 ; 
0069     for(size_t i=0 ; i < num_item ; i++)
0070     {
0071         bool expect = arr0[i] == arr1[i] ; 
0072         if(!expect) deviant += 1 ;  
0073         if(!expect || i % 100 == 0)
0074         std::cout 
0075            << "  i " << std::setw(6) << i 
0076            << " arr0 " << std::setw(10) << std::setprecision(4) << std::fixed << arr0[i] 
0077            << " arr1 " << std::setw(10) << std::setprecision(4) << std::fixed << arr1[i]
0078            << std::endl 
0079            ; 
0080         assert(expect); 
0081     } 
0082     return deviant ; 
0083 }
0084 
0085 
0086 inline int SCU_test::UploadArray_DownloadArray()
0087 {
0088     std::cout << "[ SCU_test::UploadArray_DownloadArray " << std::endl ;
0089 
0090     std::vector<float> vec ;
0091     FillVec<float>(vec, 1000); 
0092 
0093     const float* arr0 = vec.data() ;  
0094     size_t num_item = vec.size() ; 
0095 
0096     float* d_arr = SCU::UploadArray<float>( arr0, num_item ); 
0097     const float* arr1 = SCU::DownloadArray<float>( d_arr, num_item ); 
0098 
0099     int deviant = Compare( arr0, arr1, num_item );  
0100 
0101     std::cout << "] SCU_test::UploadArray_DownloadArray " << std::endl ;
0102     return deviant ; 
0103 }
0104 
0105 
0106 inline int SCU_test::UploadBuf_DownloadBuf()
0107 {
0108     std::cout << "[ SCU_test::UploadBuf_DownloadBuf " << std::endl ;
0109 
0110     std::vector<float> vec ;
0111     FillVec<float>(vec, 1000); 
0112 
0113     const float* arr0 = vec.data() ;  
0114     size_t num_item = vec.size() ; 
0115 
0116     SCU_Buf<float> buf = SCU::UploadBuf<float>( arr0, num_item, "arr0" ); 
0117     const float* arr1 = SCU::DownloadBuf<float>( buf ); 
0118     std::cout << " buf.desc " << buf.desc() << std::endl ;
0119 
0120 
0121     int deviant = Compare( arr0, arr1, num_item );  
0122     std::cout << "] SCU_test::UploadBuf_DownloadBuf " << std::endl ;
0123     return deviant ; 
0124 }
0125 
0126 inline int SCU_test::Buf()
0127 {
0128     SCU_Buf<float> buf = {} ; 
0129     std::cout << " buf.desc " << buf.desc() << std::endl ;
0130     return 0 ; 
0131 }
0132 
0133 inline int SCU_test::FreeBuf()
0134 {
0135     std::vector<float> vec ;
0136     FillVec(vec, 1000); 
0137 
0138     SCU_Buf<float> buf = SCU::UploadBuf<float>( vec.data(), vec.size(), "arr0" ); 
0139     std::cout << "SCU_test::FreeBuf.0  buf.desc " << buf.desc() << std::endl ;
0140 
0141     //SCU::FreeBuf(buf) ; 
0142     buf.free(); 
0143 
0144     std::cout << "SCU_test::FreeBuf.1  buf.desc " << buf.desc() << std::endl ;
0145 
0146     return 0 ; 
0147 }
0148 
0149 
0150 int main()
0151 {
0152     int rc = 0 ; 
0153     rc += SCU_test::FreeBuf(); 
0154     /*
0155     rc += SCU_test::Buf(); 
0156     rc += SCU_test::UploadBuf_DownloadBuf(); 
0157     rc += SCU_test::UploadArray_DownloadArray(); 
0158     rc += SCU_test::ConfigureLaunch2D(); 
0159     */
0160     return rc ; 
0161 }