1 //------------------------------------------------------------------------------
2 // GB_cuda_warmup.cu: warmup the GPU
3 //------------------------------------------------------------------------------
4 
5 // SPDX-License-Identifier: Apache-2.0
6 // SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2019, All Rights Reserved.
7 // http://suitesparse.com   See GraphBLAS/Doc/License.txt for license.
8 
9 //------------------------------------------------------------------------------
10 
11 #include "GB_cuda.h"
12 /*
13 #include "rmm/include/rmm/mr/device/managed_memory_resource.hpp"
14 #include "rmm/include/rmm/mr/device/pool_memory_resource.hpp"
15 #include "rmm/include/rmm/mr/device/owning_wrapper.hpp"
16 #include "rmm/include/rmm/mr/device/default_memory_resource.hpp"
17 #include "rmm/include/rmm/mr/device/per_device_resource.hpp"
18 #include "rmm/include/rmm/mr/device/cnmem_managed_memory_resource.hpp"
19 */
20 #include "rmm/detail/cnmem.h"
21 
GB_cuda_warmup(int device)22 bool GB_cuda_warmup (int device)
23 {
24     // allocate 'nothing' just to load the drivers.
25     // No need to free the result.
26     double gpu_memory_size = GB_Global_gpu_memorysize_get (device);
27 
28     printf ("warming up device %d memsize %g sms %d\n",
29         device,
30         gpu_memory_size,
31         GB_Global_gpu_sm_get (device)) ;
32 
33 
34     //auto cuda_managed = std::make_shared<rmm::mr::managed_memory_resource>();
35     //auto cuda = std::make_shared<rmm::mr::cuda_memory_resource>();
36     //auto pool = rmm::mr::make_owning_wrapper<rmm::mr::pool_memory_resource>
37     //            ( cuda_managed, gpu_memory_size/2, gpu_memory_size ) ;
38 
39     std::vector<int> dev{0};
40     cnmemDevice_t cnmem_device;
41     memset(&cnmem_device, 0, sizeof(cnmem_device) ) ;
42     cnmem_device.size = gpu_memory_size/2;
43     if( device ==0)
44     {
45       cnmemInit(1, &cnmem_device, CNMEM_FLAGS_MANAGED);
46     }
47 
48     //auto pool = std::make_shared<rmm::mr::cnmem_managed_memory_resource> ( gpu_memory_size/2 ) ;
49 
50 
51     //rmm::mr::set_per_device_resource ( rmm::cuda_device_id{device},
52     //                                 ( rmm::mr::device_memory_resource *)pool.get() ) ;
53 
54     //rmm::mr::set_default_resource ( pool.get() );
55     //rmm::mr::set_current_device_resource ( pool.get() );
56 
57     //GB_Global_gpu_device_memory_resource_set( device, (void *)rmm::mr::get_current_device_resource() );
58 
59     void *p ;
60     //cudaError_t err = cudaMalloc (&p, (size_t) 0) ;
61     //p = rmm::mr::get_current_device_resource()->allocate(  256) ;
62     //p = pool->allocate( 10) ;
63     cnmemMalloc( &p,  256 , NULL);
64     //rmm::mr::get_current_device_resource()->deallocate(p, 1);
65     //pool->deallocate( p, 10);
66     cnmemFree( p, NULL);
67 
68     printf ("GPU %d nice and toasty now, pool=%g\n", device, gpu_memory_size/2 ) ;
69 
70     // TODO check for jit cache? or in GB_init?
71 
72     return  true; //(err == cudaSuccess) ;
73 }
74 
75