159ad4e0fSPushpinder Singh //===- AMDGPUArch.cpp - list AMDGPU installed ----------*- C++ -*---------===// 259ad4e0fSPushpinder Singh // 359ad4e0fSPushpinder Singh // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 459ad4e0fSPushpinder Singh // See https://llvm.org/LICENSE.txt for license information. 559ad4e0fSPushpinder Singh // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 659ad4e0fSPushpinder Singh // 759ad4e0fSPushpinder Singh //===----------------------------------------------------------------------===// 859ad4e0fSPushpinder Singh // 959ad4e0fSPushpinder Singh // This file implements a tool for detecting name of AMDGPU installed in system 1059ad4e0fSPushpinder Singh // using HSA. This tool is used by AMDGPU OpenMP driver. 1159ad4e0fSPushpinder Singh // 1259ad4e0fSPushpinder Singh //===----------------------------------------------------------------------===// 1359ad4e0fSPushpinder Singh 14*c711aa0fSPushpinder Singh #if defined(__has_include) 15*c711aa0fSPushpinder Singh #if __has_include("hsa.h") 16*c711aa0fSPushpinder Singh #define HSA_HEADER_FOUND 1 17*c711aa0fSPushpinder Singh #include "hsa.h" 18*c711aa0fSPushpinder Singh #elif __has_include("hsa/hsa.h") 19*c711aa0fSPushpinder Singh #define HSA_HEADER_FOUND 1 20*c711aa0fSPushpinder Singh #include "hsa/hsa.h" 21*c711aa0fSPushpinder Singh #else 22*c711aa0fSPushpinder Singh #define HSA_HEADER_FOUND 0 23*c711aa0fSPushpinder Singh #endif 24*c711aa0fSPushpinder Singh #else 25*c711aa0fSPushpinder Singh #define HSA_HEADER_FOUND 0 26*c711aa0fSPushpinder Singh #endif 27*c711aa0fSPushpinder Singh 28*c711aa0fSPushpinder Singh #if !HSA_HEADER_FOUND main()29*c711aa0fSPushpinder Singhint main() { return 1; } 30*c711aa0fSPushpinder Singh #else 31*c711aa0fSPushpinder Singh 3259ad4e0fSPushpinder Singh #include <string> 3359ad4e0fSPushpinder Singh #include <vector> 3459ad4e0fSPushpinder Singh iterateAgentsCallback(hsa_agent_t Agent,void * Data)3559ad4e0fSPushpinder Singhstatic hsa_status_t iterateAgentsCallback(hsa_agent_t Agent, void *Data) { 3659ad4e0fSPushpinder Singh hsa_device_type_t DeviceType; 3759ad4e0fSPushpinder Singh hsa_status_t Status = 3859ad4e0fSPushpinder Singh hsa_agent_get_info(Agent, HSA_AGENT_INFO_DEVICE, &DeviceType); 3959ad4e0fSPushpinder Singh 4059ad4e0fSPushpinder Singh // continue only if device type if GPU 4159ad4e0fSPushpinder Singh if (Status != HSA_STATUS_SUCCESS || DeviceType != HSA_DEVICE_TYPE_GPU) { 4259ad4e0fSPushpinder Singh return Status; 4359ad4e0fSPushpinder Singh } 4459ad4e0fSPushpinder Singh 4559ad4e0fSPushpinder Singh std::vector<std::string> *GPUs = 4659ad4e0fSPushpinder Singh static_cast<std::vector<std::string> *>(Data); 4759ad4e0fSPushpinder Singh char GPUName[64]; 4859ad4e0fSPushpinder Singh Status = hsa_agent_get_info(Agent, HSA_AGENT_INFO_NAME, GPUName); 4959ad4e0fSPushpinder Singh if (Status != HSA_STATUS_SUCCESS) { 5059ad4e0fSPushpinder Singh return Status; 5159ad4e0fSPushpinder Singh } 5259ad4e0fSPushpinder Singh GPUs->push_back(GPUName); 5359ad4e0fSPushpinder Singh return HSA_STATUS_SUCCESS; 5459ad4e0fSPushpinder Singh } 5559ad4e0fSPushpinder Singh main()5659ad4e0fSPushpinder Singhint main() { 5759ad4e0fSPushpinder Singh hsa_status_t Status = hsa_init(); 5859ad4e0fSPushpinder Singh if (Status != HSA_STATUS_SUCCESS) { 5959ad4e0fSPushpinder Singh return 1; 6059ad4e0fSPushpinder Singh } 6159ad4e0fSPushpinder Singh 6259ad4e0fSPushpinder Singh std::vector<std::string> GPUs; 6359ad4e0fSPushpinder Singh Status = hsa_iterate_agents(iterateAgentsCallback, &GPUs); 6459ad4e0fSPushpinder Singh if (Status != HSA_STATUS_SUCCESS) { 6559ad4e0fSPushpinder Singh return 1; 6659ad4e0fSPushpinder Singh } 6759ad4e0fSPushpinder Singh 6859ad4e0fSPushpinder Singh for (const auto &GPU : GPUs) 6959ad4e0fSPushpinder Singh printf("%s\n", GPU.c_str()); 7059ad4e0fSPushpinder Singh 7159ad4e0fSPushpinder Singh if (GPUs.size() < 1) 7259ad4e0fSPushpinder Singh return 1; 7359ad4e0fSPushpinder Singh 7459ad4e0fSPushpinder Singh hsa_shut_down(); 7559ad4e0fSPushpinder Singh return 0; 7659ad4e0fSPushpinder Singh } 77*c711aa0fSPushpinder Singh 78*c711aa0fSPushpinder Singh #endif 79