[Beignet] [PATCH 2/2] GBE: warning when the GEN binary version mismatch.

Song, Ruiling ruiling.song at intel.com
Wed Jun 22 02:30:32 UTC 2016


>    };
> -
> +#define GEN_BINARY_VERSION  1
>    static const unsigned char
> gen_binary_header[GBHI_MAX][GEN_BINARY_HEADER_LENGTH]= \
> -                                             {{0, 'G','E', 'N', 'C', 'B', 'Y', 'T'},
> -                                              {0, 'G','E', 'N', 'C', 'I', 'V', 'B'},
> -                                              {0, 'G','E', 'N', 'C', 'H', 'S', 'W'},
> -                                              {0, 'G','E', 'N', 'C', 'C', 'H', 'V'},
> -                                              {0, 'G','E', 'N', 'C', 'B', 'D', 'W'},
> -                                              {0, 'G','E', 'N', 'C', 'S', 'K', 'L'},
> -                                              {0, 'G','E', 'N', 'C', 'B', 'X', 'T'}
> +                                             {{GEN_BINARY_VERSION, 'G','E', 'N', 'C', 'B', 'Y', 'T'},
> +                                              {GEN_BINARY_VERSION, 'G','E', 'N', 'C', 'I', 'V', 'B'},
> +                                              {GEN_BINARY_VERSION, 'G','E', 'N', 'C', 'H', 'S', 'W'},
> +                                              {GEN_BINARY_VERSION, 'G','E', 'N', 'C', 'C', 'H', 'V'},
> +                                              {GEN_BINARY_VERSION, 'G','E', 'N', 'C', 'B', 'D', 'W'},
> +                                              {GEN_BINARY_VERSION, 'G','E', 'N', 'C', 'S', 'K', 'L'},
> +                                              {GEN_BINARY_VERSION, 'G','E', 'N', 'C', 'B', 'X', 'T'}
>                                                };
> 
>  #define FILL_GEN_HEADER(binary, index)  do {int i = 0; do {*(binary+i) =
> gen_binary_header[index][i]; i++; }while(i <
> GEN_BINARY_HEADER_LENGTH);}while(0)
> @@ -258,10 +258,16 @@ namespace gbe {
>    static bool genHeaderCompare(const unsigned char *BufPtr,
> GEN_BINARY_HEADER_INDEX index)
>    {
>      bool matched = true;
> -    for (int i =0; i < GEN_BINARY_HEADER_LENGTH; ++i)
> +    for (int i = 1; i < GEN_BINARY_HEADER_LENGTH; ++i)
>      {
>        matched = matched && (BufPtr[i] == gen_binary_header[index][i]);
>      }
> +    if(matched) {
> +      if(BufPtr[0] != gen_binary_header[index][0]) {
> +        std::cout << "Beignet binary format have been changed, please generate
> binary again.\n";
> +        matched = false;
> +      }
> +    }
>      return matched;
>    }
> 
> diff --git a/backend/src/gbe_bin_generater.cpp
> b/backend/src/gbe_bin_generater.cpp
> index 7ed353a..8e42891 100644
> --- a/backend/src/gbe_bin_generater.cpp
> +++ b/backend/src/gbe_bin_generater.cpp
> @@ -196,8 +196,8 @@ void program_build_instance::serialize_program(void)
> throw(int)
> 
>        if(gen_pci_id){
>          //add header to differeciate from llvm bitcode binary.
> -        // (5 bytes: 1 byte for binary type, 4 byte for bc code, 'GENC' is for gen
> binary.)
> -        char gen_header[6] = "\0GENC";
> +        // (5 bytes: 1 byte for binary version, 4 byte for bc code, 'GENC' is for gen
> binary.)
> +        char gen_header[6] = "\1GENC";

Can we move this gen_header definition to backend/src/backend/program.h? this file can be seen by both runtime and backend.
So, all the references just use the magic string or number in program.h
It would make binary_version easy to maintain.



More information about the Beignet mailing list