SWDEV-255979 - Added support of __managed__ static variable
Change-Id: I9d5cbbecc8c19ec38a95c94ab4130465ba76c102
[ROCm/hip commit: 995e6336c6]
This commit is contained in:
zatwierdzone przez
Anusha Godavarthy Surya
rodzic
db0c3fdaaf
commit
39c608e98d
@@ -0,0 +1,84 @@
|
||||
#include <hip/hip_runtime.h>
|
||||
#include <math.h>
|
||||
#include "test_common.h"
|
||||
|
||||
//Enable test when compiler support is available in mainline
|
||||
/* HIT_START
|
||||
* BUILD: %t %s ../../test_common.cpp EXCLUDE_HIP_PLATFORM amd
|
||||
* HIT_END
|
||||
*/
|
||||
#define N 1048576
|
||||
__managed__ float A[N]; // Accessible by ALL CPU and GPU functions !!!
|
||||
__managed__ float B[N];
|
||||
__managed__ int x = 0;
|
||||
|
||||
__global__ void add()
|
||||
{
|
||||
int index = blockIdx.x * blockDim.x + threadIdx.x;
|
||||
int stride = blockDim.x * gridDim.x;
|
||||
for (int i = index; i < N; i += stride)
|
||||
B[i] = A[i] + B[i];
|
||||
}
|
||||
|
||||
__global__ void GPU_func() {
|
||||
x++;
|
||||
}
|
||||
|
||||
bool managedSingleGPUTest() {
|
||||
bool testResult = true;
|
||||
|
||||
for (int i = 0; i < N; i++) {
|
||||
A[i] = 1.0f;
|
||||
B[i] = 2.0f;
|
||||
}
|
||||
|
||||
int blockSize = 256;
|
||||
int numBlocks = (N + blockSize - 1) / blockSize;
|
||||
dim3 dimGrid(numBlocks, 1, 1);
|
||||
dim3 dimBlock(blockSize, 1, 1);
|
||||
hipLaunchKernelGGL(add, dimGrid, dimBlock, 0, 0);
|
||||
|
||||
hipDeviceSynchronize();
|
||||
|
||||
float maxError = 0.0f;
|
||||
for (int i = 0; i < N; i++)
|
||||
maxError = fmax(maxError, fabs(B[i]-3.0f));
|
||||
|
||||
if(maxError == 0.0f) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool managedMultiGPUTest() {
|
||||
int numDevices = 0;
|
||||
hipGetDeviceCount(&numDevices);
|
||||
|
||||
for (int i = 0; i < numDevices; i++) {
|
||||
hipSetDevice(i);
|
||||
GPU_func<<< 1, 1 >>>( );
|
||||
hipDeviceSynchronize();
|
||||
}
|
||||
if(x == numDevices) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
bool testStatus = true, OverAllStatus = true;
|
||||
testStatus = managedSingleGPUTest();
|
||||
if (!testStatus) {
|
||||
printf("managed keyword Single GPU Test failed\n");
|
||||
OverAllStatus = false;
|
||||
}
|
||||
testStatus = managedMultiGPUTest();
|
||||
if (!testStatus) {
|
||||
printf("managed keyword Multi GPU Test failed\n");
|
||||
OverAllStatus = false;
|
||||
}
|
||||
if (!OverAllStatus) {
|
||||
failed("");
|
||||
}
|
||||
passed();
|
||||
}
|
||||
Reference in New Issue
Block a user