First implementation of hipCtxXXX functions
Change-Id: I4609cbe6bd90a1fff8655bff4fdd773864397aba
[ROCm/hip commit: 62d390da58]
This commit is contained in:
@@ -1053,6 +1053,16 @@ hipError_t hipInit(unsigned int flags) ;
|
||||
// TODO-ctx
|
||||
hipError_t hipCtxCreate(hipCtx_t *ctx, unsigned int flags, hipDevice_t device);
|
||||
|
||||
hipError_t hipCtxDestroy(hipCtx_t ctx);
|
||||
|
||||
hipError_t hipCtxPopCurrent(hipCtx_t* ctx);
|
||||
|
||||
hipError_t hipCtxPushCurrent(hipCtx_t ctx);
|
||||
|
||||
hipError_t hipCtxSetCurrent(hipCtx_t ctx);
|
||||
|
||||
hipError_t hipCtxGetCurrent(hipCtx_t* ctx);
|
||||
|
||||
|
||||
// TODO-ctx
|
||||
/**
|
||||
|
||||
@@ -161,6 +161,7 @@ typedef enum hipError_t {
|
||||
,hipErrorRuntimeOther ///< HSA runtime call other than memory returned error. Typically not seen in production systems.
|
||||
,hipErrorHostMemoryAlreadyRegistered ///< Produced when trying to lock a page-locked memory.
|
||||
,hipErrorHostMemoryNotRegistered ///< Produced when trying to unlock a non-page-locked memory.
|
||||
,hipErrorInvalidContext ///< Produced when input context is invalid.
|
||||
,hipErrorTbd ///< Marker that more error codes are needed.
|
||||
} hipError_t;
|
||||
|
||||
|
||||
@@ -87,3 +87,68 @@ hipError_t hipDriverGetVersion(int *driverVersion)
|
||||
|
||||
return ihipLogStatus(hipSuccess);
|
||||
}
|
||||
|
||||
hipError_t hipCtxDestroy(hipCtx_t ctx)
|
||||
{
|
||||
hipError_t e = hipSuccess;
|
||||
ihipCtx_t* currentCtx= ihipGetTlsDefaultCtx();
|
||||
if(currentCtx == ctx) {
|
||||
//need to destroy the ctx associated with calling thread
|
||||
tls_ctxStack.pop();
|
||||
}
|
||||
delete ctx; //As per CUDA docs , attempting to access ctx from those threads which has this ctx as current, will result in the error HIP_ERROR_CONTEXT_IS_DESTROYED.
|
||||
return ihipLogStatus(e);
|
||||
}
|
||||
|
||||
hipError_t hipCtxPopCurrent(hipCtx_t* ctx)
|
||||
{
|
||||
hipError_t e = hipSuccess;
|
||||
tls_ctxStack.pop();
|
||||
if(!tls_ctxStack.empty()) {
|
||||
*ctx= tls_ctxStack.top();
|
||||
}
|
||||
else {
|
||||
*ctx = nullptr;
|
||||
}
|
||||
|
||||
ihipSetTlsDefaultCtx(*ctx); //TOD0 - Shall check for NULL?
|
||||
return ihipLogStatus(e);
|
||||
}
|
||||
|
||||
hipError_t hipCtxPushCurrent(hipCtx_t ctx)
|
||||
{
|
||||
hipError_t e = hipSuccess;
|
||||
if(ctx != NULL) { //TODO- is this check needed?
|
||||
ihipSetTlsDefaultCtx(ctx);
|
||||
tls_ctxStack.push(ctx);
|
||||
}
|
||||
else {
|
||||
e = hipErrorInvalidContext;
|
||||
}
|
||||
return ihipLogStatus(e);
|
||||
}
|
||||
|
||||
hipError_t hipCtxGetCurrent(hipCtx_t* ctx)
|
||||
{
|
||||
hipError_t e = hipSuccess;
|
||||
|
||||
*ctx = ihipGetTlsDefaultCtx();
|
||||
if(*ctx == nullptr) {
|
||||
*ctx = NULL; //TODO - is it required? Can return nullptr?
|
||||
}
|
||||
return ihipLogStatus(e);
|
||||
}
|
||||
|
||||
hipError_t hipCtxSetCurrent(hipCtx_t ctx)
|
||||
{
|
||||
hipError_t e = hipSuccess;
|
||||
if(ctx == NULL) {
|
||||
tls_ctxStack.pop();
|
||||
}
|
||||
else {
|
||||
ihipSetTlsDefaultCtx(ctx);
|
||||
tls_ctxStack.push(ctx);
|
||||
}
|
||||
return ihipLogStatus(e);
|
||||
}
|
||||
|
||||
|
||||
@@ -31,9 +31,16 @@ int main(int argc, char *argv[])
|
||||
|
||||
hipDevice_t device;
|
||||
hipCtx_t ctx;
|
||||
hipCtx_t ctx1;
|
||||
|
||||
HIPCHECK(hipDeviceGetFromId(&device, 0));
|
||||
HIPCHECK(hipCtxCreate(&ctx, 0, device));
|
||||
HIPCHECK(hipCtxGetCurrent(&ctx1));
|
||||
|
||||
HIPCHECK(hipCtxPopCurrent(&ctx1));
|
||||
HIPCHECK(hipCtxGetCurrent(&ctx1));
|
||||
|
||||
HIPCHECK(hipCtxDestroy(ctx));
|
||||
|
||||
passed();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user