Use SpinLock instead of std::mutex.

- SpinLock uses atomics and is much faster then std::mutex
Signed-off-by: Mrozek, Michal <michal.mrozek@intel.com>

Change-Id: Ica443a3aef37a4831ace3b7d042831c6be451abf
This commit is contained in:
Mrozek, Michal
2019-06-03 10:50:21 +02:00
committed by sys_ocldev
parent 987264bdb4
commit 0d19aa2bfa
2 changed files with 9 additions and 7 deletions

View File

@@ -75,7 +75,7 @@ void *SVMAllocsManager::createSVMAlloc(size_t size, const SvmAllocationPropertie
if (size == 0)
return nullptr;
std::unique_lock<std::mutex> lock(mtx);
std::unique_lock<SpinLock> lock(mtx);
if (!memoryManager->isLocalMemorySupported()) {
return createZeroCopySvmAllocation(size, svmProperties);
} else {
@@ -84,14 +84,14 @@ void *SVMAllocsManager::createSVMAlloc(size_t size, const SvmAllocationPropertie
}
SvmAllocationData *SVMAllocsManager::getSVMAlloc(const void *ptr) {
std::unique_lock<std::mutex> lock(mtx);
std::unique_lock<SpinLock> lock(mtx);
return SVMAllocs.get(ptr);
}
void SVMAllocsManager::freeSVMAlloc(void *ptr) {
SvmAllocationData *svmData = getSVMAlloc(ptr);
if (svmData) {
std::unique_lock<std::mutex> lock(mtx);
std::unique_lock<SpinLock> lock(mtx);
if (svmData->gpuAllocation->getAllocationType() == GraphicsAllocation::AllocationType::SVM_ZERO_COPY) {
freeZeroCopySvmAllocation(svmData);
} else {
@@ -168,7 +168,7 @@ void SVMAllocsManager::freeSvmAllocationWithDeviceStorage(SvmAllocationData *svm
}
SvmMapOperation *SVMAllocsManager::getSvmMapOperation(const void *ptr) {
std::unique_lock<std::mutex> lock(mtx);
std::unique_lock<SpinLock> lock(mtx);
return svmMapOperations.get(ptr);
}
@@ -179,12 +179,12 @@ void SVMAllocsManager::insertSvmMapOperation(void *regionSvmPtr, size_t regionSi
svmMapOperation.offset = offset;
svmMapOperation.regionSize = regionSize;
svmMapOperation.readOnlyMap = readOnlyMap;
std::unique_lock<std::mutex> lock(mtx);
std::unique_lock<SpinLock> lock(mtx);
svmMapOperations.insert(svmMapOperation);
}
void SVMAllocsManager::removeSvmMapOperation(const void *regionSvmPtr) {
std::unique_lock<std::mutex> lock(mtx);
std::unique_lock<SpinLock> lock(mtx);
svmMapOperations.remove(regionSvmPtr);
}

View File

@@ -6,6 +6,8 @@
*/
#pragma once
#include "runtime/utilities/spinlock.h"
#include <cstdint>
#include <map>
#include <mutex>
@@ -80,6 +82,6 @@ class SVMAllocsManager {
MapBasedAllocationTracker SVMAllocs;
MapOperationsTracker svmMapOperations;
MemoryManager *memoryManager;
std::mutex mtx;
SpinLock mtx;
};
} // namespace NEO