1 #ifndef HAWAII_SGEMMMSPLITKERNEL 2 #define HAWAII_SGEMMMSPLITKERNEL 3 4 #include "gcn_sgemm.h" 5 6 7 class clBlashawaiiSgemmSplitKernelFunctor : public clblasSgemmFunctorGCN 8 { 9 public: 10 struct Variant 11 { 12 const char * variantName; 13 const char * kernel_name[4] ; //order is main, row, column, single 14 const char * source ; // the kernel source (shall be unique) 15 const char * build_options; 16 const char * bin ; 17 size_t bin_size ; 18 clblasTranspose transA ; // 19 clblasTranspose transB ; // 20 unsigned divK ; // Required divisor of N (use 1 when N can be of any value) 21 size_t ls[2] ; // Local size (the work-group size) 22 size_t bwi[2] ; // Block size work-item: Number of elements calculated by each work items 23 // So basically each kernel is computing a block of 24 // (ls[0]*bwi[0]) x (ls[1]*bwi[1]) 25 // elements of C. 26 std::string mult; 27 28 } ; 29 30 31 private: // Constructor & Destructor 32 33 clBlashawaiiSgemmSplitKernelFunctor(Args & args, const Variant * variant, cl_int & err) ; 34 cl_int KernelsLaunch(cl_command_queue queue, cl_kernel Kernel[4], Args &args); 35 const Variant * m_variantSplit ; // Pointer to a 'const static' object describing the kernel variant. 36 37 public: 38 39 // Provide a suitable hawaii_sgemmChannelConflict for the specified args 40 // or NULL if none 41 static clBlashawaiiSgemmSplitKernelFunctor * provide(clblasSgemmFunctor::Args & args, char* DevName) ; 42 virtual clblasStatus execute(Args &args) ; 43 44 }; 45 46 #endif