cuda_stream_manager.h 1.4 KB
Newer Older
Rick Ho's avatar
Rick Ho committed
1
2
3
4
5
6
7
#ifndef CUDA_STREAM_MANAGER_H
#define CUDA_STREAM_MANAGER_H

#include <cuda_runtime.h>
#include <cublas_v2.h>
#include <helper_cuda.h> 

8
9
#include <cstdio>

Rick Ho's avatar
Rick Ho committed
10
11
12

class CudaStreamManager {
public:
13
    CudaStreamManager() : num_expert(0), device(0), streams(NULL) {
14
15
        int current_device;
        checkCudaErrors(cudaGetDevice(&current_device));
16
17
18
19
20
21
22
23
24
25
26
27
#ifdef MOE_DEBUG
        printf("constructor at device %d\n", current_device);
#endif
    }

    void setup(const size_t num_expert, const int device) {
#ifdef MOE_DEBUG
        printf("setup at device %d\n", device);
#endif
        this->num_expert = num_expert;
        this->device = device;
        checkCudaErrors(cudaSetDevice(device));        
Rick Ho's avatar
Rick Ho committed
28
29
30
31
32
33
        streams = new cudaStream_t[num_expert];
        checkCudaErrors(cublasCreate(&handle));
        for (size_t i=0; i<num_expert; ++i) {
            checkCudaErrors(cudaStreamCreate(streams+i));
        }
    }
34

Rick Ho's avatar
Rick Ho committed
35
    ~CudaStreamManager() {
36
37
38
#ifdef MOE_DEBUG
        printf("destructor at device %d\n", device);
#endif
Rick Ho's avatar
Rick Ho committed
39
40
41
42
        for (size_t i=0; i<num_expert; ++i) {
            checkCudaErrors(cudaStreamDestroy(*(streams+i)));
        }
        checkCudaErrors(cublasDestroy(handle));
Jiezhong Qiu's avatar
Jiezhong Qiu committed
43
        delete[] streams;
Rick Ho's avatar
Rick Ho committed
44
    }
45
46
    size_t num_expert;
    int device;
Rick Ho's avatar
Rick Ho committed
47
48
49
50
    cublasHandle_t handle;
    cudaStream_t* streams;
}; 

51
// CudaStreamManager* getCudaStreamManager(const size_t num_expert, const int device);
Rick Ho's avatar
Rick Ho committed
52
53

#endif  // CUDA_STREAM_MANAGER