cl_common.h 2.3 KB
Newer Older
L
liuruilong 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */

L
liuruilong 已提交
15 16
#pragma once

L
liuruilong 已提交
17
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
L
liuruilong 已提交
18

19 20 21 22 23 24 25 26 27 28 29 30
// Data type: pass one of macros on host: [CL_DTYPE_float, CL_DYPE_half]
#ifdef CL_DTYPE_float
#define CL_DTYPE float
#define CL_DTYPE_CHAR f
#endif

#ifdef CL_DTYPE_half
#define CL_DTYPE half
#define CL_DTYPE_CHAR h
#endif

// Note: macro name replacement need twice parser
Y
Yan Chunwei 已提交
31 32 33 34
#define GET_VEC_TYPE(type__, size__) type__##size__
#define VECTORIZED_TYPE(type__, size__) GET_VEC_TYPE(type__, size__)
#define CL_DTYPE4 VECTORIZED_TYPE(CL_DTYPE, 4)

35 36 37 38 39 40 41 42 43 44 45 46 47
#define _CONVERT_TYPE_TO(value, type) convert_##type(value)
#define CONVERT_TYPE_TO(value, type) _CONVERT_TYPE_TO(value, type)

#define _WRITE_IMG_TYPE(type_char, img, pos, value) \
  write_image##type_char(img, pos, value)
#define WRITE_IMG_TYPE(type_char, img, pos, value) \
  _WRITE_IMG_TYPE(type_char, img, pos, value)

#define _READ_IMG_TYPE(type_char, img, pos, sampler) \
  read_image##type_char(img, sampler, pos)
#define READ_IMG_TYPE(type_char, img, pos, sampler) \
  _READ_IMG_TYPE(type_char, img, pos, sampler)

Y
Yan Chunwei 已提交
48
inline CL_DTYPE activation(CL_DTYPE in
L
liuruilong 已提交
49
#ifdef PRELU
Y
Yan Chunwei 已提交
50 51
                           ,
                           CL_DTYPE prelu_alpha
L
liuruilong 已提交
52
#endif
Y
Yan Chunwei 已提交
53 54
                           ) {
  CL_DTYPE output;
L
liuruilong 已提交
55
#ifdef PRELU
Y
Yan Chunwei 已提交
56
  output = select(prelu_alpha * in, in, in >= (CL_DTYPE)0);
L
liuruilong 已提交
57 58 59
#endif

#ifdef RELU
Y
Yan Chunwei 已提交
60
  output = fmax(in, (CL_DTYPE)0);
L
liuruilong 已提交
61 62 63
#endif
  return output;
}
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
inline CL_DTYPE4 activation_type4(CL_DTYPE4 in
#ifdef PRELU
                                  ,
                                  CL_DTYPE4 prelu_alpha
#endif
                                  ) {
  CL_DTYPE4 output;
#ifdef PRELU
  output = select(prelu_alpha * in, in, in >= (CL_DTYPE4)0.0);
#endif

#ifdef RELU
  output = fmax(in, (CL_DTYPE4)0);
#endif
  return output;
}