xref: /aosp_15_r20/external/pytorch/binaries/inspect_gpu.cc (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1*da0073e9SAndroid Build Coastguard Worker /**
2*da0073e9SAndroid Build Coastguard Worker  * Copyright (c) 2016-present, Facebook, Inc.
3*da0073e9SAndroid Build Coastguard Worker  *
4*da0073e9SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*da0073e9SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*da0073e9SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*da0073e9SAndroid Build Coastguard Worker  *
8*da0073e9SAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
9*da0073e9SAndroid Build Coastguard Worker  *
10*da0073e9SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*da0073e9SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*da0073e9SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*da0073e9SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*da0073e9SAndroid Build Coastguard Worker  * limitations under the License.
15*da0073e9SAndroid Build Coastguard Worker  */
16*da0073e9SAndroid Build Coastguard Worker 
17*da0073e9SAndroid Build Coastguard Worker #include <cuda_runtime.h>
18*da0073e9SAndroid Build Coastguard Worker 
19*da0073e9SAndroid Build Coastguard Worker #include <sstream>
20*da0073e9SAndroid Build Coastguard Worker #include <vector>
21*da0073e9SAndroid Build Coastguard Worker 
22*da0073e9SAndroid Build Coastguard Worker #include "c10/util/Flags.h"
23*da0073e9SAndroid Build Coastguard Worker #include "caffe2/core/common_gpu.h"
24*da0073e9SAndroid Build Coastguard Worker #include "caffe2/core/init.h"
25*da0073e9SAndroid Build Coastguard Worker #include "caffe2/core/logging.h"
26*da0073e9SAndroid Build Coastguard Worker 
27*da0073e9SAndroid Build Coastguard Worker using std::vector;
28*da0073e9SAndroid Build Coastguard Worker 
29*da0073e9SAndroid Build Coastguard Worker C10_DECLARE_int(caffe2_log_level);
30*da0073e9SAndroid Build Coastguard Worker 
main(int argc,char ** argv)31*da0073e9SAndroid Build Coastguard Worker int main(int argc, char** argv) {
32*da0073e9SAndroid Build Coastguard Worker   caffe2::GlobalInit(&argc, &argv);
33*da0073e9SAndroid Build Coastguard Worker   c10::SetUsageMessage(
34*da0073e9SAndroid Build Coastguard Worker       "Inspects the GPUs on the current machine and prints out their details "
35*da0073e9SAndroid Build Coastguard Worker       "provided by cuda.");
36*da0073e9SAndroid Build Coastguard Worker 
37*da0073e9SAndroid Build Coastguard Worker   int gpu_count;
38*da0073e9SAndroid Build Coastguard Worker   CUDA_ENFORCE(cudaGetDeviceCount(&gpu_count));
39*da0073e9SAndroid Build Coastguard Worker   for (int i = 0; i < gpu_count; ++i) {
40*da0073e9SAndroid Build Coastguard Worker     LOG(INFO) << "Querying device ID = " << i;
41*da0073e9SAndroid Build Coastguard Worker     caffe2::DeviceQuery(i);
42*da0073e9SAndroid Build Coastguard Worker   }
43*da0073e9SAndroid Build Coastguard Worker 
44*da0073e9SAndroid Build Coastguard Worker   vector<vector<bool> > access_pattern;
45*da0073e9SAndroid Build Coastguard Worker   CAFFE_ENFORCE(caffe2::GetCudaPeerAccessPattern(&access_pattern));
46*da0073e9SAndroid Build Coastguard Worker 
47*da0073e9SAndroid Build Coastguard Worker   std::stringstream sstream;
48*da0073e9SAndroid Build Coastguard Worker   // Find topology
49*da0073e9SAndroid Build Coastguard Worker   for (int i = 0; i < gpu_count; ++i) {
50*da0073e9SAndroid Build Coastguard Worker     for (int j = 0; j < gpu_count; ++j) {
51*da0073e9SAndroid Build Coastguard Worker       sstream << (access_pattern[i][j] ? "+" : "-") << " ";
52*da0073e9SAndroid Build Coastguard Worker     }
53*da0073e9SAndroid Build Coastguard Worker     sstream << std::endl;
54*da0073e9SAndroid Build Coastguard Worker   }
55*da0073e9SAndroid Build Coastguard Worker   LOG(INFO) << "Access pattern: " << std::endl << sstream.str();
56*da0073e9SAndroid Build Coastguard Worker 
57*da0073e9SAndroid Build Coastguard Worker   return 0;
58*da0073e9SAndroid Build Coastguard Worker }
59