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