Changes to HIP to cope with Promote-free HCC

Squashed commit of the following:

commit c111b5bd10d7c2a5b0b1ad8b07f6e81185b47b39
Author: Wen-Heng (Jack) Chung <whchung@gmail.com>
Date:   Sat Mar 4 17:06:46 2017 +0800

    Use __device__ for all variables and functions to be used in kernel path

    Abolish __device and adopt [[hc]] in HIP implementation, so __device__ can be
    used on all HIP applications, no matter they are variables or functions.

    Change-Id: I20ca25857ce3bc3e42a5ebf65cafea2c8492f4c7

commit 30c0e4e4701bbf6bd9a7182e0320a71ff73d3a83
Author: Wen-Heng (Jack) Chung <whchung@gmail.com>
Date:   Thu Mar 2 12:14:11 2017 +0800

    XXX FIXME get around LDS spills caused in Promote-free HCC

    hipDynamicShared2 uses all 64KB of LDS for computation. But in Promote-free HCC
    there are cases where LDS spills would occur, which would make the test case to
    hang.

    In this workaround commit we reduce the size of dynamic LDS used to get around
    this known issue, and will revert this commit when LDS spills are resolved in
    HCC.

    Change-Id: If648b36200a4f9143951a8129192bcb7ed0bef5e

commit e803173be2d73e2f132a7ff7f61e7a20b4083d34
Author: Wen-Heng (Jack) Chung <whchung@gmail.com>
Date:   Wed Mar 1 21:41:41 2017 +0800

    Fix math functions which take pointer arguments

    Change-Id: I332c997e640edbc44824691e2a9434c6b3dadefa

commit de590c469e213c42090ff83dbd060f25bb1d6047
Author: Wen-Heng (Jack) Chung <whchung@gmail.com>
Date:   Wed Mar 1 18:38:54 2017 +0800

    Changes to cope with Promote-free HCC

    - abolish usage of address_space GNU attribute
    - use __device in file-scope global variables which would be accessed by GPU kernels
    - temporarily disable some math functions which take pointer arguments

    Change-Id: I730311dee848e20e763e35cd3980317fce0dce0d

Change-Id: I1f6b970b53b9401eeaaab08f04a7b9fed0fb8cf0
Cette révision appartient à :
Wen-Heng (Jack) Chung
2017-03-08 01:32:59 +08:00
Parent 5bf174fc20
révision 0005dd5f66
8 fichiers modifiés avec 13 ajouts et 20 suppressions
+3 -4
Voir le fichier
@@ -250,7 +250,7 @@ __device__ float __shfl_xor(float input, int lane_mask, int width);
__host__ __device__ int min(int arg1, int arg2);
__host__ __device__ int max(int arg1, int arg2);
__device__ __attribute__((address_space(3))) void* __get_dynamicgroupbaseptr();
__device__ void* __get_dynamicgroupbaseptr();
/**
@@ -418,10 +418,9 @@ do {\
// Macro to replace extern __shared__ declarations
// to local variable definitions
#define HIP_DYNAMIC_SHARED(type, var) \
__attribute__((address_space(3))) type* var = \
(__attribute__((address_space(3))) type*)__get_dynamicgroupbaseptr(); \
type* var = (type*)__get_dynamicgroupbaseptr(); \
#define HIP_DYNAMIC_SHARED_ATTRIBUTE __attribute__((address_space(3)))
#define HIP_DYNAMIC_SHARED_ATTRIBUTE
#endif // __HCC__
+1 -1
Voir le fichier
@@ -47,7 +47,7 @@ THE SOFTWARE.
*/
// _restrict is supported by the compiler
#define __shared__ tile_static
#define __constant__ __attribute__((address_space(1)))
#define __constant__ __attribute__((hc))
#else
// Non-HCC compiler
+2 -2
Voir le fichier
@@ -41,8 +41,8 @@ struct holder32Bit {
};
} __attribute__((aligned(4)));
struct holder64Bit hold64;
struct holder32Bit hold32;
__device__ struct holder64Bit hold64;
__device__ struct holder32Bit hold32;
__device__ float __double2float_rd(double x)
{
+3 -3
Voir le fichier
@@ -34,8 +34,8 @@ THE SOFTWARE.
This is the best place to put them because the device
global variables need to be initialized at the start.
*/
__attribute__((address_space(1))) char gpuHeap[SIZE_OF_HEAP];
__attribute__((address_space(1))) uint32_t gpuFlags[NUM_PAGES];
__device__ char gpuHeap[SIZE_OF_HEAP];
__device__ uint32_t gpuFlags[NUM_PAGES];
__device__ void *__hip_hc_malloc(size_t size)
{
@@ -1083,7 +1083,7 @@ __host__ __device__ int max(int arg1, int arg2)
return (int)(hc::precise_math::fmax((float)arg1, (float)arg2));
}
__device__ __attribute__((address_space(3))) void* __get_dynamicgroupbaseptr()
__device__ void* __get_dynamicgroupbaseptr()
{
return hc::get_dynamic_group_segment_base_pointer();
}
+1 -1
Voir le fichier
@@ -31,7 +31,7 @@ struct hipHalfHolder{
#define HINF 65504
static struct hipHalfHolder __hInfValue = {HINF};
__device__ static struct hipHalfHolder __hInfValue = {HINF};
__device__ __half __hadd(__half a, __half b) {
return a + b;
+2 -1
Voir le fichier
@@ -202,7 +202,8 @@ __device__ long long int llroundf(float x)
int y = hc::precise_math::roundf(x);
long long int z = y;
return z;
}__device__ float log10f(float x)
}
__device__ float log10f(float x)
{
return hc::precise_math::log10f(x);
}
-7
Voir le fichier
@@ -31,15 +31,8 @@ THE SOFTWARE.
#define NUM 1024
#define SIZE 1024*4
#ifdef __HIP_PLATFORM_HCC__
__attribute__((address_space(1))) int globalIn[NUM];
__attribute__((address_space(1))) int globalOut[NUM];
#endif
#ifdef __HIP_PLATFORM_NVCC__
__device__ int globalIn[NUM];
__device__ int globalOut[NUM];
#endif
__global__ void Assign(hipLaunchParm lp, int* Out)
{
+1 -1
Voir le fichier
@@ -29,7 +29,7 @@ THE SOFTWARE.
#include "hip/hip_runtime.h"
#include "test_common.h"
#define LEN 16*1024
#define LEN 8*1024
#define SIZE LEN*4
__global__ void vectorAdd(hipLaunchParm lp, float *Ad, float *Bd) {