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