v2 added support for unpinned async memcpy

[ROCm/hip commit: 18c0e69f51]
Bu işleme şunda yer alıyor:
Aditya Atluri
2016-03-08 03:19:50 -06:00
ebeveyn bf3d3a9745
işleme ab68dc4240
+24 -7
Dosyayı Görüntüle
@@ -2483,6 +2483,8 @@ hipError_t hipMemcpyAsync(void* dst, const void* src, size_t sizeBytes, hipMemcp
stream = ihipSyncAndResolveStream(stream);
bool trueAsync = true;
#if USE_AM_TRACKER
if (stream) {
ihipDevice_t *device = stream->getDevice();
@@ -2501,13 +2503,17 @@ hipError_t hipMemcpyAsync(void* dst, const void* src, size_t sizeBytes, hipMemcp
memcpy(dst, src, sizeBytes);
} else {
if (kind == hipMemcpyDefault) {
hc::accelerator acc;
hc::AmPointerInfo dstAm(NULL, NULL, 0, acc, 0, 0);
hc::AmPointerInfo srcAm(NULL, NULL, 0, acc, 0, 0);
am_status_t statDst = hc::am_memtracker_getinfo(&dstAm, dst);
am_status_t statSrc = hc::am_memtracker_getinfo(&srcAm, src);
hc::accelerator acc;
hc::AmPointerInfo dstAm(NULL, NULL, 0, acc, 0, 0);
hc::AmPointerInfo srcAm(NULL, NULL, 0, acc, 0, 0);
am_status_t statDst = hc::am_memtracker_getinfo(&dstAm, dst);
am_status_t statSrc = hc::am_memtracker_getinfo(&srcAm, src);
if(dstAm._appAllocationFlags != 1 || srcAm._appAllocationFlags != 1){
trueAsync = false;
}
if (kind == hipMemcpyDefault) {
if(statDst == AM_SUCCESS && statSrc == AM_SUCCESS){
if(dstAm._devicePointer != NULL){
if(srcAm._devicePointer != NULL){
@@ -2534,7 +2540,10 @@ hipError_t hipMemcpyAsync(void* dst, const void* src, size_t sizeBytes, hipMemcp
hsa_signal_store_relaxed(ihip_signal->_hsa_signal, 1);
ihipCommand_t copyType;
if ((kind == hipMemcpyHostToDevice) || (kind == hipMemcpyDeviceToDevice)) {
if (kind == hipMemcpyHostToDevice ){
copyType = ihipCommandCopyH2D;
}else if(kind == hipMemcpyDeviceToDevice) {
copyType = ihipCommandCopyH2D;
} else if (kind == hipMemcpyDeviceToHost) {
copyType = ihipCommandCopyD2H;
@@ -2543,7 +2552,11 @@ hipError_t hipMemcpyAsync(void* dst, const void* src, size_t sizeBytes, hipMemcp
copyType = ihipCommandCopyD2H;
}
#if USE_ROCR_V2
if(trueAsync == true){
hsa_signal_t depSignal;
int depSignalCnt = stream->copyCommand(ihip_signal, &depSignal, copyType);
@@ -2566,6 +2579,10 @@ hipError_t hipMemcpyAsync(void* dst, const void* src, size_t sizeBytes, hipMemcp
// TODO-stream - does async-copy fall back to sync if input pointers are not pinned?
e = hipErrorInvalidValue;
}
}
else {
ihipSyncCopy(stream, dst, src, sizeBytes, kind);
}
}
} else {
e = hipErrorInvalidValue;