Use StackVec in Buffer::create instead of std::map

Related-To: NEO-4589
Change-Id: I9aa3a5de7e4e86b85c4589901a81a5b9633fc23f
Signed-off-by: Krzysztof Gibala <krzysztof.gibala@intel.com>
This commit is contained in:
Krzysztof Gibala 2020-10-21 17:33:21 +02:00 committed by sys_ocldev
parent 1d74871f85
commit 0f31b5cc8b
3 changed files with 11 additions and 7 deletions

View File

@ -173,12 +173,14 @@ Buffer *Buffer::create(Context *context,
auto maxRootDeviceIndex = context->getMaxRootDeviceIndex();
auto multiGraphicsAllocation = MultiGraphicsAllocation(maxRootDeviceIndex);
std::map<uint32_t, CreateBuffer::AllocationInfo> allocationInfo;
AllocationInfoType allocationInfo;
allocationInfo.resize(maxRootDeviceIndex + 1u);
void *ptr = nullptr;
bool forceCopyHostPtr = false;
for (auto &rootDeviceIndex : context->getRootDeviceIndices()) {
allocationInfo.insert({rootDeviceIndex, {}});
allocationInfo[rootDeviceIndex] = {};
auto hwInfo = (&memoryManager->peekExecutionEnvironment())->rootDeviceEnvironments[rootDeviceIndex]->getHardwareInfo();
@ -732,7 +734,7 @@ bool Buffer::isCompressed(uint32_t rootDeviceIndex) const {
return false;
}
void Buffer::cleanAllGraphicsAllocations(Context &context, MemoryManager &memoryManager, std::map<uint32_t, NEO::CreateBuffer::AllocationInfo> &allocationInfo) {
void Buffer::cleanAllGraphicsAllocations(Context &context, MemoryManager &memoryManager, AllocationInfoType &allocationInfo) {
for (auto &index : context.getRootDeviceIndices()) {
if (allocationInfo[index].memory) {
memoryManager.removeAllocationFromHostPtrManager(allocationInfo[index].memory);

View File

@ -17,7 +17,6 @@
#include "memory_properties_flags.h"
#include <functional>
#include <map>
namespace NEO {
class Device;
@ -69,6 +68,8 @@ struct AllocationInfo {
};
} // namespace CreateBuffer
using AllocationInfoType = StackVec<CreateBuffer::AllocationInfo, 1>;
class Buffer : public MemObj {
public:
constexpr static size_t maxBufferSizeForReadWriteOnCpu = 10 * MB;
@ -173,7 +174,7 @@ class Buffer : public MemObj {
bool isCompressed(uint32_t rootDeviceIndex) const;
static void cleanAllGraphicsAllocations(Context &context, MemoryManager &memoryManager, std::map<uint32_t, NEO::CreateBuffer::AllocationInfo> &allocationInfo);
static void cleanAllGraphicsAllocations(Context &context, MemoryManager &memoryManager, AllocationInfoType &allocationInfo);
protected:
Buffer(Context *context,

View File

@ -1810,9 +1810,10 @@ TEST_F(BufferTransferTests, givenBufferWhenTransferFromHostPtrCalledThenCopyRequ
using MultiRootDeviceBufferTest = MultiRootDeviceFixture;
TEST_F(MultiRootDeviceBufferTest, WhenCleanAllGraphicsAllocationsCalledThenGraphicsAllocationsAreProperlyRemoved) {
std::map<uint32_t, NEO::CreateBuffer::AllocationInfo> allocationInfo;
AllocationInfoType allocationInfo;
allocationInfo.resize(3u);
allocationInfo.insert({1u, {}});
allocationInfo[1u] = {};
allocationInfo[1u].memory = mockMemoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{1u, MemoryConstants::pageSize});
Buffer::cleanAllGraphicsAllocations(*context, *context->getMemoryManager(), allocationInfo);