* first cut of the header implementation of cooperative group feature
* add diclarations for device library functions
* fixed various compile time issues in the CG headers
* enabled copy construction and copy assignment
* fixed a minor bug related to conditional compilation macro
* fixed few more CG constructor issues and added a unit testcase
* fixed typo
* extended unit testcase
* compute size of partitioned CG from mask
* bit of code refactoring
* removed boilerplate code
* fixed few of the review comments by Brian
* Changes to the sigantures of few grid and multi-grid related OCKL functions
* changes to declarations of OCKL functions related to CG feature
* removed all the block level support as it is not planned for 2.9
* Have taken care of review comments by Brian
* Have taken care of review comments by Brian
* removed unused functions which were initially intended to use in block level cg support
- It's a common mistake by assuming 1 << shamt would be promoted to
64-bit, if shamt is a 64-bit integer. That's not the case. Replace
that left shift to a 64-bit one to ensure it won't fall into undefined
behavior.
- Fix the host-side implementation as well for device function testing.
Move remaining function definitions from device_util.cpp to hip_runtime.h header. We can now remove the static library completely as device_util.cpp was the last file part of target hip::hip_device .
previous version return a long long valus *as* double, hence we may get the wrong result.
this also affect atomicAdd(double * ...), which use long long pointer to mimic double pointer.
Signed-off-by: carlushuang <carlus.huang@amd.com>
Replace implementation of __any and __all functions using OCKL functions and replaced __ballot implementation to use llvm intrinsic llvm.amdgcn.icmp.i32 instead of calls to __activelanemask_v4_b64_b1 which is not convergent.
For now, guard the __to_local function for device compile only since a local pointer should be same size as unsigned int on GPU compile. Also change to void* instead of char*.
Move all Integer Intrinsics, device_functions.cpp definitions and HIP specific device functions into HIP headers. Implement the device functions using llvm_intrinsics and device-libs functions instead of calling hc::__* functions. Remove device_functions.cpp since everything is now defined in header.