gpu_info.h 5.0 KB
Newer Older
1
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved.
L
liaogang 已提交
2 3 4 5 6 7 8 9 10 11 12 13
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */

#pragma once

14
#if defined(PADDLE_WITH_CUDA) || defined(PADDLE_WITH_HIP)
15

L
liaogang 已提交
16
#include <stddef.h>
L
liaogang 已提交
17
#include <string>
18
#include <vector>
19 20

#include "paddle/fluid/platform/device/gpu/gpu_types.h"
L
liaogang 已提交
21 22 23

namespace paddle {
namespace platform {
24 25
//! Get the version of dnn
int DnnVersion();
L
liaogang 已提交
26 27

//! Get the total number of GPU devices in system.
28
int GetGPUDeviceCount();
L
liaogang 已提交
29

30
//! Get the compute capability of the ith GPU (format: major * 10 + minor)
31
int GetGPUComputeCapability(int id);
32

C
chengduo 已提交
33
//! Get the runtime version of the ith GPU
34
int GetGPURuntimeVersion(int id);
C
chengduo 已提交
35 36

//! Get the driver version of the ith GPU
37
int GetGPUDriverVersion(int id);
C
chengduo 已提交
38

39 40 41
//! Wheter the current device support TensorCore
bool TensorCoreAvailable();

C
chengduoZH 已提交
42
//! Get the MultiProcessors of the ith GPU.
43
int GetGPUMultiProcessors(int id);
C
chengduoZH 已提交
44 45

//! Get the MaxThreads of each MultiProcessor of the ith GPU.
46
int GetGPUMaxThreadsPerMultiProcessor(int id);
C
chengduoZH 已提交
47

48
//! Get the MaxThreads of each block of the ith GPU.
49
int GetGPUMaxThreadsPerBlock(int id);
50

L
liaogang 已提交
51 52 53
//! Get the current GPU device id in system.
int GetCurrentDeviceId();

54 55 56
//! Get the maximum GridDim size for GPU buddy allocator.
dim3 GetGpuMaxGridDimSize(int);

57 58 59
//! Get a list of device ids from environment variable or use all.
std::vector<int> GetSelectedDevices();

60 61 62
//! Get the properties of the ith GPU device.
const gpuDeviceProp &GetDeviceProperties(int id);

L
liaogang 已提交
63 64 65
//! Set the GPU device id for next execution.
void SetDeviceId(int device_id);

Q
Qiao Longfei 已提交
66
//! Get the memory usage of current GPU device.
67
void GpuMemoryUsage(size_t *available, size_t *total);
L
liaogang 已提交
68

69 70 71 72
//! Get the available memory to allocate, which is the size of available gpu
//! minus reserving.
size_t GpuAvailableMemToAlloc();

L
liaogang 已提交
73 74 75
//! Get the maximum allocation size of current GPU device.
size_t GpuMaxAllocSize();

Z
zhhsplendid 已提交
76 77 78 79 80 81
//! Get the initial allocation size of current GPU device.
size_t GpuInitAllocSize();

//! Get the re-allocation size of current GPU device.
size_t GpuReallocSize();

L
liaogang 已提交
82 83 84 85 86 87
//! Get the minimum chunk size for GPU buddy allocator.
size_t GpuMinChunkSize();

//! Get the maximum chunk size for GPU buddy allocator.
size_t GpuMaxChunkSize();

L
liaogang 已提交
88 89
//! Copy memory from address src to dst asynchronously.
void GpuMemcpyAsync(void *dst, const void *src, size_t count,
90
                    gpuMemcpyKind kind, gpuStream_t stream);
L
liaogang 已提交
91

92 93
//! Copy memory from address src to dst synchronously.
void GpuMemcpySync(void *dst, const void *src, size_t count,
94
                   gpuMemcpyKind kind);
95 96 97

//! Copy memory from one device to another device asynchronously.
void GpuMemcpyPeerAsync(void *dst, int dst_device, const void *src,
98
                        int src_device, size_t count, gpuStream_t stream);
99 100 101 102

//! Copy memory from one device to another device synchronously.
void GpuMemcpyPeerSync(void *dst, int dst_device, const void *src,
                       int src_device, size_t count);
L
liaogang 已提交
103

D
dzhwinter 已提交
104
//! Set memory dst with value count size asynchronously
105
void GpuMemsetAsync(void *dst, int value, size_t count, gpuStream_t stream);
D
dzhwinter 已提交
106

石晓伟 已提交
107
//! Blocks until stream has completed all operations.
108
void GpuStreamSync(gpuStream_t stream);
石晓伟 已提交
109

110 111 112 113 114
void GpuDestroyStream(gpuStream_t stream);

// ! Blocks until device has completed all operations.
void GpuDeviceync();

115
//! CudaMalloc with recorded info
116
gpuError_t RecordedGpuMalloc(void **ptr, size_t size, int dev_id);
117 118

//! CudaFree with recorded info
119 120 121
void RecordedGpuFree(void *p, size_t size, int dev_id);

gpuError_t GpuGetLastError();
122

123 124 125
#ifdef PADDLE_WITH_CUDA
#if CUDA_VERSION >= 10020
//! cuMemCreate with recorded info
126 127 128
CUresult RecordedGpuMemCreate(CUmemGenericAllocationHandle *handle, size_t size,
                              const CUmemAllocationProp *prop,
                              unsigned long long flags, int dev_id);  // NOLINT
129 130

//! cuMemRelease with recorded info
131 132
CUresult RecordedGpuMemRelease(CUmemGenericAllocationHandle handle, size_t size,
                               int dev_id);
133 134 135
#endif
#endif

136
//! Get available and total gpu memory with considering limitation
137 138
bool RecordedGpuMemGetInfo(size_t *avail, size_t *total, size_t *actual_avail,
                           size_t *actual_total, int dev_id);
139 140

//! Get recorded cudaMalloc size. If record is disabled, return 0.
141
uint64_t RecordedGpuMallocSize(int dev_id);
142

143
bool IsGpuMallocRecorded(int dev_id);
144

145 146 147
//! Empty idle cached memory held by the allocator.
void EmptyCache(void);

F
From00 已提交
148 149
//! Get the primitive pointer return from cudaMalloc, just implemented with
//! testing, do not use for release
F
From00 已提交
150 151
void *GetGpuBasePtr(void *ptr, int dev_id);

L
liaogang 已提交
152 153 154
}  // namespace platform
}  // namespace paddle

L
Luo Tao 已提交
155
#endif