File indexing completed on 2026-04-09 07:49:16
0001
0002
0003
0004
0005
0006
0007
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
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
0156
0157
0158
0159
0160 return rc ;
0161 }