Ejemplo n.º 1
0
LIBXSMM_API
void libxsmm_generator_pgemm_kernel( libxsmm_generated_code*          io_generated_code,
                                     const libxsmm_pgemm_descriptor*  i_packed_pgemm_desc,
                                     int                              i_arch, ... ) {
  const char *const cpuid = libxsmm_cpuid_name( i_arch );

  /* add instruction set mismatch check to code, header */
  libxsmm_generator_isa_check_header( io_generated_code, cpuid );

  /* generate kernel */
  if ( LIBXSMM_X86_AVX <= i_arch ) {
#if defined(GARBAGE_PARAMETERS)
    unsigned int iunroll, junroll, loopi, loopj;
    va_list args;
    va_start(args, i_arch);
    iunroll = va_arg(args, unsigned int);
    junroll = va_arg(args, unsigned int);
    loopi = va_arg(args, unsigned int);
    loopj = va_arg(args, unsigned int);
    va_end(args);
    libxsmm_generator_packed_gemm_avx_avx512_kernel( io_generated_code, i_packed_pgemm_desc, cpuid, iunroll, junroll, loopi, loopj );
#else
    libxsmm_generator_packed_gemm_avx_avx512_kernel( io_generated_code, i_packed_pgemm_desc, cpuid );
#endif
  } else { /* TODO fix this error */
Ejemplo n.º 2
0
/* @TODO change int based architecture value */
LIBXSMM_API
void libxsmm_generator_transpose_kernel( libxsmm_generated_code*                        io_generated_code,
                                         const libxsmm_trans_descriptor*            i_trans_desc,
                                         const char*                                    i_arch ) {
  /* add instruction set mismatch check to code, header */
  libxsmm_generator_isa_check_header( io_generated_code, i_arch );

  /* generate kernel */
  if ( (strcmp(i_arch, "skx") == 0) ||
       (strcmp(i_arch, "knm") == 0) ||
       (strcmp(i_arch, "knl") == 0) ||
       (strcmp(i_arch, "hsw") == 0) ||
       (strcmp(i_arch, "snb") == 0)    ) {
    libxsmm_generator_transpose_avx_avx512_kernel( io_generated_code, i_trans_desc, i_arch );
  } else {
    /* TODO fix this error */
    LIBXSMM_HANDLE_ERROR( io_generated_code, LIBXSMM_ERR_ARCH );
    return;
  }

  /* add instruction set mismatch check to code, footer */
  libxsmm_generator_isa_check_footer( io_generated_code, i_arch );
}