diff --git a/clang/tools/CMakeLists.txt b/clang/tools/CMakeLists.txt --- a/clang/tools/CMakeLists.txt +++ b/clang/tools/CMakeLists.txt @@ -45,5 +45,4 @@ # libclang may require clang-tidy in clang-tools-extra. add_clang_subdirectory(libclang) - add_clang_subdirectory(amdgpu-arch) diff --git a/llvm/lib/CMakeLists.txt b/llvm/lib/CMakeLists.txt --- a/llvm/lib/CMakeLists.txt +++ b/llvm/lib/CMakeLists.txt @@ -23,6 +23,7 @@ add_subdirectory(MCA) add_subdirectory(Object) add_subdirectory(ObjectYAML) +add_subdirectory(OffloadArch) add_subdirectory(Option) add_subdirectory(Remarks) add_subdirectory(DebugInfo) diff --git a/llvm/lib/OffloadArch/CMakeLists.txt b/llvm/lib/OffloadArch/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/llvm/lib/OffloadArch/CMakeLists.txt @@ -0,0 +1,43 @@ +cmake_policy(SET CMP0002 NEW) +cmake_minimum_required(VERSION 3.5) + +set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11") + +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated_offload_arch.h + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/make_generated_offload_arch_h.sh ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS + ${CMAKE_CURRENT_SOURCE_DIR}/make_generated_offload_arch_h.sh + ${CMAKE_CURRENT_SOURCE_DIR}/amdgpu/pciid2codename.txt + ${CMAKE_CURRENT_SOURCE_DIR}/amdgpu/codename2offloadarch.txt + ${CMAKE_CURRENT_SOURCE_DIR}/nvidia/pciid2codename.txt + ${CMAKE_CURRENT_SOURCE_DIR}/nvidia/codename2offloadarch.txt + ${CMAKE_CURRENT_SOURCE_DIR}/intelhd/pciid2codename.txt + ${CMAKE_CURRENT_SOURCE_DIR}/intelhd/codename2offloadarch.txt +) + +add_custom_target( + generated-table + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/generated_offload_arch.h) + +add_llvm_component_library(LLVMOffloadArch + OffloadArch.cpp + amdgpu/vendor_specific_capabilities.cpp + nvidia/vendor_specific_capabilities.cpp + intelhd/vendor_specific_capabilities.cpp + ADDITIONAL_HEADER_DIRS + "${LLVM_MAIN_INCLUDE_DIR}/llvm/OffloadArch" + ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS + generated-table + LINK_COMPONENTS + BinaryFormat + Core + Object + ProfileData + Support + InterfaceStub +) + +add_subdirectory(offload-arch) diff --git a/llvm/lib/OffloadArch/OffloadArch.cpp b/llvm/lib/OffloadArch/OffloadArch.cpp new file mode 100644 --- /dev/null +++ b/llvm/lib/OffloadArch/OffloadArch.cpp @@ -0,0 +1,280 @@ +//===----- llvm/lib/OffloadArch/OffloadArch.cpp ----------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===---------------------------------------------------------------------===// +/// +/// OffloadArch.cpp : Library Functions for OffloadArch +/// +//===---------------------------------------------------------------------===// +// +#include "llvm/OffloadArch/OffloadArch.h" +#include "generated_offload_arch.h" +#include "llvm/Object/ELFObjectFile.h" +#include "llvm/Support/WithColor.h" +#include +#include +std::string file_contents; +std::string line; +if (myfile.is_open()) { + while (getline(myfile, line)) { + file_contents.append(line).append("\n"); + } + myfile.close(); +} +return file_contents; +} + +std::vector _aot_get_pci_ids(const char *driver_search_phrase, + const char *pci_id_search_phrase) { + std::vector PCI_IDS; + char uevent_filename[MAXPATHSIZE]; + const char *sys_bus_pci_devices_dir = "/sys/bus/pci/devices"; + DIR *dirp; + struct dirent *dir; + + dirp = opendir(sys_bus_pci_devices_dir); + if (dirp) { + while ((dir = readdir(dirp)) != 0) { + // foreach subdir look for uevent file + if ((strcmp(dir->d_name, ".") == 0) || (strcmp(dir->d_name, "..") == 0)) + continue; + snprintf(uevent_filename, MAXPATHSIZE, "%s/%s/uevent", + sys_bus_pci_devices_dir, dir->d_name); + std::string file_contents = + _aot_get_file_contents(std::string(uevent_filename)); + if (!file_contents.empty()) { + std::size_t found_loc = file_contents.find(driver_search_phrase); + if (found_loc != std::string::npos) { + found_loc = file_contents.find(pci_id_search_phrase); + if (found_loc != std::string::npos) + PCI_IDS.push_back(file_contents.substr(found_loc + 7, 9)); + } + } + } // end of foreach subdir + closedir(dirp); + } else { + fprintf(stderr, "ERROR: failed to open directory %s.\n", + sys_bus_pci_devices_dir); + exit(1); + } + return PCI_IDS; +} + +std::vector _aot_lookup_codename(std::string lookup_codename) { + std::vector PCI_IDS; + for (const AOT_CODENAME_ID_TO_STRING id2str : AOT_CODENAMES) + if (lookup_codename.compare(id2str.codename) == 0) + for (auto aot_table_entry : AOT_TABLE) { + if (id2str.codename_id == aot_table_entry.codename_id) { + uint16_t VendorID; + uint16_t DeviceID; + char pci_id[10]; + VendorID = aot_table_entry.vendorid; + DeviceID = aot_table_entry.devid; + snprintf(&pci_id[0], 10, "%x:%x", VendorID, DeviceID); + PCI_IDS.push_back(std::string(&pci_id[0])); + } + } + return PCI_IDS; +} + +std::vector +_aot_lookup_offload_arch(std::string lookup_offload_arch) { + std::vector PCI_IDS; + for (auto id2str : AOT_OFFLOADARCHS) + if (lookup_offload_arch.compare(id2str.offloadarch) == 0) + for (auto aot_table_entry : AOT_TABLE) { + if (id2str.offloadarch_id == aot_table_entry.offloadarch_id) { + uint16_t VendorID; + uint16_t DeviceID; + char pci_id[10]; + VendorID = aot_table_entry.vendorid; + DeviceID = aot_table_entry.devid; + snprintf(&pci_id[0], 10, "%x:%x", VendorID, DeviceID); + PCI_IDS.push_back(std::string(&pci_id[0])); + } + } + return PCI_IDS; +} + +std::string _aot_get_codename(uint16_t VendorID, uint16_t DeviceID) { + std::string retval; + for (auto aot_table_entry : AOT_TABLE) { + if ((VendorID == aot_table_entry.vendorid) && + (DeviceID == aot_table_entry.devid)) + for (auto id2str : AOT_CODENAMES) + if (id2str.codename_id == aot_table_entry.codename_id) + return std::string(id2str.codename); + } + return retval; +} + +std::string _aot_get_offload_arch(uint16_t VendorID, uint16_t DeviceID) { + std::string retval; + for (auto aot_table_entry : AOT_TABLE) { + if ((VendorID == aot_table_entry.vendorid) && + (DeviceID == aot_table_entry.devid)) + for (auto id2str : AOT_OFFLOADARCHS) + if (id2str.offloadarch_id == aot_table_entry.offloadarch_id) + return std::string(id2str.offloadarch); + } + return retval; +} + +std::string _aot_get_capabilities(uint16_t vid, uint16_t devid, + std::string oa) { + std::string capabilities(" "); + switch (vid) { + case 0x1002: + capabilities.append(_aot_amdgpu_capabilities(vid, devid, oa)); + break; + case 0x10de: + capabilities.append(_aot_nvidia_capabilities(vid, devid, oa)); + break; + case 0x8086: + capabilities.append(_aot_intelhd_capabilities(vid, devid, oa)); + break; + } + return capabilities; +} + +std::string _aot_get_triple(uint16_t VendorID, uint16_t DeviceID) { + std::string retval; + switch (VendorID) { + case 0x1002: + return (std::string("amdgcn-amd-amdhsa")); + break; + case 0x10de: + return (std::string("nvptx64-nvidia-cuda")); + break; + case 0x8086: + return (std::string("spir64-intel-unknown")); + break; + } + return retval; +} + +std::vector _aot_get_all_pci_ids() { + std::vector PCI_IDS = + _aot_get_pci_ids(AMDGPU_SEARCH_PHRASE, AMDGPU_PCIID_PHRASE); + for (auto PCI_ID : + _aot_get_pci_ids(NVIDIA_SEARCH_PHRASE, NVIDIA_PCIID_PHRASE)) + PCI_IDS.push_back(PCI_ID); + for (auto PCI_ID : + _aot_get_pci_ids(INTELHD_SEARCH_PHRASE, INTELHD_PCIID_PHRASE)) + PCI_IDS.push_back(PCI_ID); + return PCI_IDS; +} + +/// Get runtime capabilities of this system for libomptarget runtime +int _aot_get_capabilities_for_runtime(char *offload_arch_output_buffer, + size_t offload_arch_output_buffer_size) { + std::vector PCI_IDS = _aot_get_all_pci_ids(); + std::string offload_arch; + for (auto PCI_ID : PCI_IDS) { + unsigned vid32, devid32; + sscanf(PCI_ID.c_str(), "%x:%x", &vid32, &devid32); + uint16_t vid = vid32; + uint16_t devid = devid32; + offload_arch = _aot_get_offload_arch(vid, devid); + if (offload_arch.empty()) { + fprintf(stderr, "ERROR: offload-arch not found for %x:%x.\n", vid, devid); + return 1; + } + std::string caps = _aot_get_capabilities(vid, devid, offload_arch); + std::size_t found_loc = caps.find("NOT-VISIBLE"); + if (found_loc == std::string::npos) { + // Found first visible GPU, so append caps and exit loop + offload_arch.append(caps); + break; + } + } + size_t out_str_len = strlen(offload_arch.c_str()); + if (out_str_len > offload_arch_output_buffer_size) { + fprintf(stderr, "ERROR: strlen %ld exceeds buffer length %ld \n", + out_str_len, offload_arch_output_buffer_size); + return 1; + } + strncpy(offload_arch_output_buffer, offload_arch.c_str(), out_str_len); + offload_arch_output_buffer[out_str_len] = '\0'; // terminate string + return 0; +} + +LLVM_ATTRIBUTE_NORETURN inline void +exitWithError(const Twine &Message, StringRef Whence = StringRef(), + StringRef Hint = StringRef()) { + WithColor::error(errs(), "offload-arch"); + if (!Whence.empty()) + errs() << Whence.str() << ": "; + errs() << Message << "\n"; + if (!Hint.empty()) + WithColor::note() << Hint.str() << "\n"; + ::exit(EXIT_FAILURE); +} +LLVM_ATTRIBUTE_NORETURN inline void +exitWithError(std::error_code EC, StringRef Whence = StringRef()) { + exitWithError(EC.message(), Whence); +} +LLVM_ATTRIBUTE_NORETURN inline void exitWithError(Error E, StringRef Whence) { + exitWithError(errorToErrorCode(std::move(E)), Whence); +} +template +T unwrapOrError(Expected EO, Ts &&... Args) { + if (EO) + return std::move(*EO); + exitWithError(EO.takeError(), std::forward(Args)...); +} + +/// Function used by offload-arch tool to get requirements from each image of +/// an elf binary file. Requirements (like offload arch name, target features) +/// are read from a custom section ".offload_arch_list" in elf binary. +std::vector +_aot_get_requirements_from_file(const std::string &input_filename) { + std::vector results; + ErrorOr> BufOrError = + MemoryBuffer::getFile(input_filename); + if (!BufOrError) { + fprintf(stderr, " MemoryBuffer error reading file \n"); + results.push_back("MEM ERROR"); + return results; + } + std::unique_ptr FileReadBuffer = std::move(*BufOrError); + Expected> BinaryOrErr = + createBinary(FileReadBuffer->getMemBufferRef(), /*Context=*/nullptr, + /*InitContent=*/false); + if (!BinaryOrErr) { + results.push_back("createBinary ERROR"); + return results; + } + std::unique_ptr Bin = std::move(*BinaryOrErr); + if (!isa>(Bin)) { + results.push_back("NOT ELF64LE"); + return results; + } + ELFObjectFile *elf_obj_file = + dyn_cast>(Bin.get()); + StringRef FileName = elf_obj_file->getFileName(); + for (section_iterator SI = elf_obj_file->section_begin(), + SE = elf_obj_file->section_end(); + SI != SE; ++SI) { + const SectionRef &Section = *SI; + StringRef SectionName = unwrapOrError(Section.getName(), FileName); + if (SectionName == ".offload_arch_list") { + StringRef Contents = unwrapOrError(Section.getContents(), FileName); + const char *arch_list_ptr = Contents.data(); + std::string arch; + // Iterate over list of requirements to extract individual requirements. + for (uint i = 0; i < Contents.size(); i++) { + for (uint j = i; arch_list_ptr[j] != '\0'; j++, i++) { + arch.push_back(arch_list_ptr[i]); + } + results.push_back(arch); + arch.resize(0); + } + } + } + return results; +} diff --git a/llvm/lib/OffloadArch/amdgpu/codename2offloadarch.txt b/llvm/lib/OffloadArch/amdgpu/codename2offloadarch.txt new file mode 100644 --- /dev/null +++ b/llvm/lib/OffloadArch/amdgpu/codename2offloadarch.txt @@ -0,0 +1,23 @@ +ALDEBARAN gfx90a +ARCTURUS gfx908 +CARRIZO gfx801 +DIMGREY_CAVEFISH gfx1032 +FIJI gfx803 +HAWAII gfx701 +KAVERI gfx700 +NAVI10 gfx1010 +NAVI12 gfx1011 +NAVI14 gfx1012 +NAVY_FLOUNDER gfx1031 +POLARIS10 gfx803 +POLARIS11 gfx803 +POLARIS12 gfx803 +RAVEN gfx902 +RENOIR gfx902 +SIENNA_CICHLID gfx1030 +TONGA gfx802 +VANGOGH gfx1033 +VEGA10 gfx900 +VEGA12 gfx904 +VEGA20 gfx906 +VEGAM gfx803 diff --git a/llvm/lib/OffloadArch/amdgpu/hsa-subset.h b/llvm/lib/OffloadArch/amdgpu/hsa-subset.h new file mode 100644 --- /dev/null +++ b/llvm/lib/OffloadArch/amdgpu/hsa-subset.h @@ -0,0 +1,577 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// The University of Illinois/NCSA +// Open Source License (NCSA) +// +// Copyright (c) 2014-2021, Advanced Micro Devices, Inc. All rights reserved. +// +// Developed by: +// +// AMD Research and AMD HSA Software Development +// +// Advanced Micro Devices, Inc. +// +// www.amd.com +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal with the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following conditions: +// +// - Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimers. +// - Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimers in +// the documentation and/or other materials provided with the distribution. +// - Neither the names of Advanced Micro Devices, Inc, +// nor the names of its contributors may be used to endorse or promote +// products derived from this Software without specific prior written +// permission. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR +// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS WITH THE SOFTWARE. +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef HSA_RUNTIME_SUBSET_H_ +#define HSA_RUNTIME_SUBSET_H_ + +typedef struct hsa_dim3_s { + uint32_t x; + uint32_t y; + uint32_t z; +} hsa_dim3_t; + +/** + * @brief Status codes. + */ +typedef enum { + /** + * The function has been executed successfully. + */ + HSA_STATUS_SUCCESS = 0x0, + /** + * A traversal over a list of elements has been interrupted by the + * application before completing. + */ + HSA_STATUS_INFO_BREAK = 0x1, + /** + * A generic error has occurred. + */ + HSA_STATUS_ERROR = 0x1000, + /** + * One of the actual arguments does not meet a precondition stated in the + * documentation of the corresponding formal argument. + */ + HSA_STATUS_ERROR_INVALID_ARGUMENT = 0x1001, + /** + * The requested queue creation is not valid. + */ + HSA_STATUS_ERROR_INVALID_QUEUE_CREATION = 0x1002, + /** + * The requested allocation is not valid. + */ + HSA_STATUS_ERROR_INVALID_ALLOCATION = 0x1003, + /** + * The agent is invalid. + */ + HSA_STATUS_ERROR_INVALID_AGENT = 0x1004, + /** + * The memory region is invalid. + */ + HSA_STATUS_ERROR_INVALID_REGION = 0x1005, + /** + * The signal is invalid. + */ + HSA_STATUS_ERROR_INVALID_SIGNAL = 0x1006, + /** + * The queue is invalid. + */ + HSA_STATUS_ERROR_INVALID_QUEUE = 0x1007, + /** + * The HSA runtime failed to allocate the necessary resources. This error + * may also occur when the HSA runtime needs to spawn threads or create + * internal OS-specific events. + */ + HSA_STATUS_ERROR_OUT_OF_RESOURCES = 0x1008, + /** + * The AQL packet is malformed. + */ + HSA_STATUS_ERROR_INVALID_PACKET_FORMAT = 0x1009, + /** + * An error has been detected while releasing a resource. + */ + HSA_STATUS_ERROR_RESOURCE_FREE = 0x100A, + /** + * An API other than ::hsa_init has been invoked while the reference count + * of the HSA runtime is 0. + */ + HSA_STATUS_ERROR_NOT_INITIALIZED = 0x100B, + /** + * The maximum reference count for the object has been reached. + */ + HSA_STATUS_ERROR_REFCOUNT_OVERFLOW = 0x100C, + /** + * The arguments passed to a functions are not compatible. + */ + HSA_STATUS_ERROR_INCOMPATIBLE_ARGUMENTS = 0x100D, + /** + * The index is invalid. + */ + HSA_STATUS_ERROR_INVALID_INDEX = 0x100E, + /** + * The instruction set architecture is invalid. + */ + HSA_STATUS_ERROR_INVALID_ISA = 0x100F, + /** + * The instruction set architecture name is invalid. + */ + HSA_STATUS_ERROR_INVALID_ISA_NAME = 0x1017, + /** + * The code object is invalid. + */ + HSA_STATUS_ERROR_INVALID_CODE_OBJECT = 0x1010, + /** + * The executable is invalid. + */ + HSA_STATUS_ERROR_INVALID_EXECUTABLE = 0x1011, + /** + * The executable is frozen. + */ + HSA_STATUS_ERROR_FROZEN_EXECUTABLE = 0x1012, + /** + * There is no symbol with the given name. + */ + HSA_STATUS_ERROR_INVALID_SYMBOL_NAME = 0x1013, + /** + * The variable is already defined. + */ + HSA_STATUS_ERROR_VARIABLE_ALREADY_DEFINED = 0x1014, + /** + * The variable is undefined. + */ + HSA_STATUS_ERROR_VARIABLE_UNDEFINED = 0x1015, + /** + * An HSAIL operation resulted in a hardware exception. + */ + HSA_STATUS_ERROR_EXCEPTION = 0x1016, + /** + * The code object symbol is invalid. + */ + HSA_STATUS_ERROR_INVALID_CODE_SYMBOL = 0x1018, + /** + * The executable symbol is invalid. + */ + HSA_STATUS_ERROR_INVALID_EXECUTABLE_SYMBOL = 0x1019, + /** + * The file descriptor is invalid. + */ + HSA_STATUS_ERROR_INVALID_FILE = 0x1020, + /** + * The code object reader is invalid. + */ + HSA_STATUS_ERROR_INVALID_CODE_OBJECT_READER = 0x1021, + /** + * The cache is invalid. + */ + HSA_STATUS_ERROR_INVALID_CACHE = 0x1022, + /** + * The wavefront is invalid. + */ + HSA_STATUS_ERROR_INVALID_WAVEFRONT = 0x1023, + /** + * The signal group is invalid. + */ + HSA_STATUS_ERROR_INVALID_SIGNAL_GROUP = 0x1024, + /** + * The HSA runtime is not in the configuration state. + */ + HSA_STATUS_ERROR_INVALID_RUNTIME_STATE = 0x1025, + /** + * The queue received an error that may require process termination. + */ + HSA_STATUS_ERROR_FATAL = 0x1026 +} hsa_status_t; + +/** + * @brief Instruction set architecture. + */ +typedef struct hsa_isa_s { + /** + * Opaque handle. Two handles reference the same object of the enclosing type + * if and only if they are equal. + */ + uint64_t handle; +} hsa_isa_t; + +/** + * @brief Instruction set architecture attributes. + */ +typedef enum { + /** + * The length of the ISA name in bytes, not including the NUL terminator. The + * type of this attribute is uint32_t. + */ + HSA_ISA_INFO_NAME_LENGTH = 0, + /** + * Human-readable description. The type of this attribute is character array + * with the length equal to the value of ::HSA_ISA_INFO_NAME_LENGTH attribute. + */ + HSA_ISA_INFO_NAME = 1, + /** + * @deprecated + * + * Number of call conventions supported by the instruction set architecture. + * Must be greater than zero. The type of this attribute is uint32_t. + */ + HSA_ISA_INFO_CALL_CONVENTION_COUNT = 2, + /** + * @deprecated + * + * Number of work-items in a wavefront for a given call convention. Must be a + * power of 2 in the range [1,256]. The type of this attribute is uint32_t. + */ + HSA_ISA_INFO_CALL_CONVENTION_INFO_WAVEFRONT_SIZE = 3, + /** + * @deprecated + * + * Number of wavefronts per compute unit for a given call convention. In + * practice, other factors (for example, the amount of group memory used by a + * work-group) may further limit the number of wavefronts per compute + * unit. The type of this attribute is uint32_t. + */ + HSA_ISA_INFO_CALL_CONVENTION_INFO_WAVEFRONTS_PER_COMPUTE_UNIT = 4, + /** + * Machine models supported by the instruction set architecture. The type of + * this attribute is a bool[2]. If the ISA supports the small machine model, + * the element at index ::HSA_MACHINE_MODEL_SMALL is true. If the ISA supports + * the large model, the element at index ::HSA_MACHINE_MODEL_LARGE is true. + */ + HSA_ISA_INFO_MACHINE_MODELS = 5, + /** + * Profiles supported by the instruction set architecture. The type of this + * attribute is a bool[2]. If the ISA supports the base profile, the element + * at index ::HSA_PROFILE_BASE is true. If the ISA supports the full profile, + * the element at index ::HSA_PROFILE_FULL is true. + */ + HSA_ISA_INFO_PROFILES = 6, + /** + * Default floating-point rounding modes supported by the instruction set + * architecture. The type of this attribute is a bool[3]. The value at a given + * index is true if the corresponding rounding mode in + * ::hsa_default_float_rounding_mode_t is supported. At least one default mode + * has to be supported. + * + * If the default mode is supported, then + * ::HSA_ISA_INFO_BASE_PROFILE_DEFAULT_FLOAT_ROUNDING_MODES must report that + * both the zero and the near roundings modes are supported. + */ + HSA_ISA_INFO_DEFAULT_FLOAT_ROUNDING_MODES = 7, + /** + * Default floating-point rounding modes supported by the instruction set + * architecture in the Base profile. The type of this attribute is a + * bool[3]. The value at a given index is true if the corresponding rounding + * mode in ::hsa_default_float_rounding_mode_t is supported. The value at + * index HSA_DEFAULT_FLOAT_ROUNDING_MODE_DEFAULT must be false. At least one + * of the values at indexes ::HSA_DEFAULT_FLOAT_ROUNDING_MODE_ZERO or + * HSA_DEFAULT_FLOAT_ROUNDING_MODE_NEAR must be true. + */ + HSA_ISA_INFO_BASE_PROFILE_DEFAULT_FLOAT_ROUNDING_MODES = 8, + /** + * Flag indicating that the f16 HSAIL operation is at least as fast as the + * f32 operation in the instruction set architecture. The type of this + * attribute is bool. + */ + HSA_ISA_INFO_FAST_F16_OPERATION = 9, + /** + * Maximum number of work-items of each dimension of a work-group. Each + * maximum must be greater than 0. No maximum can exceed the value of + * ::HSA_ISA_INFO_WORKGROUP_MAX_SIZE. The type of this attribute is + * uint16_t[3]. + */ + HSA_ISA_INFO_WORKGROUP_MAX_DIM = 12, + /** + * Maximum total number of work-items in a work-group. The type + * of this attribute is uint32_t. + */ + HSA_ISA_INFO_WORKGROUP_MAX_SIZE = 13, + /** + * Maximum number of work-items of each dimension of a grid. Each maximum must + * be greater than 0, and must not be smaller than the corresponding value in + * ::HSA_ISA_INFO_WORKGROUP_MAX_DIM. No maximum can exceed the value of + * ::HSA_ISA_INFO_GRID_MAX_SIZE. The type of this attribute is + * ::hsa_dim3_t. + */ + HSA_ISA_INFO_GRID_MAX_DIM = 14, + /** + * Maximum total number of work-items in a grid. The type of this + * attribute is uint64_t. + */ + HSA_ISA_INFO_GRID_MAX_SIZE = 16, + /** + * Maximum number of fbarriers per work-group. Must be at least 32. The + * type of this attribute is uint32_t. + */ + HSA_ISA_INFO_FBARRIER_MAX_SIZE = 17 +} hsa_isa_info_t; + +/** + * @brief Struct containing an opaque handle to an agent, a device that + * participates in the HSA memory model. An agent can submit AQL packets for + * execution, and may also accept AQL packets for execution (agent dispatch + * packets or kernel dispatch packets launching HSAIL-derived binaries). + */ +typedef struct hsa_agent_s { + /** + * Opaque handle. Two handles reference the same object of the enclosing type + * if and only if they are equal. + */ + uint64_t handle; +} hsa_agent_t; + +/** + * @brief Agent attributes. + */ +typedef enum { + /** + * Agent name. The type of this attribute is a NUL-terminated char[64]. The + * name must be at most 63 characters long (not including the NUL terminator) + * and all array elements not used for the name must be NUL. + */ + HSA_AGENT_INFO_NAME = 0, + /** + * Name of vendor. The type of this attribute is a NUL-terminated char[64]. + * The name must be at most 63 characters long (not including the NUL + * terminator) and all array elements not used for the name must be NUL. + */ + HSA_AGENT_INFO_VENDOR_NAME = 1, + /** + * Agent capability. The type of this attribute is ::hsa_agent_feature_t. + */ + HSA_AGENT_INFO_FEATURE = 2, + /** + * @deprecated Query ::HSA_ISA_INFO_MACHINE_MODELS for a given intruction set + * architecture supported by the agent instead. If more than one ISA is + * supported by the agent, the returned value corresponds to the first ISA + * enumerated by ::hsa_agent_iterate_isas. + * + * Machine model supported by the agent. The type of this attribute is + * ::hsa_machine_model_t. + */ + HSA_AGENT_INFO_MACHINE_MODEL = 3, + /** + * @deprecated Query ::HSA_ISA_INFO_PROFILES for a given intruction set + * architecture supported by the agent instead. If more than one ISA is + * supported by the agent, the returned value corresponds to the first ISA + * enumerated by ::hsa_agent_iterate_isas. + * + * Profile supported by the agent. The type of this attribute is + * ::hsa_profile_t. + */ + HSA_AGENT_INFO_PROFILE = 4, + /** + * @deprecated Query ::HSA_ISA_INFO_DEFAULT_FLOAT_ROUNDING_MODES for a given + * intruction set architecture supported by the agent instead. If more than + * one ISA is supported by the agent, the returned value corresponds to the + * first ISA enumerated by ::hsa_agent_iterate_isas. + * + * Default floating-point rounding mode. The type of this attribute is + * ::hsa_default_float_rounding_mode_t, but the value + * ::HSA_DEFAULT_FLOAT_ROUNDING_MODE_DEFAULT is not allowed. + */ + HSA_AGENT_INFO_DEFAULT_FLOAT_ROUNDING_MODE = 5, + /** + * @deprecated Query ::HSA_ISA_INFO_BASE_PROFILE_DEFAULT_FLOAT_ROUNDING_MODES + * for a given intruction set architecture supported by the agent instead. If + * more than one ISA is supported by the agent, the returned value corresponds + * to the first ISA enumerated by ::hsa_agent_iterate_isas. + * + * A bit-mask of ::hsa_default_float_rounding_mode_t values, representing the + * default floating-point rounding modes supported by the agent in the Base + * profile. The type of this attribute is uint32_t. The default floating-point + * rounding mode (::HSA_AGENT_INFO_DEFAULT_FLOAT_ROUNDING_MODE) bit must not + * be set. + */ + HSA_AGENT_INFO_BASE_PROFILE_DEFAULT_FLOAT_ROUNDING_MODES = 23, + /** + * @deprecated Query ::HSA_ISA_INFO_FAST_F16_OPERATION for a given intruction + * set architecture supported by the agent instead. If more than one ISA is + * supported by the agent, the returned value corresponds to the first ISA + * enumerated by ::hsa_agent_iterate_isas. + * + * Flag indicating that the f16 HSAIL operation is at least as fast as the + * f32 operation in the current agent. The value of this attribute is + * undefined if the agent is not a kernel agent. The type of this + * attribute is bool. + */ + HSA_AGENT_INFO_FAST_F16_OPERATION = 24, + /** + * @deprecated Query ::HSA_WAVEFRONT_INFO_SIZE for a given wavefront and + * intruction set architecture supported by the agent instead. If more than + * one ISA is supported by the agent, the returned value corresponds to the + * first ISA enumerated by ::hsa_agent_iterate_isas and the first wavefront + * enumerated by ::hsa_isa_iterate_wavefronts for that ISA. + * + * Number of work-items in a wavefront. Must be a power of 2 in the range + * [1,256]. The value of this attribute is undefined if the agent is not + * a kernel agent. The type of this attribute is uint32_t. + */ + HSA_AGENT_INFO_WAVEFRONT_SIZE = 6, + /** + * @deprecated Query ::HSA_ISA_INFO_WORKGROUP_MAX_DIM for a given intruction + * set architecture supported by the agent instead. If more than one ISA is + * supported by the agent, the returned value corresponds to the first ISA + * enumerated by ::hsa_agent_iterate_isas. + * + * Maximum number of work-items of each dimension of a work-group. Each + * maximum must be greater than 0. No maximum can exceed the value of + * ::HSA_AGENT_INFO_WORKGROUP_MAX_SIZE. The value of this attribute is + * undefined if the agent is not a kernel agent. The type of this + * attribute is uint16_t[3]. + */ + HSA_AGENT_INFO_WORKGROUP_MAX_DIM = 7, + /** + * @deprecated Query ::HSA_ISA_INFO_WORKGROUP_MAX_SIZE for a given intruction + * set architecture supported by the agent instead. If more than one ISA is + * supported by the agent, the returned value corresponds to the first ISA + * enumerated by ::hsa_agent_iterate_isas. + * + * Maximum total number of work-items in a work-group. The value of this + * attribute is undefined if the agent is not a kernel agent. The type + * of this attribute is uint32_t. + */ + HSA_AGENT_INFO_WORKGROUP_MAX_SIZE = 8, + /** + * @deprecated Query ::HSA_ISA_INFO_GRID_MAX_DIM for a given intruction set + * architecture supported by the agent instead. + * + * Maximum number of work-items of each dimension of a grid. Each maximum must + * be greater than 0, and must not be smaller than the corresponding value in + * ::HSA_AGENT_INFO_WORKGROUP_MAX_DIM. No maximum can exceed the value of + * ::HSA_AGENT_INFO_GRID_MAX_SIZE. The value of this attribute is undefined + * if the agent is not a kernel agent. The type of this attribute is + * ::hsa_dim3_t. + */ + HSA_AGENT_INFO_GRID_MAX_DIM = 9, + /** + * @deprecated Query ::HSA_ISA_INFO_GRID_MAX_SIZE for a given intruction set + * architecture supported by the agent instead. If more than one ISA is + * supported by the agent, the returned value corresponds to the first ISA + * enumerated by ::hsa_agent_iterate_isas. + * + * Maximum total number of work-items in a grid. The value of this attribute + * is undefined if the agent is not a kernel agent. The type of this + * attribute is uint32_t. + */ + HSA_AGENT_INFO_GRID_MAX_SIZE = 10, + /** + * @deprecated Query ::HSA_ISA_INFO_FBARRIER_MAX_SIZE for a given intruction + * set architecture supported by the agent instead. If more than one ISA is + * supported by the agent, the returned value corresponds to the first ISA + * enumerated by ::hsa_agent_iterate_isas. + * + * Maximum number of fbarriers per work-group. Must be at least 32. The value + * of this attribute is undefined if the agent is not a kernel agent. The + * type of this attribute is uint32_t. + */ + HSA_AGENT_INFO_FBARRIER_MAX_SIZE = 11, + /** + * @deprecated The maximum number of queues is not statically determined. + * + * Maximum number of queues that can be active (created but not destroyed) at + * one time in the agent. The type of this attribute is uint32_t. + */ + HSA_AGENT_INFO_QUEUES_MAX = 12, + /** + * Minimum number of packets that a queue created in the agent + * can hold. Must be a power of 2 greater than 0. Must not exceed + * the value of ::HSA_AGENT_INFO_QUEUE_MAX_SIZE. The type of this + * attribute is uint32_t. + */ + HSA_AGENT_INFO_QUEUE_MIN_SIZE = 13, + /** + * Maximum number of packets that a queue created in the agent can + * hold. Must be a power of 2 greater than 0. The type of this attribute + * is uint32_t. + */ + HSA_AGENT_INFO_QUEUE_MAX_SIZE = 14, + /** + * Type of a queue created in the agent. The type of this attribute is + * ::hsa_queue_type32_t. + */ + HSA_AGENT_INFO_QUEUE_TYPE = 15, + /** + * @deprecated NUMA information is not exposed anywhere else in the API. + * + * Identifier of the NUMA node associated with the agent. The type of this + * attribute is uint32_t. + */ + HSA_AGENT_INFO_NODE = 16, + /** + * Type of hardware device associated with the agent. The type of this + * attribute is ::hsa_device_type_t. + */ + HSA_AGENT_INFO_DEVICE = 17, + /** + * @deprecated Query ::hsa_agent_iterate_caches to retrieve information about + * the caches present in a given agent. + * + * Array of data cache sizes (L1..L4). Each size is expressed in bytes. A size + * of 0 for a particular level indicates that there is no cache information + * for that level. The type of this attribute is uint32_t[4]. + */ + HSA_AGENT_INFO_CACHE_SIZE = 18, + /** + * @deprecated An agent may support multiple instruction set + * architectures. See ::hsa_agent_iterate_isas. If more than one ISA is + * supported by the agent, the returned value corresponds to the first ISA + * enumerated by ::hsa_agent_iterate_isas. + * + * Instruction set architecture of the agent. The type of this attribute + * is ::hsa_isa_t. + */ + HSA_AGENT_INFO_ISA = 19, + /** + * Bit-mask indicating which extensions are supported by the agent. An + * extension with an ID of @p i is supported if the bit at position @p i is + * set. The type of this attribute is uint8_t[128]. + */ + HSA_AGENT_INFO_EXTENSIONS = 20, + /** + * Major version of the HSA runtime specification supported by the + * agent. The type of this attribute is uint16_t. + */ + HSA_AGENT_INFO_VERSION_MAJOR = 21, + /** + * Minor version of the HSA runtime specification supported by the + * agent. The type of this attribute is uint16_t. + */ + HSA_AGENT_INFO_VERSION_MINOR = 22 + +} hsa_agent_info_t; + +/** + * @brief Hardware device type. + */ +typedef enum { + /** + * CPU device. + */ + HSA_DEVICE_TYPE_CPU = 0, + /** + * GPU device. + */ + HSA_DEVICE_TYPE_GPU = 1, + /** + * DSP device. + */ + HSA_DEVICE_TYPE_DSP = 2 +} hsa_device_type_t; +#endif diff --git a/llvm/lib/OffloadArch/amdgpu/pciid2codename.txt b/llvm/lib/OffloadArch/amdgpu/pciid2codename.txt new file mode 100644 --- /dev/null +++ b/llvm/lib/OffloadArch/amdgpu/pciid2codename.txt @@ -0,0 +1,148 @@ +1002:1304 0000 0000 KAVERI : Spectre +1002:1305 0000 0000 KAVERI : Spectre +1002:1306 0000 0000 KAVERI : Spectre +1002:1307 0000 0000 KAVERI : Spectre +1002:1309 0000 0000 KAVERI : Spectre +1002:130A 0000 0000 KAVERI : Spectre +1002:130B 0000 0000 KAVERI : Spectre +1002:130C 0000 0000 KAVERI : Spectre +1002:130D 0000 0000 KAVERI : Spectre +1002:130E 0000 0000 KAVERI : Spectre +1002:130F 0000 0000 KAVERI : Spectre +1002:1310 0000 0000 KAVERI : Spectre +1002:1311 0000 0000 KAVERI : Spectre +1002:1312 0000 0000 KAVERI : Spooky +1002:1313 0000 0000 KAVERI : Spectre +1002:1315 0000 0000 KAVERI : Spectre +1002:1316 0000 0000 KAVERI : Spooky +1002:1317 0000 0000 KAVERI : Spooky +1002:1318 0000 0000 KAVERI : Spectre +1002:131B 0000 0000 KAVERI : Spectre +1002:131C 0000 0000 KAVERI : Spectre +1002:131D 0000 0000 KAVERI : Spectre +1002:67A0 0000 0000 HAWAII : Hawaii +1002:67A1 0000 0000 HAWAII : Hawaii +1002:67A2 0000 0000 HAWAII : Hawaii +1002:67A8 0000 0000 HAWAII : Hawaii +1002:67A9 0000 0000 HAWAII : Hawaii +1002:67AA 0000 0000 HAWAII : Hawaii +1002:67B0 0000 0000 HAWAII : Hawaii +1002:67B1 0000 0000 HAWAII : Hawaii +1002:67B8 0000 0000 HAWAII : Hawaii +1002:67B9 0000 0000 HAWAII : Hawaii +1002:67BA 0000 0000 HAWAII : Hawaii +1002:67BE 0000 0000 HAWAII : Hawaii +1002:9870 0000 0000 CARRIZO : Carrizo +1002:9874 0000 0000 CARRIZO : Carrizo +1002:9875 0000 0000 CARRIZO : Carrizo +1002:9876 0000 0000 CARRIZO : Carrizo +1002:9877 0000 0000 CARRIZO : Carrizo +1002:6920 0000 0000 TONGA : Tonga +1002:6921 0000 0000 TONGA : Tonga +1002:6928 0000 0000 TONGA : Tonga +1002:6929 0000 0000 TONGA : Tonga +1002:692B 0000 0000 TONGA : Tonga +1002:692F 0000 0000 TONGA : Tonga +1002:6930 0000 0000 TONGA : Tonga +1002:6938 0000 0000 TONGA : Tonga +1002:6939 0000 0000 TONGA : Tonga +1002:7300 0000 0000 FIJI : Fiji +1002:730F 0000 0000 FIJI : Fiji +1002:67C0 0000 0000 POLARIS10 : Polaris10 +1002:67C1 0000 0000 POLARIS10 : Polaris10 +1002:67C2 0000 0000 POLARIS10 : Polaris10 +1002:67C4 0000 0000 POLARIS10 : Polaris10 +1002:67C7 0000 0000 POLARIS10 : Polaris10 +1002:67C8 0000 0000 POLARIS10 : Polaris10 +1002:67C9 0000 0000 POLARIS10 : Polaris10 +1002:67CA 0000 0000 POLARIS10 : Polaris10 +1002:67CC 0000 0000 POLARIS10 : Polaris10 +1002:67CF 0000 0000 POLARIS10 : Polaris10 +1002:67D0 0000 0000 POLARIS10 : Polaris10 +1002:67DF 0000 0000 POLARIS10 : Polaris10 +1002:6FDF 0000 0000 POLARIS10 : Polaris10 +1002:67E0 0000 0000 POLARIS11 : Polaris11 +1002:67E1 0000 0000 POLARIS11 : Polaris11 +1002:67E3 0000 0000 POLARIS11 : Polaris11 +1002:67E7 0000 0000 POLARIS11 : Polaris11 +1002:67E8 0000 0000 POLARIS11 : Polaris11 +1002:67E9 0000 0000 POLARIS11 : Polaris11 +1002:67EB 0000 0000 POLARIS11 : Polaris11 +1002:67EF 0000 0000 POLARIS11 : Polaris11 +1002:67FF 0000 0000 POLARIS11 : Polaris11 +1002:6980 0000 0000 POLARIS12 : Polaris12 +1002:6981 0000 0000 POLARIS12 : Polaris12 +1002:6985 0000 0000 POLARIS12 : Polaris12 +1002:6986 0000 0000 POLARIS12 : Polaris12 +1002:6987 0000 0000 POLARIS12 : Polaris12 +1002:6995 0000 0000 POLARIS12 : Polaris12 +1002:6997 0000 0000 POLARIS12 : Polaris12 +1002:699F 0000 0000 POLARIS12 : Polaris12 +1002:694C 0000 0000 VEGAM : VegaM +1002:694E 0000 0000 VEGAM : VegaM +1002:694F 0000 0000 VEGAM : VegaM +1002:6860 0000 0000 VEGA10 : Vega10 +1002:6861 0000 0000 VEGA10 : Vega10 +1002:6862 0000 0000 VEGA10 : Vega10 +1002:6863 0000 0000 VEGA10 : Vega10 +1002:6864 0000 0000 VEGA10 : Vega10 +1002:6867 0000 0000 VEGA10 : Vega10 +1002:6868 0000 0000 VEGA10 : Vega10 +1002:6869 0000 0000 VEGA10 : Vega10 +1002:686A 0000 0000 VEGA10 : Vega10 +1002:686B 0000 0000 VEGA10 : Vega10 +1002:686C 0000 0000 VEGA10 : Vega10 +1002:686D 0000 0000 VEGA10 : Vega10 +1002:686E 0000 0000 VEGA10 : Vega10 +1002:687F 0000 0000 VEGA10 : Vega10 +1002:69A0 0000 0000 VEGA12 : Vega12 +1002:69A1 0000 0000 VEGA12 : Vega12 +1002:69A2 0000 0000 VEGA12 : Vega12 +1002:69A3 0000 0000 VEGA12 : Vega12 +1002:69Af 0000 0000 VEGA12 : Vega12 +1002:15DD 0000 0000 RAVEN : Raven +1002:15D8 0000 0000 RAVEN : Raven +1002:1636 0000 0000 RENOIR : Renoir +1002:1638 0000 0000 RENOIR : Renoir +1002:164C 0000 0000 RENOIR : Renoir +1002:66A0 0000 0000 VEGA20 : Vega20 +1002:66A1 0000 0000 VEGA20 : Vega20 +1002:66A2 0000 0000 VEGA20 : Vega20 +1002:66A3 0000 0000 VEGA20 : Vega20 +1002:66A4 0000 0000 VEGA20 : Vega20 +1002:66A7 0000 0000 VEGA20 : Vega20 +1002:66AF 0000 0000 VEGA20 : Vega20 +1002:7388 0000 0000 ARCTURUS : Arcturus +1002:738C 0000 0000 ARCTURUS : Arcturus +1002:738E 0000 0000 ARCTURUS : Arcturus +1002:7390 0000 0000 ARCTURUS : Arcturus +1002:7408 0000 0000 ALDEBARAN : Aldebaran +1002:740C 0000 0000 ALDEBARAN : Aldebaran +1002:740F 0000 0000 ALDEBARAN : Aldebaran +1002:7310 0000 0000 NAVI10 : Navi10 +1002:7312 0000 0000 NAVI10 : Navi10 +1002:7318 0000 0000 NAVI10 : Navi10 +1002:731A 0000 0000 NAVI10 : Navi10 +1002:731E 0000 0000 NAVI10 : Navi10 +1002:731F 0000 0000 NAVI10 : Navi10 +1002:7340 0000 0000 NAVI14 : Navi14 +1002:7341 0000 0000 NAVI14 : Navi14 +1002:7347 0000 0000 NAVI14 : Navi14 +1002:7360 0000 0000 NAVI12 : Navi12 +1002:7362 0000 0000 NAVI12 : Navi12 +1002:73A0 0000 0000 SIENNA_CICHLID : SIENNA_CICHLID +1002:73A1 0000 0000 SIENNA_CICHLID : SIENNA_CICHLID +1002:73A2 0000 0000 SIENNA_CICHLID : SIENNA_CICHLID +1002:73A3 0000 0000 SIENNA_CICHLID : SIENNA_CICHLID +1002:73AB 0000 0000 SIENNA_CICHLID : SIENNA_CICHLID +1002:73AE 0000 0000 SIENNA_CICHLID : SIENNA_CICHLID +1002:73BF 0000 0000 SIENNA_CICHLID : SIENNA_CICHLID +1002:73C0 0000 0000 NAVY_FLOUNDER : NAVY_FLOUNDER +1002:73C1 0000 0000 NAVY_FLOUNDER : NAVY_FLOUNDER +1002:73C3 0000 0000 NAVY_FLOUNDER : NAVY_FLOUNDER +1002:73DF 0000 0000 NAVY_FLOUNDER : NAVY_FLOUNDER +1002:73E0 0000 0000 DIMGREY_CAVEFISH : DIMGREY_CAVEFISH +1002:73E1 0000 0000 DIMGREY_CAVEFISH : DIMGREY_CAVEFISH +1002:73E2 0000 0000 DIMGREY_CAVEFISH : DIMGREY_CAVEFISH +1002:73FF 0000 0000 DIMGREY_CAVEFISH : DIMGREY_CAVEFISH +1002:163F 0000 0000 VANGOGH : VanGogh diff --git a/llvm/lib/OffloadArch/amdgpu/vendor_specific_capabilities.cpp b/llvm/lib/OffloadArch/amdgpu/vendor_specific_capabilities.cpp new file mode 100644 --- /dev/null +++ b/llvm/lib/OffloadArch/amdgpu/vendor_specific_capabilities.cpp @@ -0,0 +1,252 @@ +//===-- OffloadArch/amdgpu/vendor_specific_capabilities.cpp ----*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===---------------------------------------------------------------------===// +/// +/// \file amdgpu/vendor_specific_capabilities.cpp +/// +/// Implementiton of _aot_amdgpu_capabilities() function for offload-arch tool. +/// This is only called with the -r flag to show all runtime capabilities that +/// would satisfy requirements of the compiled image. +/// +//===---------------------------------------------------------------------===// + +#include "llvm/OffloadArch/OffloadArch.h" + +// offload-arch can be built without hsa installed. Here a copy of hsa.h is +// stored with the tool in the vendor specific directory. This combined +// with dynamic loading (at runtime) of "libhsa-runtime64.so" allows +// offload-arch to be built without hsa installed. Of course hsa (rocr runtime) +// must be operational at runtime. +// +#include "hsa-subset.h" +#include +#include +#include +#include +#include +#include +#include + +struct amdgpu_features_t { + char *name_str; + uint32_t workgroup_max_size; + hsa_dim3_t grid_max_dim; + uint64_t grid_max_size; + uint32_t fbarrier_max_size; + uint16_t workgroup_max_dim[3]; + bool def_rounding_modes[3]; + bool base_rounding_modes[3]; + bool mach_models[2]; + bool profiles[2]; + bool fast_f16; +}; + +// static pointers to dynamically loaded HSA functions used in this module. +static hsa_status_t (*_dl_hsa_init)(); +static hsa_status_t (*_dl_hsa_shut_down)(); +static hsa_status_t (*_dl_hsa_isa_get_info_alt)(hsa_isa_t, hsa_isa_info_t, + void *); +static hsa_status_t (*_dl_hsa_agent_get_info)(hsa_agent_t, hsa_agent_info_t, + void *); +static hsa_status_t (*_dl_hsa_iterate_agents)( + hsa_status_t (*callback)(hsa_agent_t, void *), void *); +static hsa_status_t (*_dl_hsa_agent_iterate_isas)( + hsa_agent_t, hsa_status_t (*callback)(hsa_isa_t, void *), void *); + +// These two static vectors are created by HSA iterators and needed after +// iterators complete, so we save them statically. +static std::vector AMDGPU_FEATUREs; +static std::vector HSA_AGENTs; + +static std::string offload_arch_requested; +static bool first_call = true; + +#define _return_on_err(err) \ + { \ + if ((err) != HSA_STATUS_SUCCESS) { \ + return (err); \ + } \ + } + +static hsa_status_t get_isa_info(hsa_isa_t isa, void *data) { + hsa_status_t err; + amdgpu_features_t isa_i; + int *isa_int = reinterpret_cast(data); + (*isa_int)++; + + std::string isa_str("ISA "); + isa_str += std::to_string(*isa_int); + + uint32_t name_len; + err = _dl_hsa_isa_get_info_alt(isa, HSA_ISA_INFO_NAME_LENGTH, &name_len); + _return_on_err(err); + isa_i.name_str = new char[name_len]; + if (isa_i.name_str == nullptr) + return HSA_STATUS_ERROR_OUT_OF_RESOURCES; + err = _dl_hsa_isa_get_info_alt(isa, HSA_ISA_INFO_NAME, isa_i.name_str); + _return_on_err(err); + err = _dl_hsa_isa_get_info_alt(isa, HSA_ISA_INFO_MACHINE_MODELS, + isa_i.mach_models); + _return_on_err(err); + err = _dl_hsa_isa_get_info_alt(isa, HSA_ISA_INFO_PROFILES, isa_i.profiles); + _return_on_err(err); + err = _dl_hsa_isa_get_info_alt(isa, HSA_ISA_INFO_DEFAULT_FLOAT_ROUNDING_MODES, + isa_i.def_rounding_modes); + _return_on_err(err); + err = _dl_hsa_isa_get_info_alt( + isa, HSA_ISA_INFO_BASE_PROFILE_DEFAULT_FLOAT_ROUNDING_MODES, + isa_i.base_rounding_modes); + _return_on_err(err); + err = _dl_hsa_isa_get_info_alt(isa, HSA_ISA_INFO_FAST_F16_OPERATION, + &isa_i.fast_f16); + _return_on_err(err); + err = _dl_hsa_isa_get_info_alt(isa, HSA_ISA_INFO_WORKGROUP_MAX_DIM, + &isa_i.workgroup_max_dim); + _return_on_err(err); + err = _dl_hsa_isa_get_info_alt(isa, HSA_ISA_INFO_WORKGROUP_MAX_SIZE, + &isa_i.workgroup_max_size); + _return_on_err(err); + err = _dl_hsa_isa_get_info_alt(isa, HSA_ISA_INFO_GRID_MAX_DIM, + &isa_i.grid_max_dim); + _return_on_err(err); + err = _dl_hsa_isa_get_info_alt(isa, HSA_ISA_INFO_GRID_MAX_SIZE, + &isa_i.grid_max_size); + _return_on_err(err); + err = _dl_hsa_isa_get_info_alt(isa, HSA_ISA_INFO_FBARRIER_MAX_SIZE, + &isa_i.fbarrier_max_size); + _return_on_err(err); + + AMDGPU_FEATUREs.push_back(isa_i); + return err; +} + +static hsa_status_t iterateAgentsCallback(hsa_agent_t Agent, void *Data) { + hsa_device_type_t DeviceType; + hsa_status_t Status = + _dl_hsa_agent_get_info(Agent, HSA_AGENT_INFO_DEVICE, &DeviceType); + + // continue only if device type if GPU + if (Status != HSA_STATUS_SUCCESS || DeviceType != HSA_DEVICE_TYPE_GPU) { + return Status; + } + + std::vector *GPUs = + static_cast *>(Data); + char GPUName[64]; + Status = _dl_hsa_agent_get_info(Agent, HSA_AGENT_INFO_NAME, GPUName); + if (Status != HSA_STATUS_SUCCESS) + return Status; + if (!offload_arch_requested.compare(GPUName)) { + GPUs->push_back(GPUName); + HSA_AGENTs.push_back(&Agent); + } + return HSA_STATUS_SUCCESS; +} + +void *_aot_dynload_hsa_runtime() { + + const char *hsa_runtime_locations[] = { + "/usr/lib/aomp/lib/libhsa-runtime64.so", + "/opt/rocm/hsa/lib/libhsa-runtime64.so", + "/opt/rocm-4.1.0/hsa/lib/libhsa-runtime64.so", + }; + + void *dlhandle = nullptr; + // FIXME: before going through possible hsa locations try + // /../lib/libhsa-runtime64.so + + struct stat stat_buffer; + + // First search in system library paths. Allows user to dynamically + // load desired version of hsa runtime. + dlhandle = dlopen("libhsa-runtime64.so", RTLD_NOW); + + // In case of failure, search in known absolute locations. + if (!dlhandle) { + for (auto *rt_loc : hsa_runtime_locations) { + if (stat(rt_loc, &stat_buffer) == 0) { + dlhandle = dlopen(rt_loc, RTLD_NOW); + break; + } + } + } + + // Return null if hsa runtime is not found in system paths and in + // absolute locations. + if (!dlhandle) + return nullptr; + + // We could use real names of hsa functions but the _dl_ makes it clear + // these are dynamically loaded + *(void **)&_dl_hsa_init = dlsym(dlhandle, "hsa_init"); + *(void **)&_dl_hsa_shut_down = dlsym(dlhandle, "hsa_shut_down"); + *(void **)&_dl_hsa_isa_get_info_alt = dlsym(dlhandle, "hsa_isa_get_info_alt"); + *(void **)&_dl_hsa_agent_get_info = dlsym(dlhandle, "hsa_agent_get_info"); + *(void **)&_dl_hsa_iterate_agents = dlsym(dlhandle, "hsa_iterate_agents"); + *(void **)&_dl_hsa_agent_iterate_isas = + dlsym(dlhandle, "hsa_agent_iterate_isas"); + return dlhandle; +} + +std::string _aot_amdgpu_capabilities(uint16_t vid, uint16_t devid, + std::string oa) { + std::string amdgpu_capabilities; + offload_arch_requested = oa; + + if (first_call) { + first_call = false; + void *dlhandle = _aot_dynload_hsa_runtime(); + if (!dlhandle) { + amdgpu_capabilities.append(" HSAERROR-LOADING"); + return amdgpu_capabilities; + } + hsa_status_t Status = _dl_hsa_init(); + if (Status != HSA_STATUS_SUCCESS) { + amdgpu_capabilities.append(" HSAERROR-INITIALIZATION"); + return amdgpu_capabilities; + } + } + std::vector GPUs; + hsa_status_t Status = _dl_hsa_iterate_agents(iterateAgentsCallback, &GPUs); + if (Status != HSA_STATUS_SUCCESS) { + amdgpu_capabilities.append(" HSAERROR-AGENT_ITERATION"); + return amdgpu_capabilities; + } + if (GPUs.empty()) { + amdgpu_capabilities.append("NOT_VISIBLE"); + return amdgpu_capabilities; + } + + int isa_number = 0; + hsa_agent_t *agent_ptr = HSA_AGENTs[isa_number]; + Status = _dl_hsa_agent_iterate_isas(*agent_ptr, get_isa_info, &isa_number); + if (Status == HSA_STATUS_ERROR_INVALID_AGENT) { + amdgpu_capabilities.append(" HSAERROR-INVALID_AGENT"); + return amdgpu_capabilities; + } + + // parse features from field name_str of last amdgpu_features_t found + std::string features(AMDGPU_FEATUREs[isa_number - 1].name_str); + std::string::size_type prev_pos = 0, pos = 0; + int fnum = 0; + while ((pos = features.find(":", pos)) != std::string::npos) { + std::string substring(features.substr(prev_pos, pos - prev_pos)); + if (fnum) { + amdgpu_capabilities.append(" "); + amdgpu_capabilities.append(substring); + } + prev_pos = ++pos; + fnum++; + } + if (prev_pos) { + amdgpu_capabilities.append(" "); + amdgpu_capabilities.append(features.substr(prev_pos, pos - prev_pos)); + } + // We cannot shutdown hsa or close dlhandle because + // _aot_amd_capabilities could be called multiple times. + return amdgpu_capabilities; +} diff --git a/llvm/lib/OffloadArch/intelhd/codename2offloadarch.txt b/llvm/lib/OffloadArch/intelhd/codename2offloadarch.txt new file mode 100644 --- /dev/null +++ b/llvm/lib/OffloadArch/intelhd/codename2offloadarch.txt @@ -0,0 +1,18 @@ +Ivy_Bridge_GT1 spirv +HD_Graphics spirv +HD_Graphics_5600 spirv +HD_Graphics_5500 spirv +HD_Graphics_5300 spirv +HD_Graphics_6000 spirv +HD_Graphics_510 spirv +HD_Graphics_530 spirv +Skylake_GT2 spirv +HD_Graphics_P530 spirv +HD_Graphics_515 spirv +HD_Graphics_520 spirv +HD_Graphics_610 spirv +HD_Graphics_630 spirv +HD_Graphics_620 spirv +UHD_Graphics_620 spirv +HD_Graphics_P630 spirv +Integrated_HD_Graphics spirv diff --git a/llvm/lib/OffloadArch/intelhd/pciid2codename.txt b/llvm/lib/OffloadArch/intelhd/pciid2codename.txt new file mode 100644 --- /dev/null +++ b/llvm/lib/OffloadArch/intelhd/pciid2codename.txt @@ -0,0 +1,20 @@ +8086:1458 d000 0000 Ivy_Bridge_GT1 : [HD_Graphics] +8086:1606 0000 0000 HD_Graphics : +8086:1612 0000 0000 HD_Graphics_5600 : +8086:1616 0000 0000 HD_Graphics_5500 : +8086:161e 0000 0000 HD_Graphics_5300 : +8086:1626 0000 0000 HD_Graphics_6000 : +8086:1902 0000 0000 HD_Graphics_510 : +8086:1906 0000 0000 HD_Graphics_510 : +8086:1912 0000 0000 HD_Graphics_530 : +8086:1916 0000 0000 Skylake_GT2 : [HD_Graphics_520] +8086:191b 0000 0000 HD_Graphics_530 : +8086:191d 0000 0000 HD_Graphics_P530 : +8086:191e 0000 0000 HD_Graphics_515 : +8086:1921 0000 0000 HD_Graphics_520 : +8086:5902 0000 0000 HD_Graphics_610 : +8086:5912 0000 0000 HD_Graphics_630 : +8086:5916 0000 0000 HD_Graphics_620 : +8086:5917 0000 0000 UHD_Graphics_620 : +8086:591d 0000 0000 HD_Graphics_P630 : +8086:041e 0000 0000 Integrated_HD_Graphics : diff --git a/llvm/lib/OffloadArch/intelhd/vendor_specific_capabilities.cpp b/llvm/lib/OffloadArch/intelhd/vendor_specific_capabilities.cpp new file mode 100644 --- /dev/null +++ b/llvm/lib/OffloadArch/intelhd/vendor_specific_capabilities.cpp @@ -0,0 +1,26 @@ +//===-- OffloadArch/intelhd/vendor_specific_capabilities.cpp ----*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===---------------------------------------------------------------------===// +/// +/// \file amdgpu/vendor_specific_capabilities.cpp +/// +/// Implementiton of _aot_amdgpu_capabilities() function for offload-arch tool. +/// This is only called with the -r flag to show all runtime capabilities that +/// would satisfy requirements of the compiled image. +/// +//===---------------------------------------------------------------------===// + +#include "llvm/OffloadArch/OffloadArch.h" + +std::string _aot_intelhd_capabilities(uint16_t vid, uint16_t devid, + std::string oa) { + std::string intelhd_capabilities; + /* add code here to detect intelhd capabilities for any intelhd requirements + * that may be generated by clang compiler + */ + return intelhd_capabilities; +} diff --git a/llvm/lib/OffloadArch/make_generated_offload_arch_h.sh b/llvm/lib/OffloadArch/make_generated_offload_arch_h.sh new file mode 100755 --- /dev/null +++ b/llvm/lib/OffloadArch/make_generated_offload_arch_h.sh @@ -0,0 +1,178 @@ +#!/bin/bash +# +# make_generated_offload_arch_h.sh - Create the fle generated_offload_arch.h +# +# Written by Greg Rodgers Gregory.Rodgers@amd.com +# Copyright (c) 2021 ADVANCED MICRO DEVICES, INC. +# +# AMD is granting you permission to use this software and documentation (if any) (collectively, the +# Materials) pursuant to the terms and conditions of the Software License Agreement included with the +# Materials. If you do not have a copy of the Software License Agreement, contact your AMD +# representative for a copy. +# +# You agree that you will not reverse engineer or decompile the Materials, in whole or in part, except for +# example code which is provided in source code form and as allowed by applicable law. +# +# WARRANTY DISCLAIMER: THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY +# KIND. AMD DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING BUT NOT +# LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +# PURPOSE, TITLE, NON-INFRINGEMENT, THAT THE SOFTWARE WILL RUN UNINTERRUPTED OR ERROR- +# FREE OR WARRANTIES ARISING FROM CUSTOM OF TRADE OR COURSE OF USAGE. THE ENTIRE RISK +# ASSOCIATED WITH THE USE OF THE SOFTWARE IS ASSUMED BY YOU. Some jurisdictions do not +# allow the exclusion of implied warranties, so the above exclusion may not apply to You. +# +# LIMITATION OF LIABILITY AND INDEMNIFICATION: AMD AND ITS LICENSORS WILL NOT, +# UNDER ANY CIRCUMSTANCES BE LIABLE TO YOU FOR ANY PUNITIVE, DIRECT, INCIDENTAL, +# INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM USE OF THE SOFTWARE OR THIS +# AGREEMENT EVEN IF AMD AND ITS LICENSORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH +# DAMAGES. In no event shall AMD's total liability to You for all damages, losses, and +# causes of action (whether in contract, tort (including negligence) or otherwise) +# exceed the amount of $100 USD. You agree to defend, indemnify and hold harmless +# AMD and its licensors, and any of their directors, officers, employees, affiliates or +# agents from and against any and all loss, damage, liability and other expenses +# (including reasonable attorneys' fees), resulting from Your use of the Software or +# violation of the terms and conditions of this Agreement. +# +# U.S. GOVERNMENT RESTRICTED RIGHTS: The Materials are provided with "RESTRICTED RIGHTS." +# Use, duplication, or disclosure by the Government is subject to the restrictions as set +# forth in FAR 52.227-14 and DFAR252.227-7013, et seq., or its successor. Use of the +# Materials by the Government constitutes acknowledgement of AMD's proprietary rights in them. +# +# EXPORT RESTRICTIONS: The Materials may be subject to export restrictions as stated in the +# Software License Agreement. +# + +INPUTDIR=$1 +if [ -z $INPUTDIR ] ; then + INPUTDIR=$PWD +fi + +# These are the input files +AOT_PCIID2CODENAME="$INPUTDIR/amdgpu/pciid2codename.txt $INPUTDIR/nvidia/pciid2codename.txt $INPUTDIR/intelhd/pciid2codename.txt" +AOT_CODENAME2OFFLOADARCH="$INPUTDIR/amdgpu/codename2offloadarch.txt $INPUTDIR/nvidia/codename2offloadarch.txt $INPUTDIR/intelhd/codename2offloadarch.txt" + +# This is the output file which is always written to current dir +AOT_DOTH_FILE="$PWD/generated_offload_arch.h" + +function get_offloadarch_id_from_codename +{ + _codename=$1 + _entry=`grep -m1 "^$_codename" $AOT_CODENAME2OFFLOADARCH` + if [ $? == 0 ] ; then + _offloadarchid=`echo $_entry | awk '{print $2}'` + else + _offloadarchid="$_codename" + fi + echo $_offloadarchid +} + +function write_AOT_OFFLOADARCH() +{ + echo "typedef enum {" >> $AOT_DOTH_FILE + cat $AOT_CODENAME2OFFLOADARCH | cut -d" " -f2 | sort -u > $aot_tmpfile + while read -r line ; do + echo " AOT_${line^^}," >> $AOT_DOTH_FILE + done < $aot_tmpfile + echo "} AOT_OFFLOADARCH;" >> $AOT_DOTH_FILE +} + +function write_AOT_CODENAME() +{ + echo "typedef enum {" >> $AOT_DOTH_FILE + cat $AOT_CODENAME2OFFLOADARCH | while read -r line ; do + codename=`echo $line | cut -d" " -f1` + echo " AOT_CN_${codename^^}," >> $AOT_DOTH_FILE + done + echo "} AOT_CODENAME;" >> $AOT_DOTH_FILE +} +function write_AOT_CODENAMEID_TO_STRING() +{ + echo "extern const AOT_CODENAME_ID_TO_STRING AOT_CODENAMES[] = {" >>$AOT_DOTH_FILE + cat $AOT_CODENAME2OFFLOADARCH | while read -r line ; do + codename=`echo $line | cut -d" " -f1` + echo " {AOT_CN_${codename^^}, \"${codename}\"}," >> $AOT_DOTH_FILE + done + echo "};" >> $AOT_DOTH_FILE +} +function write_AOT_OFFLOADARCH_TO_STRING() +{ + echo "extern const AOT_OFFLOADARCH_TO_STRING AOT_OFFLOADARCHS[] = {" >>$AOT_DOTH_FILE + cat $AOT_CODENAME2OFFLOADARCH | cut -d" " -f2 | sort -u > $aot_tmpfile + while read -r line ; do + echo " {AOT_${line^^}, \"${line}\"}," >> $AOT_DOTH_FILE + done < $aot_tmpfile + echo "};" >> $AOT_DOTH_FILE +} + +function write_AOT_PROLOG() +{ +/bin/cat 2>&1 <<"EOF" > $aot_tmpfile +// This file is generated by make_generated_offload_arch_h.sh +// It is only included by OffloadArch.cpp +#include +#include +EOF +cat $aot_tmpfile >> $AOT_DOTH_FILE +} + +function write_AOT_STRUCTS() +{ +/bin/cat 2>&1 <<"EOF" > $aot_tmpfile + +struct AOT_CODENAME_ID_TO_STRING{ + AOT_CODENAME codename_id; + const char* codename; +}; + +struct AOT_OFFLOADARCH_TO_STRING{ + AOT_OFFLOADARCH offloadarch_id; + const char* offloadarch; +}; + +struct AOT_TABLE_ENTRY{ + uint16_t vendorid; + uint16_t devid; + AOT_CODENAME codename_id; + AOT_OFFLOADARCH offloadarch_id; +}; +EOF +cat $aot_tmpfile >> $AOT_DOTH_FILE +} + +function write_AOT_TABLE() +{ + echo "extern const AOT_TABLE_ENTRY AOT_TABLE[] = {" >>$AOT_DOTH_FILE + cat $AOT_PCIID2CODENAME | sort -u -t" " -k1 > $aot_tmpfile + while read -r line ; do + codename=`echo $line | cut -d" " -f4` + # only proceed if we know about this codename + grep -q "^$codename " $AOT_CODENAME2OFFLOADARCH + if [ $? == 0 ] ; then + vid=`echo $line | cut -d":" -f1` + devid=`echo $line | cut -d" " -f1 | cut -d":" -f2` + offloadarchid=$(get_offloadarch_id_from_codename $codename) + echo "{ 0x${vid}, 0x${devid}, AOT_CN_${codename^^}, AOT_${offloadarchid^^} }," >>$AOT_DOTH_FILE + fi + done < $aot_tmpfile + echo "};" >> $AOT_DOTH_FILE +} + +# =========== Main code starts here ====================== + +# we dont want to append to existing file +[ -f $AOT_DOTH_FILE ] && rm $AOT_DOTH_FILE +touch $AOT_DOTH_FILE + +aot_tmpfile="/tmp/zz$$" + +write_AOT_PROLOG +write_AOT_OFFLOADARCH +write_AOT_CODENAME +write_AOT_STRUCTS +write_AOT_CODENAMEID_TO_STRING +write_AOT_OFFLOADARCH_TO_STRING +write_AOT_TABLE + +rm $aot_tmpfile + +exit 0 diff --git a/llvm/lib/OffloadArch/nvidia/codename2offloadarch.txt b/llvm/lib/OffloadArch/nvidia/codename2offloadarch.txt new file mode 100644 --- /dev/null +++ b/llvm/lib/OffloadArch/nvidia/codename2offloadarch.txt @@ -0,0 +1,12 @@ +k4000 sm_30 +k4200 sm_30 +gtx750 sm_50 +gtx960m sm_50 +gtx980 sm_35 +gtx1050 sm_61 +gtx1060 sm_61 +gtx1080 sm_61 +gt730 sm_35 +p100 sm_60 +gv100 sm_70 +v100 sm_70 diff --git a/llvm/lib/OffloadArch/nvidia/pciid2codename.txt b/llvm/lib/OffloadArch/nvidia/pciid2codename.txt new file mode 100644 --- /dev/null +++ b/llvm/lib/OffloadArch/nvidia/pciid2codename.txt @@ -0,0 +1,1235 @@ +10de:0040 0000 0000 6800 : NV40 [GeForce 6800 Ultra] +10de:0041 0000 0000 6800 : NV40 [GeForce 6800] +10de:0041 1043 817b 6800 : V9999 Gamer Edition +10de:0041 107d 2992 6800 : WinFast A400 +10de:0041 1458 310f 6800 : Geforce 6800 GV-N6812 +10de:0042 0000 0000 6800le : NV40 [GeForce 6800 LE] +10de:0042 107d 299b 6800le : WinFast A400 LE +10de:0043 0000 0000 6800xe : NV40 [GeForce 6800 XE] +10de:0044 0000 0000 6800xt : NV40 [GeForce 6800 XT] +10de:0045 0000 0000 6800gt : NV40 [GeForce 6800 GT] +10de:0045 1043 817d 6800gt : V9999GT +10de:0045 1458 3140 6800gt : GV-N68T256D +10de:0047 0000 0000 6800gs : NV40 [GeForce 6800 GS] +10de:0047 1682 2109 6800gs : GeForce 6800 GS +10de:0048 0000 0000 6800xt : NV40 [GeForce 6800 XT] +10de:004e 0000 0000 fx4000 : NV40GL [Quadro FX 4000] +10de:0090 0000 0000 7800gtx : G70 [GeForce 7800 GTX] +10de:0091 0000 0000 7800gtx : G70 [GeForce 7800 GTX] +10de:0092 0000 0000 7800gt : G70 [GeForce 7800 GT] +10de:0093 0000 0000 7800gs : G70 [GeForce 7800 GS] +10de:0095 0000 0000 7800sli : G70 [GeForce 7800 SLI] +10de:0097 0000 0000 gts250 : G70 [GeForce GTS 250] +10de:0098 0000 0000 go7800 : G70M [GeForce Go 7800] +10de:0099 0000 0000 go7800gtx : G70M [GeForce Go 7800 GTX] +10de:009d 0000 0000 fx4500 : G70GL [Quadro FX 4500] +10de:00c0 0000 0000 6800gs : NV41 [GeForce 6800 GS] +10de:00c1 0000 0000 6800 : NV41 [GeForce 6800] +10de:00c2 0000 0000 6800le : NV41 [GeForce 6800 LE] +10de:00c3 0000 0000 6800xt : NV41 [GeForce 6800 XT] +10de:00c8 0000 0000 go6800 : NV41M [GeForce Go 6800] +10de:00c9 0000 0000 go6800 : NV41M [GeForce Go 6800 Ultra] +10de:00cc 0000 0000 fxgo1400 : NV41GLM [Quadro FX Go1400] +10de:00cd 0000 0000 fx3450/4000sdi : NV42GL [Quadro FX 3450/4000 SDI] +10de:00cd 10de 029b fx3450/4000sdi : Quadro FX 3450 +10de:00ce 0000 0000 fx1400 : NV41GL [Quadro FX 1400] +10de:00f1 0000 0000 6600gt : NV43 [GeForce 6600 GT] +10de:00f1 1043 81a6 6600gt : N6600GT TD 128M AGP +10de:00f1 1043 81c6 6600gt : N6600GT TD 128M AGP +10de:00f1 1458 3150 6600gt : GV-N66T128VP +10de:00f1 1554 1191 6600gt : PixelView PV-N43UA (128KD) +10de:00f1 1682 2119 6600gt : GeForce 6600 GT AGP +10de:00f2 0000 0000 6600 : NV43 [GeForce 6600] +10de:00f2 1554 1194 6600 : PixelView PV-N43AT (256KD) +10de:00f2 1682 211c 6600 : GeForce 6600 256MB DDR DUAL DVI TV +10de:00f3 0000 0000 6200 : NV43 [GeForce 6200] +10de:00f4 0000 0000 6600le : NV43 [GeForce 6600 LE] +10de:00f5 0000 0000 7800gs : G71 [GeForce 7800 GS] +10de:00f6 0000 0000 6800gs/xt : NV43 [GeForce 6800 GS/XT] +10de:00f6 1682 217e 6800gs/xt : XFX GeForce 6800 XTreme 256MB DDR3 AGP +10de:00f8 0000 0000 fx3400/4400 : NV45GL [Quadro FX 3400/4400] +10de:00f9 0000 0000 6800gt/gto/ultra : NV40 [GeForce 6800 GT/GTO/Ultra] +10de:00f9 10de 00f9 6800gt/gto/ultra : NV40 [GeForce 6800 GT] +10de:00f9 1682 2120 6800gt/gto/ultra : GEFORCE 6800 GT PCI-E +10de:00fa 0000 0000 pcx5750 : NV39 [GeForce PCX 5750] +10de:00fb 0000 0000 pcx5900 : NV35 [GeForce PCX 5900] +10de:00fc 0000 0000 fx330/geforcepcx5300 : NV37GL [Quadro FX 330/GeForce PCX 5300] +10de:00fd 0000 0000 pci-eseries : NV37GL [Quadro PCI-E Series] +10de:00fe 0000 0000 fx1300 : NV38GL [Quadro FX 1300] +10de:00ff 0000 0000 pcx4300 : NV19 [GeForce PCX 4300] +10de:0100 0000 0000 256sdr : NV10 [GeForce 256 SDR] +10de:0100 1043 0200 256sdr : AGP-V6600 SGRAM +10de:0100 1043 0201 256sdr : AGP-V6600 SDRAM +10de:0100 1043 4008 256sdr : AGP-V6600 SGRAM +10de:0100 1043 4009 256sdr : AGP-V6600 SDRAM +10de:0100 1048 0c41 256sdr : Erazor X +10de:0100 1048 0c43 256sdr : ERAZOR X PCI +10de:0100 1048 0c48 256sdr : Synergy Force +10de:0100 1102 102d 256sdr : CT6941 GeForce 256 +10de:0100 14af 5022 256sdr : 3D Prophet SE +10de:0101 0000 0000 256ddr : NV10 [GeForce 256 DDR] +10de:0101 1043 0202 256ddr : AGP-V6800 DDR +10de:0101 1043 400a 256ddr : AGP-V6800 DDR SGRAM +10de:0101 1043 400b 256ddr : AGP-V6800 DDR SDRAM +10de:0101 1048 0c42 256ddr : Erazor X +10de:0101 107d 2822 256ddr : WinFast GeForce 256 +10de:0101 1102 102e 256ddr : CT6970/CT6971 +10de:0101 14af 5021 256ddr : 3D Prophet DDR-DVI +10de:0140 0000 0000 6600gt : NV43 [GeForce 6600 GT] +10de:0140 1458 3125 6600gt : GV-NX66T128D +10de:0140 1458 3126 6600gt : GV-NX66T256DE +10de:0140 1462 8939 6600gt : MS-8983 +10de:0141 0000 0000 6600 : NV43 [GeForce 6600] +10de:0141 1043 81b0 6600 : EN6600 Silencer +10de:0141 107d 593a 6600 : LR2A22 128MB TV OUT +10de:0141 107d 597b 6600 : WINFAST PX6600 +10de:0141 1458 3124 6600 : GV-NX66128DP Turbo Force Edition +10de:0142 0000 0000 6600le : NV43 [GeForce 6600 LE] +10de:0143 0000 0000 6600ve : NV43 [GeForce 6600 VE] +10de:0144 0000 0000 go6600 : NV43M [GeForce Go 6600] +10de:0145 0000 0000 6610xl : NV43 [GeForce 6610 XL] +10de:0146 0000 0000 go6200te6600te : NV43M [GeForce Go6200 TE / 6600 TE] +10de:0147 0000 0000 6700xl : NV43 [GeForce 6700 XL] +10de:0148 0000 0000 go6600 : NV43M [GeForce Go 6600] +10de:0149 0000 0000 go6600gt : NV43M [GeForce Go 6600 GT] +10de:014a 0000 0000 nvs440 : NV43 [Quadro NVS 440] +10de:014d 0000 0000 fx550 : NV43GL [Quadro FX 550] +10de:014e 0000 0000 fx540 : NV43GL [Quadro FX 540] +10de:014f 0000 0000 6200 : NV43 [GeForce 6200] +10de:0160 0000 0000 6500 : NV44 [GeForce 6500] +10de:0161 0000 0000 6200turbocache : NV44 [GeForce 6200 TurboCache] +10de:0162 0000 0000 6200turbocache : NV44 [GeForce 6200 SE TurboCache] +10de:0163 0000 0000 6200le : NV44 [GeForce 6200 LE] +10de:0164 0000 0000 go6200 : NV44M [GeForce Go 6200] +10de:0165 0000 0000 nvs285 : NV44 [Quadro NVS 285] +10de:0166 0000 0000 go6400 : NV44M [GeForce Go 6400] +10de:0167 0000 0000 go6200 : NV44M [GeForce Go 6200] +10de:0168 0000 0000 go6400 : NV44M [GeForce Go 6400] +10de:0169 0000 0000 6250 : NV44 [GeForce 6250] +10de:016a 0000 0000 7100gs : NV44 [GeForce 7100 GS] +10de:017a 0000 0000 nvs : NV17GL [Quadro NVS] +10de:018a 0000 0000 nvs280sd : NV18GL [Quadro NVS 280 SD] +10de:018c 0000 0000 nvs50 : NV18GL [Quadro NVS 50 PCI] +10de:0190 0000 0000 8800gts8800gtx : G80 [GeForce 8800 GTS / 8800 GTX] +10de:0191 0000 0000 8800gtx : G80 [GeForce 8800 GTX] +10de:0192 0000 0000 8800gts : G80 [GeForce 8800 GTS] +10de:0193 0000 0000 8800gts : G80 [GeForce 8800 GTS] +10de:0193 107d 20bd 8800gts : WinFast PX 8800 GTS TDH +10de:0194 0000 0000 8800 : G80 [GeForce 8800 Ultra] +10de:0197 0000 0000 c870 : G80GL [Tesla C870] +10de:019d 0000 0000 fx5600 : G80GL [Quadro FX 5600] +10de:019e 0000 0000 fx4600 : G80GL [Quadro FX 4600] +10de:01d0 0000 0000 7350le : G72 [GeForce 7350 LE] +10de:01d1 0000 0000 7300le : G72 [GeForce 7300 LE] +10de:01d1 107d 5efa 7300le : WinFast PX7300LE-TD128 +10de:01d1 107d 5efb 7300le : WinFast PX7300LE-TD256 +10de:01d1 1462 0345 7300le : 7300LE PCI Express Graphics Adapter +10de:01d2 0000 0000 7550le : G72 [GeForce 7550 LE] +10de:01d3 0000 0000 7200gs7300 : G72 [GeForce 7200 GS / 7300 SE] +10de:01d3 1043 8203 7200gs7300 : EN7300SE +10de:01d3 1043 8250 7200gs7300 : EN7200GS +10de:01d6 0000 0000 go7200 : G72M [GeForce Go 7200] +10de:01d7 0000 0000 nvs110m/geforcego7300 : G72M [Quadro NVS 110M/GeForce Go 7300] +10de:01d8 0000 0000 go7400 : G72M [GeForce Go 7400] +10de:01d8 1028 01d7 go7400 : XPS M1210 +10de:01d9 0000 0000 go7450 : G72M [GeForce Go 7450] +10de:01da 0000 0000 nvs110m : G72M [Quadro NVS 110M] +10de:01db 0000 0000 nvs120m : G72M [Quadro NVS 120M] +10de:01dc 0000 0000 fx350m : G72GLM [Quadro FX 350M] +10de:01dd 0000 0000 7500le : G72 [GeForce 7500 LE] +10de:01de 0000 0000 fx350 : G72GL [Quadro FX 350] +10de:01de 10de 01dc fx350 : Quadro FX Go350M +10de:01df 0000 0000 7300gs : G72 [GeForce 7300 GS] +10de:0203 0000 0000 dcc : NV20GL [Quadro DCC] +10de:0211 0000 0000 6800 : NV48 [GeForce 6800] +10de:0212 0000 0000 6800le : NV48 [GeForce 6800 LE] +10de:0215 0000 0000 6800gt : NV48 [GeForce 6800 GT] +10de:0218 0000 0000 6800xt : NV48 [GeForce 6800 XT] +10de:0221 0000 0000 6200 : NV44A [GeForce 6200] +10de:0221 1043 81e1 6200 : N6200/TD/256M/A +10de:0221 3842 a341 6200 : 256A8N341DX +10de:0222 0000 0000 6200a-le : NV44 [GeForce 6200 A-LE] +10de:0240 0000 0000 6150 : C51PV [GeForce 6150] +10de:0240 1043 81cd 6150 : A8N-VM CSM +10de:0240 1462 7207 6150 : K8NGM2 series +10de:0241 0000 0000 6150le : C51 [GeForce 6150 LE] +10de:0242 0000 0000 6100 : C51G [GeForce 6100] +10de:0242 105b 0cad 6100 : Winfast 6100K8MB +10de:0244 0000 0000 go6150 : C51 [GeForce Go 6150] +10de:0244 103c 30b5 go6150 : Presario V3242AU +10de:0244 103c 30b7 go6150 : Presario V6133CL +10de:0244 10de 0244 go6150 : GeForce Go 6150 +10de:0245 0000 0000 nvs210s/geforce6150le : C51 [Quadro NVS 210S/GeForce 6150LE] +10de:0247 0000 0000 go6100 : C51 [GeForce Go 6100] +10de:0247 1043 1382 go6100 : MCP51 PCI-X GeForce Go 6100 +10de:0290 0000 0000 7900gtx : G71 [GeForce 7900 GTX] +10de:0291 0000 0000 7900gt/gto : G71 [GeForce 7900 GT/GTO] +10de:0291 10de 042b 7900gt/gto : NX7900GTO-T2D512E [7900 GTO] +10de:0292 0000 0000 7900gs : G71 [GeForce 7900 GS] +10de:0293 0000 0000 7900gx2 : G71 [GeForce 7900 GX2] +10de:0294 0000 0000 7950gx2 : G71 [GeForce 7950 GX2] +10de:0295 0000 0000 7950gt : G71 [GeForce 7950 GT] +10de:0295 1043 8225 7950gt : GeForce 7950 GT +10de:0295 107d 2a68 7950gt : WinFast PX7950GT TDH +10de:0295 1462 0663 7950gt : NX7950GT-VT2D512EZ-HD +10de:0297 0000 0000 go7950gtx : G71M [GeForce Go 7950 GTX] +10de:0298 0000 0000 go7900gs : G71M [GeForce Go 7900 GS] +10de:0299 0000 0000 go7900gtx : G71M [GeForce Go 7900 GTX] +10de:029a 0000 0000 fx2500m : G71GLM [Quadro FX 2500M] +10de:029b 0000 0000 fx1500m : G71GLM [Quadro FX 1500M] +10de:029c 0000 0000 fx5500 : G71GL [Quadro FX 5500] +10de:029d 0000 0000 fx3500 : G71GL [Quadro FX 3500] +10de:029d 1028 019b fx3500 : G71GLM [Quadro FX 3500M] +10de:029e 0000 0000 fx1500 : G71GL [Quadro FX 1500] +10de:029f 0000 0000 fx4500x2 : G71GL [Quadro FX 4500 X2] +10de:02e0 0000 0000 7600gt : G73 [GeForce 7600 GT] +10de:02e0 02e0 2249 7600gt : GF 7600GT 560M 256MB DDR3 DUAL DVI TV +10de:02e1 0000 0000 7600gs : G73 [GeForce 7600 GS] +10de:02e1 1682 222b 7600gs : PV-T73K-UAL3 (256MB) +10de:02e1 1682 2247 7600gs : GF 7600GS 512MB DDR2 +10de:02e2 0000 0000 7300gt : G73 [GeForce 7300 GT] +10de:02e3 0000 0000 7900gs : G71 [GeForce 7900 GS] +10de:02e4 0000 0000 7950gt : G71 [GeForce 7950 GT] +10de:02e4 1682 2271 7950gt : PV-T71A-YDF7 (512MB) +10de:0300 0000 0000 fx : NV30 [GeForce FX] +10de:0301 0000 0000 fx5800 : NV30 [GeForce FX 5800 Ultra] +10de:0302 0000 0000 fx5800 : NV30 [GeForce FX 5800] +10de:0308 0000 0000 fx2000 : NV30GL [Quadro FX 2000] +10de:0309 0000 0000 fx1000 : NV30GL [Quadro FX 1000] +10de:0311 0000 0000 fx5600 : NV31 [GeForce FX 5600 Ultra] +10de:0312 0000 0000 fx5600 : NV31 [GeForce FX 5600] +10de:0314 0000 0000 fx5600xt : NV31 [GeForce FX 5600XT] +10de:0314 1043 814a fx5600xt : V9560XT/TD +10de:031a 0000 0000 fxgo5600 : NV31M [GeForce FX Go5600] +10de:031b 0000 0000 fxgo5650 : NV31M [GeForce FX Go5650] +10de:031c 0000 0000 fxgo700 : NV31GLM [Quadro FX Go700] +10de:0320 0000 0000 fx5200 : NV34 [GeForce FX 5200] +10de:0321 0000 0000 fx5200 : NV34 [GeForce FX 5200 Ultra] +10de:0322 0000 0000 fx5200 : NV34 [GeForce FX 5200] +10de:0322 1043 02fb fx5200 : V9250 Magic +10de:0322 1043 8180 fx5200 : V9520-X/TD/128M +10de:0322 107d 2967 fx5200 : WinFast A340T 128MB +10de:0322 1462 9110 fx5200 : MS-8911 (FX5200-TD128) +10de:0322 1462 9171 fx5200 : MS-8917 (FX5200-T128) +10de:0322 1462 9360 fx5200 : MS-8936 (FX5200-T128) +10de:0322 1682 1351 fx5200 : GeForce FX 5200 +10de:0323 0000 0000 fx5200le : NV34 [GeForce FX 5200LE] +10de:0324 0000 0000 fxgo520064m : NV34M [GeForce FX Go5200 64M] +10de:0324 1028 0196 fxgo520064m : Inspiron 5160 +10de:0324 103c 006a fxgo520064m : Pavilion ZD7000 laptop +10de:0324 1071 8160 fxgo520064m : MIM2000 +10de:0325 0000 0000 fxgo5250 : NV34M [GeForce FX Go5250] +10de:0326 0000 0000 fx5500 : NV34 [GeForce FX 5500] +10de:0326 1458 310d fx5500 : GeForce FX 5500 128 MB +10de:0326 1682 2034 fx5500 : GeForce 5500 256 MB +10de:0327 0000 0000 fx5100 : NV34 [GeForce FX 5100] +10de:0328 0000 0000 fxgo520032m/64m : NV34M [GeForce FX Go5200 32M/64M] +10de:0329 0000 0000 fxgo5200 : NV34M [GeForce FX Go5200] +10de:0329 10de 0010 fxgo5200 : Powerbook G4 +10de:032a 0000 0000 nvs280 : NV34GL [Quadro NVS 280 PCI] +10de:032b 0000 0000 fx500/600 : NV34GL [Quadro FX 500/600 PCI] +10de:032c 0000 0000 fxgo5300go5350 : NV34M [GeForce FX Go5300 / Go5350] +10de:032d 0000 0000 fxgo5100 : NV34M [GeForce FX Go5100] +10de:032f 0000 0000 fx5200 : NV34 [GeForce FX 5200] +10de:0330 0000 0000 fx5900 : NV35 [GeForce FX 5900 Ultra] +10de:0330 1043 8137 fx5900 : V9950 Ultra / 256 MB +10de:0331 0000 0000 fx5900 : NV35 [GeForce FX 5900] +10de:0331 1043 8145 fx5900 : V9950GE +10de:0332 0000 0000 fx5900xt : NV35 [GeForce FX 5900XT] +10de:0333 0000 0000 fx5950 : NV38 [GeForce FX 5950 Ultra] +10de:0334 0000 0000 fx5900zt : NV35 [GeForce FX 5900ZT] +10de:0334 1462 9373 fx5900zt : FX5900ZT-VTD128 (MS-8937) +10de:0338 0000 0000 fx3000 : NV35GL [Quadro FX 3000] +10de:033f 0000 0000 fx700 : NV35GL [Quadro FX 700] +10de:0341 0000 0000 fx5700 : NV36 [GeForce FX 5700 Ultra] +10de:0341 1462 9380 fx5700 : MS-8938 (FX5700U-TD128) +10de:0342 0000 0000 fx5700 : NV36 [GeForce FX 5700] +10de:0343 0000 0000 fx5700le : NV36 [GeForce FX 5700LE] +10de:0344 0000 0000 fx5700ve : NV36 [GeForce FX 5700VE] +10de:0347 0000 0000 fxgo5700 : NV36M [GeForce FX Go5700] +10de:0347 103c 006a fxgo5700 : NX9500 +10de:0348 0000 0000 fxgo5700 : NV36M [GeForce FX Go5700] +10de:034c 0000 0000 fxgo1000 : NV36 [Quadro FX Go1000] +10de:034e 0000 0000 fx1100 : NV36GL [Quadro FX 1100] +10de:038b 0000 0000 7650gs : G73 [GeForce 7650 GS] +10de:0390 0000 0000 7650gs : G73 [GeForce 7650 GS] +10de:0391 0000 0000 7600gt : G73 [GeForce 7600 GT] +10de:0391 1458 3427 7600gt : GV-NX76T128D-RH +10de:0391 1462 0452 7600gt : NX7600GT-VT2D256E +10de:0392 0000 0000 7600gs : G73 [GeForce 7600 GS] +10de:0392 1462 0622 7600gs : NX7600GS-T2D256EH +10de:0393 0000 0000 7300gt : G73 [GeForce 7300 GT] +10de:0393 10de 0412 7300gt : NX7300GT-TD256EH +10de:0393 1462 0412 7300gt : NX7300GT-TD256EH +10de:0394 0000 0000 7600le : G73 [GeForce 7600 LE] +10de:0395 0000 0000 7300gt : G73 [GeForce 7300 GT] +10de:0397 0000 0000 go7700 : G73M [GeForce Go 7700] +10de:0398 0000 0000 go7600 : G73M [GeForce Go 7600] +10de:0398 1025 006c go7600 : Aspire 9814WKMi +10de:0399 0000 0000 go7600gt : G73M [GeForce Go 7600 GT] +10de:039a 0000 0000 nvs300m : G73M [Quadro NVS 300M] +10de:039b 0000 0000 go7900 : G73M [GeForce Go 7900 SE] +10de:039c 0000 0000 fx550m : G73GLM [Quadro FX 550M] +10de:039c 10de 039c fx550m : Quadro FX 560M +10de:039e 0000 0000 fx560 : G73GL [Quadro FX 560] +10de:03d0 0000 0000 6150senforce430 : C61 [GeForce 6150SE nForce 430] +10de:03d0 1028 020e 6150senforce430 : Inspiron 531 +10de:03d1 0000 0000 6100nforce405 : C61 [GeForce 6100 nForce 405] +10de:03d2 0000 0000 6100nforce400 : C61 [GeForce 6100 nForce 400] +10de:03d5 0000 0000 6100nforce420 : C61 [GeForce 6100 nForce 420] +10de:03d6 0000 0000 7025nforce630a : C61 [GeForce 7025 / nForce 630a] +10de:0400 0000 0000 8600gts : G84 [GeForce 8600 GTS] +10de:0400 1043 8241 8600gts : EN8600GTS +10de:0401 0000 0000 8600gt : G84 [GeForce 8600 GT] +10de:0402 0000 0000 8600gt : G84 [GeForce 8600 GT] +10de:0402 1458 3455 8600gt : GV-NX86T512H +10de:0402 1462 0910 8600gt : NX8600GT-T2D256EZ +10de:0403 0000 0000 8600gs : G84 [GeForce 8600 GS] +10de:0404 0000 0000 8400gs : G84 [GeForce 8400 GS] +10de:0404 1462 1230 8400gs : NX8400GS-TD256E +10de:0405 0000 0000 9500mgs : G84M [GeForce 9500M GS] +10de:0406 0000 0000 8300gs : G84 [GeForce 8300 GS] +10de:0407 0000 0000 8600mgt : G84M [GeForce 8600M GT] +10de:0408 0000 0000 9650mgs : G84M [GeForce 9650M GS] +10de:0409 0000 0000 8700mgt : G84M [GeForce 8700M GT] +10de:040a 0000 0000 fx370 : G84GL [Quadro FX 370] +10de:040b 0000 0000 nvs320m : G84GLM [Quadro NVS 320M] +10de:040c 0000 0000 fx570m : G84GLM [Quadro FX 570M] +10de:040c 17aa 20d9 fx570m : ThinkPad T61p +10de:040d 0000 0000 fx1600m : G84GLM [Quadro FX 1600M] +10de:040e 0000 0000 fx570 : G84GL [Quadro FX 570] +10de:040f 0000 0000 fx1700 : G84GL [Quadro FX 1700] +10de:0410 0000 0000 gt330 : G92 [GeForce GT 330] +10de:0414 0000 0000 9800gt : G92 [GeForce 9800 GT] +10de:0418 0000 0000 gt330 : G92 [GeForce GT 330 OEM] +10de:0420 0000 0000 8400 : G86 [GeForce 8400 SE] +10de:0421 0000 0000 8500gt : G86 [GeForce 8500 GT] +10de:0421 1462 0960 8500gt : NX8500GT-TD512EH/M2 +10de:0422 0000 0000 8400gs : G86 [GeForce 8400 GS] +10de:0423 0000 0000 8300gs : G86 [GeForce 8300 GS] +10de:0424 0000 0000 8400gs : G86 [GeForce 8400 GS] +10de:0425 0000 0000 8600mgs : G86M [GeForce 8600M GS] +10de:0425 1025 0121 8600mgs : Aspire 5920G +10de:0425 1043 1514 8600mgs : F3SV +10de:0426 0000 0000 8400mgt : G86M [GeForce 8400M GT] +10de:0427 0000 0000 8400mgs : G86M [GeForce 8400M GS] +10de:0427 103c 30cc 8400mgs : Pavilion dv6700 +10de:0427 103c 30cf 8400mgs : Pavilion dv9668eg Laptop +10de:0428 0000 0000 8400mg : G86M [GeForce 8400M G] +10de:0429 0000 0000 nvs140m : G86M [Quadro NVS 140M] +10de:0429 17aa 20d8 nvs140m : ThinkPad T61 +10de:042a 0000 0000 nvs130m : G86M [Quadro NVS 130M] +10de:042b 0000 0000 nvs135m : G86M [Quadro NVS 135M] +10de:042c 0000 0000 9400gt : G86 [GeForce 9400 GT] +10de:042d 0000 0000 fx360m : G86GLM [Quadro FX 360M] +10de:042e 0000 0000 9300mg : G86M [GeForce 9300M G] +10de:042f 0000 0000 nvs290 : G86 [Quadro NVS 290] +10de:0531 0000 0000 7150mnforce630m : C67 [GeForce 7150M / nForce 630M] +10de:0533 0000 0000 7000mnforce610m : C67 [GeForce 7000M / nForce 610M] +10de:053a 0000 0000 7050pvnforce630a : C68 [GeForce 7050 PV / nForce 630a] +10de:053b 0000 0000 7050pvnforce630a : C68 [GeForce 7050 PV / nForce 630a] +10de:053b 1043 8308 7050pvnforce630a : M2N68-AM Motherboard +10de:053e 0000 0000 7025nforce630a : C68 [GeForce 7025 / nForce 630a] +10de:0569 0000 0000 8200 : MCP78S [GeForce 8200] PCI Express Bridge +10de:0569 103c 2a9e 8200 : Pavilion p6310f +10de:0569 1043 82e8 8200 : M3N72-D +10de:0569 1462 7508 8200 : K9N2GM-FIH +10de:0569 1849 0569 8200 : K10N78FullHD-hSLI R3.0 PCI Express Bridge +10de:05e0 0000 0000 gtx295 : GT200b [GeForce GTX 295] +10de:05e1 0000 0000 gtx280 : GT200 [GeForce GTX 280] +10de:05e2 0000 0000 gtx260 : GT200 [GeForce GTX 260] +10de:05e3 0000 0000 gtx285 : GT200b [GeForce GTX 285] +10de:05e3 1682 2490 gtx285 : GX-285N-ZDF +10de:05e6 0000 0000 gtx275 : GT200b [GeForce GTX 275] +10de:05e7 0000 0000 c1060m1060 : GT200GL [Tesla C1060 / M1060] +10de:05e7 10de 0595 c1060m1060 : Tesla T10 Processor +10de:05e7 10de 068f c1060m1060 : Tesla T10 Processor +10de:05e7 10de 0697 c1060m1060 : Tesla M1060 +10de:05e7 10de 0714 c1060m1060 : Tesla M1060 +10de:05e7 10de 0743 c1060m1060 : Tesla M1060 +10de:05ea 0000 0000 gtx260 : GT200 [GeForce GTX 260] +10de:05eb 0000 0000 gtx295 : GT200 [GeForce GTX 295] +10de:05ed 0000 0000 plex2200d2 : GT200GL [Quadro Plex 2200 D2] +10de:05f1 0000 0000 gtx280 : GT200 [GeForce GTX 280] +10de:05f2 0000 0000 gtx260 : GT200 [GeForce GTX 260] +10de:05f8 0000 0000 plex2200s4 : GT200GL [Quadro Plex 2200 S4] +10de:05f9 0000 0000 cx : GT200GL [Quadro CX] +10de:05fd 0000 0000 fx5800 : GT200GL [Quadro FX 5800] +10de:05fe 0000 0000 fx4800 : GT200GL [Quadro FX 4800] +10de:05ff 0000 0000 fx3800 : GT200GL [Quadro FX 3800] +10de:0600 0000 0000 8800gts512 : G92 [GeForce 8800 GTS 512] +10de:0601 0000 0000 9800gt : G92 [GeForce 9800 GT] +10de:0602 0000 0000 8800gt : G92 [GeForce 8800 GT] +10de:0603 0000 0000 gt230 : G92 [GeForce GT 230 OEM] +10de:0604 0000 0000 9800gx2 : G92 [GeForce 9800 GX2] +10de:0605 0000 0000 9800gt : G92 [GeForce 9800 GT] +10de:0606 0000 0000 8800gs : G92 [GeForce 8800 GS] +10de:0607 0000 0000 gts240 : G92 [GeForce GTS 240] +10de:0608 0000 0000 9800mgtx : G92M [GeForce 9800M GTX] +10de:0609 0000 0000 8800mgts : G92M [GeForce 8800M GTS] +10de:0609 106b 00a7 8800mgts : GeForce 8800 GS +10de:060a 0000 0000 gtx280m : G92M [GeForce GTX 280M] +10de:060b 0000 0000 9800mgt : G92M [GeForce 9800M GT] +10de:060c 0000 0000 8800mgtx : G92M [GeForce 8800M GTX] +10de:060d 0000 0000 8800gs : G92 [GeForce 8800 GS] +10de:060f 0000 0000 gtx285m : G92M [GeForce GTX 285M] +10de:0610 0000 0000 9600gso : G92 [GeForce 9600 GSO] +10de:0610 1682 2385 9600gso : GeForce 9600 GSO 768mb +10de:0611 0000 0000 8800gt : G92 [GeForce 8800 GT] +10de:0611 107d 2ab0 8800gt : Winfast PX8800 GT PCI-E +10de:0611 1462 1170 8800gt : NX8800GT series model V117 2xDVI+TV +10de:0611 19da 1040 8800gt : ZT-88TES2P-FSP +10de:0612 0000 0000 9800gtx9800gtx+ : G92 [GeForce 9800 GTX / 9800 GTX+] +10de:0613 0000 0000 9800gtx+ : G92 [GeForce 9800 GTX+] +10de:0614 0000 0000 9800gt : G92 [GeForce 9800 GT] +10de:0614 107d 2ab3 9800gt : WinFast PX9800 GT (S-Fanpipe) +10de:0615 0000 0000 gts250 : G92 [GeForce GTS 250] +10de:0615 3842 1150 gts250 : GeForce GTS 250 P/N 512-P3-1150-TR +10de:0615 3842 1151 gts250 : GeForce GTS 250 P/N 512-P3-1151-TR +10de:0615 3842 1155 gts250 : GeForce GTS 250 P/N 01G-P3-1155-TR +10de:0615 3842 1156 gts250 : GeForce GTS 250 P/N 01G-P3-1156-TR +10de:0617 0000 0000 9800mgtx : G92M [GeForce 9800M GTX] +10de:0618 0000 0000 gtx260m : G92M [GeForce GTX 260M] +10de:0619 0000 0000 fx4700x2 : G92GL [Quadro FX 4700 X2] +10de:061a 0000 0000 fx3700 : G92GL [Quadro FX 3700] +10de:061b 0000 0000 vx200 : G92GL [Quadro VX 200] +10de:061c 0000 0000 fx3600m : G92GLM [Quadro FX 3600M] +10de:061d 0000 0000 fx2800m : G92GLM [Quadro FX 2800M] +10de:061e 0000 0000 fx3700m : G92GLM [Quadro FX 3700M] +10de:061f 0000 0000 fx3800m : G92GLM [Quadro FX 3800M] +10de:0620 0000 0000 9800gt : G94 [GeForce 9800 GT] +10de:0621 0000 0000 gt230 : G94 [GeForce GT 230] +10de:0622 0000 0000 9600gt : G94 [GeForce 9600 GT] +10de:0622 107d 2ac1 9600gt : WinFast PX9600GT 1024MB +10de:0622 1458 3481 9600gt : GV-NX96T512HP +10de:0623 0000 0000 9600gs : G94 [GeForce 9600 GS] +10de:0624 0000 0000 9600gtgreen : G94 [GeForce 9600 GT Green Edition] +10de:0625 0000 0000 9600gso512 : G94 [GeForce 9600 GSO 512] +10de:0626 0000 0000 gt130 : G94 [GeForce GT 130] +10de:0627 0000 0000 gt140 : G94 [GeForce GT 140] +10de:0628 0000 0000 9800mgts : G94M [GeForce 9800M GTS] +10de:062a 0000 0000 9700mgts : G94M [GeForce 9700M GTS] +10de:062b 0000 0000 9800mgs : G94M [GeForce 9800M GS] +10de:062c 0000 0000 9800mgts : G94M [GeForce 9800M GTS] +10de:062d 0000 0000 9600gt : G94 [GeForce 9600 GT] +10de:062e 0000 0000 9600gt : G94 [GeForce 9600 GT] +10de:062e 106b 0605 9600gt : GeForce GT 130 +10de:062f 0000 0000 9800s : G94 [GeForce 9800 S] +10de:0630 0000 0000 9600gt : G94 [GeForce 9600 GT] +10de:0631 0000 0000 gts160m : G94M [GeForce GTS 160M] +10de:0632 0000 0000 gts150m : G94M [GeForce GTS 150M] +10de:0633 0000 0000 gt220 : G94 [GeForce GT 220] +10de:0635 0000 0000 9600gso : G94 [GeForce 9600 GSO] +10de:0637 0000 0000 9600gt : G94 [GeForce 9600 GT] +10de:0638 0000 0000 fx1800 : G94GL [Quadro FX 1800] +10de:063a 0000 0000 fx2700m : G94GLM [Quadro FX 2700M] +10de:063f 0000 0000 9600ge : G94 [GeForce 9600 GE] +10de:0640 0000 0000 9500gt : G96 [GeForce 9500 GT] +10de:0641 0000 0000 9400gt : G96 [GeForce 9400 GT] +10de:0641 1682 4009 9400gt : PV-T94G-ZAFG +10de:0643 0000 0000 9500gt : G96 [GeForce 9500 GT] +10de:0644 0000 0000 9500gs : G96 [GeForce 9500 GS] +10de:0644 174b 9600 9500gs : Geforce 9500GS 512M DDR2 V/D/HDMI +10de:0645 0000 0000 9500gs : G96 [GeForce 9500 GS] +10de:0646 0000 0000 gt120 : G96 [GeForce GT 120] +10de:0647 0000 0000 9600mgt : G96M [GeForce 9600M GT] +10de:0648 0000 0000 9600mgs : G96M [GeForce 9600M GS] +10de:0649 0000 0000 9600mgt : G96M [GeForce 9600M GT] +10de:0649 1043 202d 9600mgt : GeForce GT 220M +10de:064a 0000 0000 9700mgt : G96M [GeForce 9700M GT] +10de:064b 0000 0000 9500mg : G96M [GeForce 9500M G] +10de:064c 0000 0000 9650mgt : G96M [GeForce 9650M GT] +10de:064d 0000 0000 9600gt : G96 [GeForce 9600 GT] +10de:064e 0000 0000 9600gt9800gt : G96 [GeForce 9600 GT / 9800 GT] +10de:0651 0000 0000 g110m : G96M [GeForce G 110M] +10de:0652 0000 0000 gt130m : G96M [GeForce GT 130M] +10de:0652 152d 0850 gt130m : GeForce GT 240M LE +10de:0653 0000 0000 gt120m : G96M [GeForce GT 120M] +10de:0654 0000 0000 gt220m : G96M [GeForce GT 220M] +10de:0654 1043 14a2 gt220m : GeForce GT 320M +10de:0654 1043 14d2 gt220m : GeForce GT 320M +10de:0655 0000 0000 gt120 : G96 [GeForce GT 120] +10de:0656 0000 0000 9650s : G96 [GeForce 9650 S] +10de:0658 0000 0000 fx380 : G96GL [Quadro FX 380] +10de:0659 0000 0000 fx580 : G96GL [Quadro FX 580] +10de:065a 0000 0000 fx1700m : G96GLM [Quadro FX 1700M] +10de:065b 0000 0000 9400gt : G96 [GeForce 9400 GT] +10de:065c 0000 0000 fx770m : G96GLM [Quadro FX 770M] +10de:065d 0000 0000 9500ga9600gtgts250 : G96 [GeForce 9500 GA / 9600 GT / GTS 250] +10de:065f 0000 0000 g210 : G96 [GeForce G210] +10de:06c0 0000 0000 gtx480 : GF100 [GeForce GTX 480] +10de:06c4 0000 0000 gtx465 : GF100 [GeForce GTX 465] +10de:06ca 0000 0000 gtx480m : GF100M [GeForce GTX 480M] +10de:06cb 0000 0000 gtx480 : GF100 [GeForce GTX 480] +10de:06cd 0000 0000 gtx470 : GF100 [GeForce GTX 470] +10de:06d1 0000 0000 c2050c2070 : GF100GL [Tesla C2050 / C2070] +10de:06d1 10de 0771 c2050c2070 : Tesla C2050 +10de:06d1 10de 0772 c2050c2070 : Tesla C2070 +10de:06d2 0000 0000 m2070 : GF100GL [Tesla M2070] +10de:06d2 10de 0774 m2070 : Tesla M2070 +10de:06d2 10de 0830 m2070 : Tesla M2070 +10de:06d2 10de 0842 m2070 : Tesla M2070 +10de:06d2 10de 088f m2070 : Tesla X2070 +10de:06d2 10de 0908 m2070 : Tesla M2070 +10de:06d8 0000 0000 6000 : GF100GL [Quadro 6000] +10de:06d9 0000 0000 5000 : GF100GL [Quadro 5000] +10de:06da 0000 0000 5000m : GF100GLM [Quadro 5000M] +10de:06dc 0000 0000 6000 : GF100GL [Quadro 6000] +10de:06dd 0000 0000 4000 : GF100GL [Quadro 4000] +10de:06de 0000 0000 t20processor : GF100GL [Tesla T20 Processor] +10de:06de 10de 0773 t20processor : Tesla S2050 +10de:06de 10de 082f t20processor : Tesla M2050 +10de:06de 10de 0840 t20processor : Tesla X2070 +10de:06de 10de 0842 t20processor : Tesla M2050 +10de:06de 10de 0846 t20processor : Tesla M2050 +10de:06de 10de 0866 t20processor : Tesla M2050 +10de:06de 10de 0907 t20processor : Tesla M2050 +10de:06de 10de 091e t20processor : Tesla M2050 +10de:06df 0000 0000 m2070-q : GF100GL [Tesla M2070-Q] +10de:06df 10de 084d m2070-q : Tesla M2070-Q +10de:06df 10de 087f m2070-q : Tesla M2070-Q +10de:06e0 0000 0000 9300ge : G98 [GeForce 9300 GE] +10de:06e0 107d 5a96 9300ge : Geforce 9300GE +10de:06e1 0000 0000 9300gs : G98 [GeForce 9300 GS] +10de:06e2 0000 0000 8400 : G98 [GeForce 8400] +10de:06e3 0000 0000 8300gs : G98 [GeForce 8300 GS] +10de:06e4 0000 0000 8400gs : G98 [GeForce 8400 GS Rev. 2] +10de:06e4 1458 3475 8400gs : GV-NX84S256HE [GeForce 8400 GS] +10de:06e5 0000 0000 9300mgs : G98M [GeForce 9300M GS] +10de:06e6 0000 0000 g100 : G98 [GeForce G 100] +10de:06e7 0000 0000 9300 : G98 [GeForce 9300 SE] +10de:06e8 0000 0000 9200mgs : G98M [GeForce 9200M GS] +10de:06e8 103c 360b 9200mgs : GeForce 9200M GE +10de:06e9 0000 0000 9300mgs : G98M [GeForce 9300M GS] +10de:06e9 1043 19b2 9300mgs : U6V laptop +10de:06ea 0000 0000 nvs150m : G98M [Quadro NVS 150M] +10de:06eb 0000 0000 nvs160m : G98M [Quadro NVS 160M] +10de:06ec 0000 0000 g105m : G98M [GeForce G 105M] +10de:06ed 0000 0000 9600gt9800gt : G98 [GeForce 9600 GT / 9800 GT] +10de:06ee 0000 0000 9600gt9800gt : G98 [GeForce 9600 GT / 9800 GT] +10de:06ef 0000 0000 g103m : G98M [GeForce G 103M] +10de:06f1 0000 0000 g105m : G98M [GeForce G 105M] +10de:06f8 0000 0000 nvs420 : G98 [Quadro NVS 420] +10de:06f9 0000 0000 fx370lp : G98GL [Quadro FX 370 LP] +10de:06fa 0000 0000 nvs450 : G98 [Quadro NVS 450] +10de:06fb 0000 0000 fx370m : G98GLM [Quadro FX 370M] +10de:06fd 0000 0000 nvs295 : G98 [Quadro NVS 295] +10de:0752 0000 0000 8200 : MCP78S [GeForce 8200] SMBus +10de:0752 103c 2a9e 8200 : Pavilion p6310f +10de:0752 1043 82e8 8200 : M3N72-D +10de:0752 1462 7508 8200 : K9N2GM-FIH +10de:0752 1849 0752 8200 : K10N78FullHD-hSLI R3.0 SMBus +10de:0753 0000 0000 8200 : MCP78S [GeForce 8200] Co-Processor +10de:0753 103c 2a9e 8200 : Pavilion p6310f +10de:0753 1043 82e8 8200 : M3N72-D +10de:0753 1462 7508 8200 : K9N2GM-FIH +10de:0753 1849 0753 8200 : K10N78FullHD-hSLI R3.0 Co-Processor +10de:0759 0000 0000 8200ide : MCP78S [GeForce 8200] IDE +10de:0759 1043 82e8 8200ide : M3N72-D +10de:0759 1462 7508 8200ide : K9N2GM-FIH +10de:0759 1849 0759 8200ide : K10N78FullHD-hSLI R3.0 IDE +10de:075a 0000 0000 8200 : MCP78S [GeForce 8200] PCI Bridge +10de:075a 103c 2a9e 8200 : Pavilion p6310f +10de:075a 1043 82e8 8200 : M3N72-D +10de:075a 1849 075a 8200 : K10N78FullHD-hSLI R3.0 PCI Bridge +10de:075b 0000 0000 8200 : MCP78S [GeForce 8200] PCI Express Bridge +10de:075b 103c 2a9e 8200 : Pavilion p6310f +10de:075b 1043 82e8 8200 : M3N72-D +10de:075b 1462 7508 8200 : K9N2GM-FIH +10de:075b 1849 075b 8200 : K10N78FullHD-hSLI R3.0 PCI Express Bridge +10de:075c 0000 0000 8200 : MCP78S [GeForce 8200] LPC Bridge +10de:075c 103c 2a9e 8200 : Pavilion p6310f +10de:075c 1462 7508 8200 : K9N2GM-FIH +10de:075c 1849 075c 8200 : K10N78FullHD-hSLI R3.0 LPC Bridge +10de:075d 0000 0000 8200 : MCP78S [GeForce 8200] LPC Bridge +10de:075d 1043 82e8 8200 : M3N72-D +10de:0778 0000 0000 8200 : MCP78S [GeForce 8200] PCI Express Bridge +10de:0778 103c 2a9e 8200 : Pavilion p6310f +10de:0778 1043 82e8 8200 : M3N72-D +10de:0778 1462 7508 8200 : K9N2GM-FIH +10de:0778 1849 0778 8200 : K10N78FullHD-hSLI R3.0 PCI Express Bridge +10de:077a 0000 0000 8200 : MCP78S [GeForce 8200] PCI Bridge +10de:077a 103c 2a9e 8200 : Pavilion p6310f +10de:077a 1043 82e8 8200 : M3N72-D +10de:077a 1462 7508 8200 : K9N2GM-FIH +10de:077a 1849 077a 8200 : K10N78FullHD-hSLI R3.0 PCI Bridge +10de:07e0 0000 0000 7150nforce630i : C73 [GeForce 7150 / nForce 630i] +10de:07e0 1afa 7150 7150nforce630i : JW-IN7150-HD +10de:07e1 0000 0000 7100nforce630i : C73 [GeForce 7100 / nForce 630i] +10de:07e1 1019 297a 7100nforce630i : MCP73PVT-SM +10de:07e2 0000 0000 7050nforce630i : C73 [GeForce 7050 / nForce 630i] +10de:07e3 0000 0000 7050nforce610i : C73 [GeForce 7050 / nForce 610i] +10de:07e3 147b 1c3e 7050nforce610i : I-N73V motherboard +10de:07e5 0000 0000 7100nforce620i : C73 [GeForce 7100 / nForce 620i] +10de:0840 0000 0000 8200m : C77 [GeForce 8200M] +10de:0844 0000 0000 9100mg : C77 [GeForce 9100M G] +10de:0845 0000 0000 8200mg : C77 [GeForce 8200M G] +10de:0846 0000 0000 9200 : C77 [GeForce 9200] +10de:0847 0000 0000 9100 : C78 [GeForce 9100] +10de:0847 103c 2a9e 9100 : Pavilion p6310f +10de:0848 0000 0000 8300 : C77 [GeForce 8300] +10de:0849 0000 0000 8200 : C77 [GeForce 8200] +10de:0849 1462 7508 8200 : K9N2GM-FIH +10de:0849 1849 0849 8200 : K10N78FullHD-hSLI R3.0 GeForce 8200 +10de:084b 0000 0000 8200 : C77 [GeForce 8200] +10de:084f 0000 0000 8100nforce720a : C77 [GeForce 8100 / nForce 720a] +10de:0860 0000 0000 9300 : C79 [GeForce 9300] +10de:0861 0000 0000 9400 : C79 [GeForce 9400] +10de:0862 0000 0000 9400mg : C79 [GeForce 9400M G] +10de:0863 0000 0000 9400m : C79 [GeForce 9400M] +10de:0863 106b 00aa 9400m : MacBook5,1 +10de:0864 0000 0000 9300 : C79 [GeForce 9300] +10de:0865 0000 0000 9300ion : C79 [GeForce 9300 / ION] +10de:0866 0000 0000 9400mg : C79 [GeForce 9400M G] +10de:0866 106b 00b1 9400mg : GeForce 9400M +10de:0867 0000 0000 9400 : C79 [GeForce 9400] +10de:0867 106b 00ad 9400 : iMac 9,1 +10de:0869 0000 0000 9400 : MCP7A [GeForce 9400] +10de:086a 0000 0000 9400 : C79 [GeForce 9400] +10de:086c 0000 0000 9300nforce730i : C79 [GeForce 9300 / nForce 730i] +10de:086d 0000 0000 9200 : C79 [GeForce 9200] +10de:086e 0000 0000 9100mg : C79 [GeForce 9100M G] +10de:086f 0000 0000 8200mg : MCP79 [GeForce 8200M G] +10de:0870 0000 0000 9400m : C79 [GeForce 9400M] +10de:0871 0000 0000 9200 : C79 [GeForce 9200] +10de:0872 0000 0000 g102m : C79 [GeForce G102M] +10de:0872 1043 19b4 g102m : GeForce G102M +10de:0872 1043 1aa2 g102m : GeForce G102M +10de:0872 1043 1c02 g102m : GeForce G102M +10de:0872 1043 1c42 g102m : GeForce G205M +10de:0873 0000 0000 g102m : C79 [GeForce G102M] +10de:0873 1043 19b4 g102m : GeForce G102M +10de:0873 1043 1c12 g102m : GeForce G102M +10de:0873 1043 1c52 g102m : GeForce G205M +10de:0876 0000 0000 9400mion : C79 [GeForce 9400M / ION] +10de:087a 0000 0000 9400 : C79 [GeForce 9400] +10de:08a0 0000 0000 320m : MCP89 [GeForce 320M] +10de:08a2 0000 0000 320m : MCP89 [GeForce 320M] +10de:08a3 0000 0000 320m : MCP89 [GeForce 320M] +10de:08a4 0000 0000 320m : MCP89 [GeForce 320M] +10de:08a5 0000 0000 320m : MCP89 [GeForce 320M] +10de:0a20 0000 0000 gt220 : GT216 [GeForce GT 220] +10de:0a20 1043 8311 gt220 : ENGT220/DI/1GD3(LP)/V2 +10de:0a21 0000 0000 gt330m : GT216M [GeForce GT 330M] +10de:0a22 0000 0000 315 : GT216 [GeForce 315] +10de:0a23 0000 0000 210 : GT216 [GeForce 210] +10de:0a26 0000 0000 405 : GT216 [GeForce 405] +10de:0a27 0000 0000 405 : GT216 [GeForce 405] +10de:0a28 0000 0000 gt230m : GT216M [GeForce GT 230M] +10de:0a29 0000 0000 gt330m : GT216M [GeForce GT 330M] +10de:0a2a 0000 0000 gt230m : GT216M [GeForce GT 230M] +10de:0a2b 0000 0000 gt330m : GT216M [GeForce GT 330M] +10de:0a2d 0000 0000 gt320m : GT216M [GeForce GT 320M] +10de:0a30 0000 0000 505 : GT216 [GeForce 505] +10de:0a32 0000 0000 gt415 : GT216 [GeForce GT 415] +10de:0a34 0000 0000 gt240m : GT216M [GeForce GT 240M] +10de:0a35 0000 0000 gt325m : GT216M [GeForce GT 325M] +10de:0a38 0000 0000 400 : GT216GL [Quadro 400] +10de:0a3c 0000 0000 fx880m : GT216GLM [Quadro FX 880M] +10de:0a60 0000 0000 g210 : GT218 [GeForce G210] +10de:0a62 0000 0000 205 : GT218 [GeForce 205] +10de:0a63 0000 0000 310 : GT218 [GeForce 310] +10de:0a65 0000 0000 210 : GT218 [GeForce 210] +10de:0a65 1043 8334 210 : EN210 SILENT +10de:0a65 1458 36a9 210 : GV-N210D3-1GI (rev. 6.0/6.1) +10de:0a65 1462 8094 210 : N210 [Geforce 210] PCIe graphics adapter +10de:0a66 0000 0000 310 : GT218 [GeForce 310] +10de:0a67 0000 0000 315 : GT218 [GeForce 315] +10de:0a68 0000 0000 g105m : GT218M [GeForce G 105M] +10de:0a69 0000 0000 g105m : GT218M [GeForce G 105M] +10de:0a6e 0000 0000 305m : GT218M [GeForce 305M] +10de:0a70 0000 0000 310m : GT218M [GeForce 310M] +10de:0a71 0000 0000 305m : GT218M [GeForce 305M] +10de:0a72 0000 0000 310m : GT218M [GeForce 310M] +10de:0a73 0000 0000 305m : GT218M [GeForce 305M] +10de:0a74 0000 0000 g210m : GT218M [GeForce G210M] +10de:0a74 1b0a 903a g210m : GeForce G210 +10de:0a75 0000 0000 310m : GT218M [GeForce 310M] +10de:0a78 0000 0000 fx380lp : GT218GL [Quadro FX 380 LP] +10de:0a7a 0000 0000 315m : GT218M [GeForce 315M] +10de:0a7a 104d 907e 315m : GeForce 315M +10de:0a7a 1179 fc50 315m : GeForce 315M +10de:0a7a 1179 fc61 315m : GeForce 315M +10de:0a7a 1179 fc71 315m : GeForce 315M +10de:0a7a 1179 fc90 315m : GeForce 315M +10de:0a7a 1179 fcc0 315m : GeForce 315M +10de:0a7a 1179 fcd0 315m : GeForce 315M +10de:0a7a 1179 fce2 315m : GeForce 315M +10de:0a7a 1179 fcf2 315m : GeForce 315M +10de:0a7a 1179 fd16 315m : GeForce 315M +10de:0a7a 1179 fd40 315m : GeForce 315M +10de:0a7a 1179 fd50 315m : GeForce 315M +10de:0a7a 1179 fd52 315m : GeForce 315M +10de:0a7a 1179 fd61 315m : GeForce 315M +10de:0a7a 1179 fd71 315m : GeForce 315M +10de:0a7a 1179 fd92 315m : GeForce 315M +10de:0a7a 1179 fd96 315m : GeForce 315M +10de:0a7a 1179 fdd0 315m : GeForce 315M +10de:0a7a 1179 fdd2 315m : GeForce 315M +10de:0a7a 1179 fdfe 315m : GeForce 315M +10de:0a7a 144d c0a2 315m : GeForce 315M +10de:0a7a 144d c0b2 315m : GeForce 315M +10de:0a7a 144d c581 315m : GeForce 315M +10de:0a7a 144d c587 315m : GeForce 315M +10de:0a7a 144d c588 315m : GeForce 315M +10de:0a7a 144d c597 315m : GeForce 315M +10de:0a7a 144d c606 315m : GeForce 315M +10de:0a7a 1462 aa51 315m : GeForce 405 +10de:0a7a 1462 aa58 315m : GeForce 405 +10de:0a7a 1462 ac71 315m : GeForce 405 +10de:0a7a 1462 ac81 315m : GeForce 315M +10de:0a7a 1462 ac82 315m : GeForce 405 +10de:0a7a 1462 ae33 315m : GeForce 405 +10de:0a7a 1642 3980 315m : GeForce 405 +10de:0a7a 17aa 3950 315m : GeForce 405M +10de:0a7a 17aa 397d 315m : GeForce 405M +10de:0a7a 1b0a 2091 315m : GeForce 315M +10de:0a7a 1b0a 90b4 315m : GeForce 405 +10de:0a7a 1bfd 0003 315m : GeForce 405 +10de:0a7a 1bfd 8006 315m : GeForce 405 +10de:0a7a 1bfd 8007 315m : GeForce 315M +10de:0a7b 0000 0000 505 : GT218 [GeForce 505] +10de:0a7c 0000 0000 fx380m : GT218GLM [Quadro FX 380M] +10de:0ca0 0000 0000 gt330 : GT215 [GeForce GT 330] +10de:0ca2 0000 0000 gt320 : GT215 [GeForce GT 320] +10de:0ca3 0000 0000 gt240 : GT215 [GeForce GT 240] +10de:0ca4 0000 0000 gt340 : GT215 [GeForce GT 340] +10de:0ca5 0000 0000 gt220 : GT215 [GeForce GT 220] +10de:0ca7 0000 0000 gt330 : GT215 [GeForce GT 330] +10de:0ca8 0000 0000 gts260m : GT215M [GeForce GTS 260M] +10de:0ca9 0000 0000 gts250m : GT215M [GeForce GTS 250M] +10de:0caf 0000 0000 gt335m : GT215M [GeForce GT 335M] +10de:0cb0 0000 0000 gts350m : GT215M [GeForce GTS 350M] +10de:0cb1 0000 0000 gts360m : GT215M [GeForce GTS 360M] +10de:0cbc 0000 0000 fx1800m : GT215GLM [Quadro FX 1800M] +10de:0dc0 0000 0000 gt440 : GF106 [GeForce GT 440] +10de:0dc4 0000 0000 gts450 : GF106 [GeForce GTS 450] +10de:0dc5 0000 0000 gts450 : GF106 [GeForce GTS 450 OEM] +10de:0dc6 0000 0000 gts450 : GF106 [GeForce GTS 450 OEM] +10de:0dcd 0000 0000 gt555m : GF106M [GeForce GT 555M] +10de:0dce 0000 0000 gt555m : GF106M [GeForce GT 555M] +10de:0dd1 0000 0000 gtx460m : GF106M [GeForce GTX 460M] +10de:0dd1 1558 8687 gtx460m : CLEVO/KAPOK W860CU +10de:0dd2 0000 0000 gt445m : GF106M [GeForce GT 445M] +10de:0dd3 0000 0000 gt435m : GF106M [GeForce GT 435M] +10de:0dd6 0000 0000 gt550m : GF106M [GeForce GT 550M] +10de:0dd8 0000 0000 2000 : GF106GL [Quadro 2000] +10de:0dd8 10de 0914 2000 : Quadro 2000D +10de:0dda 0000 0000 2000m : GF106GLM [Quadro 2000M] +10de:0de0 0000 0000 gt440 : GF108 [GeForce GT 440] +10de:0de1 0000 0000 gt430 : GF108 [GeForce GT 430] +10de:0de1 3842 1430 gt430 : GeForce GT 430 +10de:0de2 0000 0000 gt420 : GF108 [GeForce GT 420] +10de:0de3 0000 0000 gt635m : GF108M [GeForce GT 635M] +10de:0de4 0000 0000 gt520 : GF108 [GeForce GT 520] +10de:0de5 0000 0000 gt530 : GF108 [GeForce GT 530] +10de:0de7 0000 0000 gt610 : GF108 [GeForce GT 610] +10de:0de8 0000 0000 gt620m : GF108M [GeForce GT 620M] +10de:0de9 0000 0000 gt620m/630m/635m/640mle : GF108M [GeForce GT 620M/630M/635M/640M LE] +10de:0de9 1025 0692 gt620m/630m/635m/640mle : GeForce GT 620M +10de:0de9 1025 0725 gt620m/630m/635m/640mle : GeForce GT 620M +10de:0de9 1025 0728 gt620m/630m/635m/640mle : GeForce GT 620M +10de:0de9 1025 072b gt620m/630m/635m/640mle : GeForce GT 620M +10de:0de9 1025 072e gt620m/630m/635m/640mle : GeForce GT 620M +10de:0de9 1025 0753 gt620m/630m/635m/640mle : GeForce GT 620M +10de:0de9 1025 0754 gt620m/630m/635m/640mle : GeForce GT 620M +10de:0de9 17aa 3977 gt620m/630m/635m/640mle : GeForce GT 640M LE +10de:0de9 1b0a 2210 gt620m/630m/635m/640mle : GeForce GT 635M +10de:0dea 0000 0000 610m : GF108M [GeForce 610M] +10de:0dea 17aa 365a 610m : GeForce 615 +10de:0dea 17aa 365b 610m : GeForce 615 +10de:0dea 17aa 365e 610m : GeForce 615 +10de:0dea 17aa 3660 610m : GeForce 615 +10de:0dea 17aa 366c 610m : GeForce 615 +10de:0deb 0000 0000 gt555m : GF108M [GeForce GT 555M] +10de:0dec 0000 0000 gt525m : GF108M [GeForce GT 525M] +10de:0ded 0000 0000 gt520m : GF108M [GeForce GT 520M] +10de:0dee 0000 0000 gt415m : GF108M [GeForce GT 415M] +10de:0df0 0000 0000 gt425m : GF108M [GeForce GT 425M] +10de:0df1 0000 0000 gt420m : GF108M [GeForce GT 420M] +10de:0df2 0000 0000 gt435m : GF108M [GeForce GT 435M] +10de:0df3 0000 0000 gt420m : GF108M [GeForce GT 420M] +10de:0df4 0000 0000 gt540m : GF108M [GeForce GT 540M] +10de:0df4 152d 0952 gt540m : GeForce GT 630M +10de:0df4 152d 0953 gt540m : GeForce GT 630M +10de:0df5 0000 0000 gt525m : GF108M [GeForce GT 525M] +10de:0df6 0000 0000 gt550m : GF108M [GeForce GT 550M] +10de:0df7 0000 0000 gt520m : GF108M [GeForce GT 520M] +10de:0df8 0000 0000 600 : GF108GL [Quadro 600] +10de:0df9 0000 0000 500m : GF108GLM [Quadro 500M] +10de:0dfa 0000 0000 1000m : GF108GLM [Quadro 1000M] +10de:0e22 0000 0000 gtx460 : GF104 [GeForce GTX 460] +10de:0e22 1462 2322 gtx460 : N460GTX Cyclone 1GD5/OC +10de:0e23 0000 0000 gtx460 : GF104 [GeForce GTX 460 SE] +10de:0e24 0000 0000 gtx460 : GF104 [GeForce GTX 460 OEM] +10de:0e30 0000 0000 gtx470m : GF104M [GeForce GTX 470M] +10de:0e31 0000 0000 gtx485m : GF104M [GeForce GTX 485M] +10de:0e3a 0000 0000 3000m : GF104GLM [Quadro 3000M] +10de:0e3b 0000 0000 4000m : GF104GLM [Quadro 4000M] +10de:0f00 0000 0000 gt630 : GF108 [GeForce GT 630] +10de:0f01 0000 0000 gt620 : GF108 [GeForce GT 620] +10de:0f02 0000 0000 gt730 : GF108 [GeForce GT 730] +10de:0f06 0000 0000 gt730 : GF108 [GeForce GT 730] +10de:0fc0 0000 0000 gt640 : GK107 [GeForce GT 640 OEM] +10de:0fc1 0000 0000 gt640 : GK107 [GeForce GT 640] +10de:0fc2 0000 0000 gt630 : GK107 [GeForce GT 630 OEM] +10de:0fc6 0000 0000 gtx650 : GK107 [GeForce GTX 650] +10de:0fc6 1043 8428 gtx650 : GTX650-DC-1GD5 +10de:0fc8 0000 0000 gt740 : GK107 [GeForce GT 740] +10de:0fc9 0000 0000 gt730 : GK107 [GeForce GT 730] +10de:0fcd 0000 0000 gt755m : GK107M [GeForce GT 755M] +10de:0fce 0000 0000 gt640mle : GK107M [GeForce GT 640M LE] +10de:0fd1 0000 0000 gt650m : GK107M [GeForce GT 650M] +10de:0fd1 1043 1597 gt650m : GeForce GT 650M +10de:0fd1 1043 15a7 gt650m : GeForce GT 650M +10de:0fd1 1043 2103 gt650m : N56VZ +10de:0fd1 1043 2105 gt650m : GeForce GT 650M +10de:0fd1 1043 2141 gt650m : GeForce GT 650M +10de:0fd2 0000 0000 gt640m : GK107M [GeForce GT 640M] +10de:0fd2 1028 054f gt640m : GeForce GT 640M +10de:0fd2 1028 055f gt640m : GeForce GT 640M +10de:0fd2 1028 0595 gt640m : GeForce GT 640M LE +10de:0fd2 1028 05b2 gt640m : GeForce GT 640M LE +10de:0fd3 0000 0000 gt640mle : GK107M [GeForce GT 640M LE] +10de:0fd4 0000 0000 gtx660m : GK107M [GeForce GTX 660M] +10de:0fd5 0000 0000 gt650m : GK107M [GeForce GT 650M Mac Edition] +10de:0fd8 0000 0000 gt640m : GK107M [GeForce GT 640M Mac Edition] +10de:0fd9 0000 0000 gt645m : GK107M [GeForce GT 645M] +10de:0fdf 0000 0000 gt740m : GK107M [GeForce GT 740M] +10de:0fe0 0000 0000 gtx660m : GK107M [GeForce GTX 660M Mac Edition] +10de:0fe1 0000 0000 gt730m : GK107M [GeForce GT 730M] +10de:0fe2 0000 0000 gt745m : GK107M [GeForce GT 745M] +10de:0fe3 0000 0000 gt745m : GK107M [GeForce GT 745M] +10de:0fe3 103c 2b16 gt745m : GeForce GT 745A +10de:0fe3 17aa 3675 gt745m : GeForce GT 745A +10de:0fe4 0000 0000 gt750m : GK107M [GeForce GT 750M] +10de:0fe5 0000 0000 k340usm : GK107 [GeForce K340 USM] +10de:0fe9 0000 0000 gt750m : GK107M [GeForce GT 750M Mac Edition] +10de:0fea 0000 0000 gt755m : GK107M [GeForce GT 755M Mac Edition] +10de:0fec 0000 0000 710a : GK107M [GeForce 710A] +10de:0fed 0000 0000 820m : GK107M [GeForce 820M] +10de:0fee 0000 0000 810m : GK107M [GeForce 810M] +10de:0ff3 0000 0000 k420 : GK107GL [Quadro K420] +10de:0ff6 0000 0000 k1100m : GK107GLM [Quadro K1100M] +10de:0ff6 103c 197b k1100m : ZBook 15 +10de:0ff8 0000 0000 k500m : GK107GLM [Quadro K500M] +10de:0ff9 0000 0000 k2000d : GK107GL [Quadro K2000D] +10de:0ffa 0000 0000 k600 : GK107GL [Quadro K600] +10de:0ffb 0000 0000 k2000m : GK107GLM [Quadro K2000M] +10de:0ffc 0000 0000 k1000m : GK107GLM [Quadro K1000M] +10de:0ffe 0000 0000 k2000 : GK107GL [Quadro K2000] +10de:0fff 0000 0000 410 : GK107GL [Quadro 410] +10de:1001 0000 0000 gtxz : GK110B [GeForce GTX TITAN Z] +10de:1003 0000 0000 gtxtitanle : GK110 [GeForce GTX Titan LE] +10de:1004 0000 0000 gtx780 : GK110 [GeForce GTX 780] +10de:1004 3842 0784 gtx780 : GK110B [GeForce GTX 780 SC w/ ACX Cooler] +10de:1004 3842 1784 gtx780 : GK110B [GeForce GTX 780 Dual FTW w/ ACX Cooler] +10de:1004 3842 1788 gtx780 : GK110B [GeForce GTX 780 Dual Classified w/ ACX Cooler] +10de:1005 0000 0000 gtx : GK110 [GeForce GTX TITAN] +10de:1005 1043 8451 gtx : GTXTITAN-6GD5 +10de:1005 10de 1035 gtx : GeForce GTX Titan +10de:1005 3842 2790 gtx : GeForce GTX Titan +10de:1005 3842 2791 gtx : GeForce GTX Titan SC +10de:1005 3842 2793 gtx : GeForce GTX Titan SC Signature +10de:1005 3842 2794 gtx : GeForce GTX Titan SC Hydro Copper +10de:1005 3842 2795 gtx : GeForce GTX Titan SC Hydro Copper Signature +10de:1007 0000 0000 gtx780 : GK110 [GeForce GTX 780 Rev. 2] +10de:1008 0000 0000 gtx780 : GK110 [GeForce GTX 780 Ti 6GB] +10de:100a 0000 0000 gtx780 : GK110B [GeForce GTX 780 Ti] +10de:100c 0000 0000 gtxblack : GK110B [GeForce GTX TITAN Black] +10de:101e 0000 0000 k20x : GK110GL [Tesla K20X] +10de:101f 0000 0000 k20 : GK110GL [Tesla K20] +10de:1020 0000 0000 k20x : GK110GL [Tesla K20X] +10de:1021 0000 0000 k20xm : GK110GL [Tesla K20Xm] +10de:1022 0000 0000 k20c : GK110GL [Tesla K20c] +10de:1023 0000 0000 k40m : GK110BGL [Tesla K40m] +10de:1023 10de 097e k40m : 12GB Computational Accelerator +10de:1024 0000 0000 k40c : GK110BGL [Tesla K40c] +10de:1026 0000 0000 k20s : GK110GL [Tesla K20s] +10de:1027 0000 0000 k40st : GK110BGL [Tesla K40st] +10de:1028 0000 0000 k20m : GK110GL [Tesla K20m] +10de:1029 0000 0000 k40s : GK110BGL [Tesla K40s] +10de:102a 0000 0000 k40t : GK110BGL [Tesla K40t] +10de:102d 0000 0000 k80 : GK210GL [Tesla K80] +10de:102e 0000 0000 k40d : GK110BGL [Tesla K40d] +10de:102f 0000 0000 stellasolo : GK110BGL [Tesla Stella Solo] +10de:103a 0000 0000 k6000 : GK110GL [Quadro K6000] +10de:103c 0000 0000 k5200 : GK110GL [Quadro K5200] +10de:103f 0000 0000 stellasxm : GK110BGL [Tesla Stella SXM] +10de:1040 0000 0000 gt520 : GF119 [GeForce GT 520] +10de:1040 1043 83a0 gt520 : ENGT520 SILENT +10de:1042 0000 0000 510 : GF119 [GeForce 510] +10de:1048 0000 0000 605 : GF119 [GeForce 605] +10de:1049 0000 0000 gt620 : GF119 [GeForce GT 620 OEM] +10de:104a 0000 0000 gt610 : GF119 [GeForce GT 610] +10de:104a 10b0 104a gt610 : Gainward GeForce GT 610 +10de:104b 0000 0000 gt625 : GF119 [GeForce GT 625 OEM] +10de:104c 0000 0000 gt705 : GF119 [GeForce GT 705] +10de:104d 0000 0000 gt710 : GF119 [GeForce GT 710] +10de:1050 0000 0000 gt520m : GF119M [GeForce GT 520M] +10de:1051 0000 0000 gt520mx : GF119M [GeForce GT 520MX] +10de:1052 0000 0000 gt520m : GF119M [GeForce GT 520M] +10de:1054 0000 0000 410m : GF119M [GeForce 410M] +10de:1055 0000 0000 410m : GF119M [GeForce 410M] +10de:1057 0000 0000 nvs4200m : GF119M [Quadro NVS 4200M] +10de:1058 0000 0000 610m : GF119M [GeForce 610M] +10de:1058 103c 2aed 610m : GeForce 610 +10de:1058 103c 2af1 610m : GeForce 610 +10de:1058 1043 10ac 610m : GeForce GT 610M +10de:1058 1043 10bc 610m : GeForce GT 610M +10de:1058 1043 1652 610m : GeForce GT 610M +10de:1058 17aa 367a 610m : GeForce 610M +10de:1058 17aa 3682 610m : GeForce 800A +10de:1058 17aa 3687 610m : GeForce 800A +10de:1058 17aa 3692 610m : GeForce 705A +10de:1058 17aa 3695 610m : GeForce 800A +10de:1058 17aa a117 610m : GeForce 610M +10de:1059 0000 0000 610m : GF119M [GeForce 610M] +10de:105a 0000 0000 610m : GF119M [GeForce 610M] +10de:105a 1043 2111 610m : GeForce GT 610M +10de:105a 1043 2112 610m : GeForce GT 610M +10de:105b 0000 0000 705m : GF119M [GeForce 705M] +10de:105b 103c 2afb 705m : GeForce 705A +10de:105b 17aa 309d 705m : GeForce 705A +10de:105b 17aa 30b1 705m : GeForce 800A +10de:105b 17aa 30f3 705m : GeForce 705A +10de:105b 17aa 36a1 705m : GeForce 800A +10de:1080 0000 0000 gtx580 : GF110 [GeForce GTX 580] +10de:1081 0000 0000 gtx570 : GF110 [GeForce GTX 570] +10de:1081 10de 087e gtx570 : Leadtek WinFast GTX 570 +10de:1082 0000 0000 gtx560 : GF110 [GeForce GTX 560 Ti OEM] +10de:1084 0000 0000 gtx560 : GF110 [GeForce GTX 560 OEM] +10de:1086 0000 0000 gtx570 : GF110 [GeForce GTX 570 Rev. 2] +10de:1087 0000 0000 gtx560 : GF110 [GeForce GTX 560 Ti 448 Cores] +10de:1088 0000 0000 gtx590 : GF110 [GeForce GTX 590] +10de:1089 0000 0000 gtx580 : GF110 [GeForce GTX 580 Rev. 2] +10de:108b 0000 0000 gtx580 : GF110 [GeForce GTX 580] +10de:108e 0000 0000 c2090 : GF110GL [Tesla C2090] +10de:1091 0000 0000 m2090 : GF110GL [Tesla M2090] +10de:1091 10de 088e m2090 : Tesla X2090 +10de:1091 10de 0891 m2090 : Tesla X2090 +10de:1091 10de 0974 m2090 : Tesla X2090 +10de:1091 10de 098d m2090 : Tesla X2090 +10de:1094 0000 0000 m2075 : GF110GL [Tesla M2075] +10de:1094 10de 0888 m2075 : Tesla M2075 +10de:1096 0000 0000 c2050c2075 : GF110GL [Tesla C2050 / C2075] +10de:1096 10de 0910 c2050c2075 : Tesla C2075 +10de:1096 10de 0911 c2050c2075 : Tesla C2050 +10de:109a 0000 0000 5010m : GF100GLM [Quadro 5010M] +10de:109b 0000 0000 7000 : GF100GL [Quadro 7000] +10de:109b 10de 0918 7000 : Quadro 7000 +10de:10c0 0000 0000 9300gs : GT218 [GeForce 9300 GS Rev. 2] +10de:10c3 0000 0000 8400gs3 : GT218 [GeForce 8400 GS Rev. 3] +10de:10c5 0000 0000 405 : GT218 [GeForce 405] +10de:1180 0000 0000 gtx680 : GK104 [GeForce GTX 680] +10de:1180 1043 83f1 gtx680 : GTX680-DC2-2GD5 +10de:1180 3842 3682 gtx680 : GeForce GTX 680 Mac Edition +10de:1182 0000 0000 gtx760 : GK104 [GeForce GTX 760 Ti] +10de:1183 0000 0000 gtx660 : GK104 [GeForce GTX 660 Ti] +10de:1184 0000 0000 gtx770 : GK104 [GeForce GTX 770] +10de:1185 0000 0000 gtx660 : GK104 [GeForce GTX 660 OEM] +10de:1185 10de 106f gtx660 : GK104 [GeForce GTX 760 OEM] +10de:1187 0000 0000 gtx760 : GK104 [GeForce GTX 760] +10de:1188 0000 0000 gtx690 : GK104 [GeForce GTX 690] +10de:1189 0000 0000 gtx670 : GK104 [GeForce GTX 670] +10de:1189 10de 1074 gtx670 : GK104 [GeForce GTX 760 Ti OEM] +10de:118e 0000 0000 gtx760 : GK104 [GeForce GTX 760 OEM] +10de:118f 0000 0000 k10 : GK104GL [Tesla K10] +10de:1191 0000 0000 gtx760 : GK104 [GeForce GTX 760 Rev. 2] +10de:1193 0000 0000 gtx760 : GK104 [GeForce GTX 760 Ti OEM] +10de:1194 0000 0000 k8 : GK104GL [Tesla K8] +10de:1195 0000 0000 gtx660 : GK104 [GeForce GTX 660 Rev. 2] +10de:1198 0000 0000 gtx880m : GK104M [GeForce GTX 880M] +10de:1199 0000 0000 gtx870m : GK104M [GeForce GTX 870M] +10de:119a 0000 0000 gtx860m : GK104M [GeForce GTX 860M] +10de:119d 0000 0000 gtx775m : GK104M [GeForce GTX 775M Mac Edition] +10de:119e 0000 0000 gtx780m : GK104M [GeForce GTX 780M Mac Edition] +10de:119f 0000 0000 gtx780m : GK104M [GeForce GTX 780M] +10de:11a0 0000 0000 gtx680m : GK104M [GeForce GTX 680M] +10de:11a1 0000 0000 gtx670mx : GK104M [GeForce GTX 670MX] +10de:11a2 0000 0000 gtx675mx : GK104M [GeForce GTX 675MX Mac Edition] +10de:11a3 0000 0000 gtx680mx : GK104M [GeForce GTX 680MX] +10de:11a3 106b 010d gtx680mx : iMac 13,2 +10de:11a7 0000 0000 gtx675mx : GK104M [GeForce GTX 675MX] +10de:11b4 0000 0000 k4200 : GK104GL [Quadro K4200] +10de:11b6 0000 0000 k3100m : GK104GLM [Quadro K3100M] +10de:11b7 0000 0000 k4100m : GK104GLM [Quadro K4100M] +10de:11b8 0000 0000 k5100m : GK104GLM [Quadro K5100M] +10de:11ba 0000 0000 k5000 : GK104GL [Quadro K5000] +10de:11bb 0000 0000 4100 : GK104GL [Quadro 4100] +10de:11bc 0000 0000 k5000m : GK104GLM [Quadro K5000M] +10de:11bd 0000 0000 k4000m : GK104GLM [Quadro K4000M] +10de:11be 0000 0000 k3000m : GK104GLM [Quadro K3000M] +10de:11c0 0000 0000 gtx660 : GK106 [GeForce GTX 660] +10de:11c2 0000 0000 gtx650 : GK106 [GeForce GTX 650 Ti Boost] +10de:11c2 1043 845b gtx650 : GeForce GTX 650 Ti Boost DirectCU II OC +10de:11c2 1462 2874 gtx650 : GeForce GTX 650 Ti Boost TwinFrozr II OC +10de:11c2 1569 11c2 gtx650 : GeForce GTX 650 Ti Boost OC +10de:11c2 19da 1281 gtx650 : GeForce GTX 650 Ti Boost OC +10de:11c2 3842 3657 gtx650 : GeForce GTX 650 Ti Boost +10de:11c2 3842 3658 gtx650 : GeForce GTX 650 Ti Boost Superclocked +10de:11c3 0000 0000 gtx650 : GK106 [GeForce GTX 650 Ti OEM] +10de:11c3 10de 1030 gtx650 : GeForce GTX 650 Ti OEM +10de:11c4 0000 0000 gtx645 : GK106 [GeForce GTX 645 OEM] +10de:11c5 0000 0000 gt740 : GK106 [GeForce GT 740] +10de:11c6 0000 0000 gtx650 : GK106 [GeForce GTX 650 Ti] +10de:11c7 0000 0000 gtx750 : GK106 [GeForce GTX 750 Ti] +10de:11c8 0000 0000 gtx650 : GK106 [GeForce GTX 650 OEM] +10de:11cb 0000 0000 gt740 : GK106 [GeForce GT 740] +10de:11e0 0000 0000 gtx770m : GK106M [GeForce GTX 770M] +10de:11e1 0000 0000 gtx765m : GK106M [GeForce GTX 765M] +10de:11e2 0000 0000 gtx765m : GK106M [GeForce GTX 765M] +10de:11e3 0000 0000 gtx760m : GK106M [GeForce GTX 760M] +10de:11e3 17aa 3683 gtx760m : GeForce GTX 760A +10de:11fa 0000 0000 k4000 : GK106GL [Quadro K4000] +10de:11fc 0000 0000 k2100m : GK106GLM [Quadro K2100M] +10de:1200 0000 0000 gtx560 : GF114 [GeForce GTX 560 Ti] +10de:1201 0000 0000 gtx560 : GF114 [GeForce GTX 560] +10de:1202 0000 0000 gtx560 : GF114 [GeForce GTX 560 Ti OEM] +10de:1203 0000 0000 gtx460 : GF114 [GeForce GTX 460 SE v2] +10de:1205 0000 0000 gtx460 : GF114 [GeForce GTX 460 v2] +10de:1206 0000 0000 gtx555 : GF114 [GeForce GTX 555] +10de:1207 0000 0000 gt645 : GF114 [GeForce GT 645 OEM] +10de:1208 0000 0000 gtx560 : GF114 [GeForce GTX 560 SE] +10de:1210 0000 0000 gtx570m : GF114M [GeForce GTX 570M] +10de:1211 0000 0000 gtx580m : GF114M [GeForce GTX 580M] +10de:1212 0000 0000 gtx675m : GF114M [GeForce GTX 675M] +10de:1213 0000 0000 gtx670m : GF114M [GeForce GTX 670M] +10de:1241 0000 0000 gt545 : GF116 [GeForce GT 545 OEM] +10de:1243 0000 0000 gt545 : GF116 [GeForce GT 545] +10de:1244 0000 0000 gtx550 : GF116 [GeForce GTX 550 Ti] +10de:1245 0000 0000 gts450 : GF116 [GeForce GTS 450 Rev. 2] +10de:1246 0000 0000 gt550m : GF116M [GeForce GT 550M] +10de:1249 0000 0000 gts4503 : GF116 [GeForce GTS 450 Rev. 3] +10de:124b 0000 0000 gt640 : GF116 [GeForce GT 640 OEM] +10de:1251 0000 0000 gt560m : GF116M [GeForce GT 560M] +10de:1280 0000 0000 gt635 : GK208 [GeForce GT 635] +10de:1281 0000 0000 gt710 : GK208 [GeForce GT 710] +10de:1282 0000 0000 gt640 : GK208 [GeForce GT 640 Rev. 2] +10de:1284 0000 0000 gt630 : GK208 [GeForce GT 630 Rev. 2] +10de:1286 0000 0000 gt720 : GK208 [GeForce GT 720] +10de:1287 0000 0000 gt730 : GK208B [GeForce GT 730] +10de:1288 0000 0000 gt720 : GK208B [GeForce GT 720] +10de:1289 0000 0000 gt710 : GK208 [GeForce GT 710] +10de:128b 0000 0000 gt710 : GK208B [GeForce GT 710] +10de:128b 1043 85f7 gt710 : GT710-SL-1GD5 +10de:1290 0000 0000 gt730m : GK208M [GeForce GT 730M] +10de:1290 103c 2afa gt730m : GeForce GT 730A +10de:1290 103c 2b04 gt730m : GeForce GT 730A +10de:1290 1043 13ad gt730m : GeForce GT 730M +10de:1290 1043 13cd gt730m : GeForce GT 730M +10de:1291 0000 0000 gt735m : GK208M [GeForce GT 735M] +10de:1292 0000 0000 gt740m : GK208M [GeForce GT 740M] +10de:1292 17aa 3675 gt740m : GeForce GT 740A +10de:1292 17aa 367c gt740m : GeForce GT 740A +10de:1292 17aa 3684 gt740m : GeForce GT 740A +10de:1293 0000 0000 gt730m : GK208M [GeForce GT 730M] +10de:1294 0000 0000 gt740m : GK208M [GeForce GT 740M] +10de:1295 0000 0000 710m : GK208M [GeForce 710M] +10de:1295 103c 2b0d 710m : GeForce 710A +10de:1295 103c 2b0f 710m : GeForce 710A +10de:1295 103c 2b11 710m : GeForce 710A +10de:1295 103c 2b20 710m : GeForce 810A +10de:1295 103c 2b21 710m : GeForce 810A +10de:1295 103c 2b22 710m : GeForce 810A +10de:1295 17aa 367a 710m : GeForce 805A +10de:1295 17aa 367c 710m : GeForce 710A +10de:1296 0000 0000 825m : GK208M [GeForce 825M] +10de:1298 0000 0000 gt720m : GK208M [GeForce GT 720M] +10de:1299 0000 0000 920m : GK208BM [GeForce 920M] +10de:1299 17aa 30bb 920m : GeForce 920A +10de:1299 17aa 30df 920m : GeForce 920A +10de:1299 17aa 36a7 920m : GeForce 920A +10de:1299 17aa 36af 920m : GeForce 920M +10de:129a 0000 0000 910m : GK208BM [GeForce 910M] +10de:12b9 0000 0000 k610m : GK208GLM [Quadro K610M] +10de:12ba 0000 0000 k510m : GK208GLM [Quadro K510M] +10de:1340 0000 0000 830m : GM108M [GeForce 830M] +10de:1340 103c 2b2b 830m : GeForce 830A +10de:1341 0000 0000 840m : GM108M [GeForce 840M] +10de:1341 17aa 3697 840m : GeForce 840A +10de:1341 17aa 3699 840m : GeForce 840A +10de:1341 17aa 369c 840m : GeForce 840A +10de:1344 0000 0000 845m : GM108M [GeForce 845M] +10de:1346 0000 0000 930m : GM108M [GeForce 930M] +10de:1347 0000 0000 940m : GM108M [GeForce 940M] +10de:1348 0000 0000 945m945a : GM108M [GeForce 945M / 945A] +10de:1349 0000 0000 930m : GM108M [GeForce 930M] +10de:134b 0000 0000 940mx : GM108M [GeForce 940MX] +10de:134d 0000 0000 940mx : GM108M [GeForce 940MX] +10de:134d 17aa 2248 940mx : ThinkPad T570 +10de:134e 0000 0000 930mx : GM108M [GeForce 930MX] +10de:134f 0000 0000 920mx : GM108M [GeForce 920MX] +10de:137a 0000 0000 k620m : GM108GLM [Quadro K620M / Quadro M500M] +10de:137a 17aa 505a k620m : Quadro M500M +10de:137b 0000 0000 m520 : GM108GLM [Quadro M520 Mobile] +10de:137d 0000 0000 940a : GM108M [GeForce 940A] +10de:1380 0000 0000 gtx750 : GM107 [GeForce GTX 750 Ti] +10de:1381 0000 0000 gtx750 : GM107 [GeForce GTX 750] +10de:1382 0000 0000 gtx745 : GM107 [GeForce GTX 745] +10de:1390 0000 0000 845m : GM107M [GeForce 845M] +10de:1391 0000 0000 gtx850m : GM107M [GeForce GTX 850M] +10de:1391 17aa 3697 gtx850m : GeForce GTX 850A +10de:1391 17aa a125 gtx850m : GeForce GTX 850A +10de:1392 0000 0000 gtx860m : GM107M [GeForce GTX 860M] +10de:1393 0000 0000 840m : GM107M [GeForce 840M] +10de:1398 0000 0000 845m : GM107M [GeForce 845M] +10de:1399 0000 0000 945m : GM107M [GeForce 945M] +10de:139a 0000 0000 gtx950m : GM107M [GeForce GTX 950M] +10de:139a 17aa 362c gtx950m : GeForce GTX 950A +10de:139a 17aa 362f gtx950m : GeForce GTX 950A +10de:139a 17aa 363f gtx950m : GeForce GTX 950A +10de:139a 17aa 3640 gtx950m : GeForce GTX 950A +10de:139a 17aa 3647 gtx950m : GeForce GTX 950A +10de:139a 17aa 36b9 gtx950m : GeForce GTX 950A +10de:139b 0000 0000 gtx960m : GM107M [GeForce GTX 960M] +10de:139b 1028 06e4 gtx960m : XPS 15 9550 +10de:139b 103c 2b4c gtx960m : GeForce GTX 960A +10de:139c 0000 0000 940m : GM107M [GeForce 940M] +10de:139d 0000 0000 gtx750 : GM107M [GeForce GTX 750 Ti] +10de:13b0 0000 0000 m2000m : GM107GLM [Quadro M2000M] +10de:13b1 0000 0000 m1000m : GM107GLM [Quadro M1000M] +10de:13b2 0000 0000 m600m : GM107GLM [Quadro M600M] +10de:13b3 0000 0000 k2200m : GM107GLM [Quadro K2200M] +10de:13b4 0000 0000 m620 : GM107GLM [Quadro M620 Mobile] +10de:13b6 0000 0000 m1200 : GM107GLM [Quadro M1200 Mobile] +10de:13ba 0000 0000 k2200 : GM107GL [Quadro K2200] +10de:13bb 0000 0000 k620 : GM107GL [Quadro K620] +10de:13bc 0000 0000 k1200 : GM107GL [Quadro K1200] +10de:13bd 0000 0000 m10 : GM107GL [Tesla M10] +10de:13bd 10de 110a m10 : GRID M40 +10de:13bd 10de 1160 m10 : Tesla M10 +10de:13bd 10de 11d2 m10 : GRID M10-8Q +10de:13c0 0000 0000 gtx980 : GM204 [GeForce GTX 980] +10de:13c0 1043 8504 gtx980 : GTX980-4GD5 +10de:13c2 0000 0000 gtx970 : GM204 [GeForce GTX 970] +10de:13d7 0000 0000 gtx980m : GM204M [GeForce GTX 980M] +10de:13d8 0000 0000 gtx970m : GM204M [GeForce GTX 970M] +10de:13d9 0000 0000 gtx965m : GM204M [GeForce GTX 965M] +10de:13da 0000 0000 gtx980 : GM204M [GeForce GTX 980 Mobile] +10de:13e7 0000 0000 gtx980 : GM204GL [GeForce GTX 980 Engineering Sample] +10de:13f0 0000 0000 m5000 : GM204GL [Quadro M5000] +10de:13f1 0000 0000 m4000 : GM204GL [Quadro M4000] +10de:13f2 0000 0000 m60 : GM204GL [Tesla M60] +10de:13f2 10de 114d m60 : GRID M60-1Q +10de:13f2 10de 114e m60 : GRID M60-2Q +10de:13f2 10de 1150 m60 : GRID M60-8Q +10de:13f2 10de 11b0 m60 : GRID M60-4A +10de:13f3 0000 0000 m6 : GM204GL [Tesla M6] +10de:13f3 10de 1184 m6 : GRID M6-8Q +10de:13f8 0000 0000 m5000mm5000 : GM204GLM [Quadro M5000M / M5000 SE] +10de:13f9 0000 0000 m4000m : GM204GLM [Quadro M4000M] +10de:13fa 0000 0000 m3000m : GM204GLM [Quadro M3000M] +10de:13fa 10de 11c9 m3000m : Quadro M3000 SE +10de:13fb 0000 0000 m5500 : GM204GLM [Quadro M5500] +10de:1401 0000 0000 gtx960 : GM206 [GeForce GTX 960] +10de:1402 0000 0000 gtx950 : GM206 [GeForce GTX 950] +10de:1406 0000 0000 gtx960 : GM206 [GeForce GTX 960 OEM] +10de:1407 0000 0000 gtx750 : GM206 [GeForce GTX 750 v2] +10de:1427 0000 0000 gtx965m : GM206M [GeForce GTX 965M] +10de:1430 0000 0000 m2000 : GM206GL [Quadro M2000] +10de:1431 0000 0000 m4 : GM206GL [Tesla M4] +10de:1436 0000 0000 m2200 : GM206GLM [Quadro M2200 Mobile] +10de:15f0 0000 0000 gp100 : GP100GL [Quadro GP100] +10de:15f7 0000 0000 p100 : GP100GL [Tesla P100 PCIe 12GB] +10de:15f8 0000 0000 p100 : GP100GL [Tesla P100 PCIe 16GB] +10de:15f9 0000 0000 p100 : GP100GL [Tesla P100 SXM2 16GB] +10de:1617 0000 0000 gtx980m : GM204M [GeForce GTX 980M] +10de:1618 0000 0000 gtx970m : GM204M [GeForce GTX 970M] +10de:1619 0000 0000 gtx965m : GM204M [GeForce GTX 965M] +10de:161a 0000 0000 gtx980 : GM204M [GeForce GTX 980 Mobile] +10de:1667 0000 0000 gtx965m : GM204M [GeForce GTX 965M] +10de:174d 0000 0000 mx130 : GM108M [GeForce MX130] +10de:174e 0000 0000 mx110 : GM108M [GeForce MX110] +10de:17c2 0000 0000 gtx : GM200 [GeForce GTX TITAN X] +10de:17c8 0000 0000 gtx980 : GM200 [GeForce GTX 980 Ti] +10de:17f0 0000 0000 m6000 : GM200GL [Quadro M6000] +10de:17f1 0000 0000 m6000 : GM200GL [Quadro M6000 24GB] +10de:17fd 0000 0000 m40 : GM200GL [Tesla M40] +10de:1b06 0000 0000 gtx1080 : GP102 [GeForce GTX 1080 Ti] +10de:1b30 0000 0000 p6000 : GP102GL [Quadro P6000] +10de:1b38 0000 0000 p40 : GP102GL [Tesla P40] +10de:1b80 0000 0000 gtx1080 : GP104 [GeForce GTX 1080] +10de:1b81 0000 0000 gtx1070 : GP104 [GeForce GTX 1070] +10de:1b82 0000 0000 gtx1070 : GP104 [GeForce GTX 1070 Ti] +10de:1b83 0000 0000 gtx1060 : GP104 [GeForce GTX 1060 6GB] +10de:1b84 0000 0000 gtx1060 : GP104 [GeForce GTX 1060 3GB] +10de:1ba0 0000 0000 gtx1080 : GP104M [GeForce GTX 1080 Mobile] +10de:1ba1 0000 0000 gtx1070 : GP104M [GeForce GTX 1070 Mobile] +10de:1ba1 1458 1651 gtx1070 : GeForce GTX 1070 Max-Q +10de:1ba1 1462 11e8 gtx1070 : GeForce GTX 1070 Max-Q +10de:1ba1 1462 11e9 gtx1070 : GeForce GTX 1070 Max-Q +10de:1ba1 1558 9501 gtx1070 : GeForce GTX 1070 Max-Q +10de:1ba2 0000 0000 gtx1070 : GP104M [GeForce GTX 1070 Mobile] +10de:1bad 0000 0000 gtx1070 : GP104 [GeForce GTX 1070 Engineering Sample] +10de:1bb0 0000 0000 p5000 : GP104GL [Quadro P5000] +10de:1bb1 0000 0000 p4000 : GP104GL [Quadro P4000] +10de:1bb3 0000 0000 p4 : GP104GL [Tesla P4] +10de:1bb4 0000 0000 p6 : GP104GL [Tesla P6] +10de:1bb5 0000 0000 p5200 : GP104GLM [Quadro P5200 Mobile] +10de:1bb5 103c 842f p5200 : P5200 [Zbook 17 G5 mobile workstation] +10de:1bb6 0000 0000 p5000 : GP104GLM [Quadro P5000 Mobile] +10de:1bb7 0000 0000 p4000 : GP104GLM [Quadro P4000 Mobile] +10de:1bb7 1462 11e9 p4000 : Quadro P4000 Max-Q +10de:1bb8 0000 0000 p3000 : GP104GLM [Quadro P3000 Mobile] +10de:1bb9 0000 0000 p4200 : GP104GLM [Quadro P4200 Mobile] +10de:1bb9 103c 842f p4200 : P4200 [Zbook 17 G5 mobile workstation] +10de:1bbb 0000 0000 p3200 : GP104GLM [Quadro P3200 Mobile] +10de:1bbb 103c 842f p3200 : P3200 [Zbook 17 G5 moble workstation] +10de:1be0 0000 0000 gtx1080 : GP104BM [GeForce GTX 1080 Mobile] +10de:1be0 1028 07c0 gtx1080 : GeForce GTX 1080 Max-Q +10de:1be0 1458 355b gtx1080 : GeForce GTX 1080 Max-Q +10de:1be1 0000 0000 gtx1070 : GP104BM [GeForce GTX 1070 Mobile] +10de:1c02 0000 0000 gtx1060 : GP106 [GeForce GTX 1060 3GB] +10de:1c03 0000 0000 gtx1060 : GP106 [GeForce GTX 1060 6GB] +10de:1c04 0000 0000 gtx1060 : GP106 [GeForce GTX 1060 5GB] +10de:1c06 0000 0000 gtx1060 : GP106 [GeForce GTX 1060 6GB Rev. 2] +10de:1c20 0000 0000 gtx1060 : GP106M [GeForce GTX 1060 Mobile] +10de:1c20 17aa 39b9 gtx1060 : GeForce GTX 1060 Max-Q 3GB +10de:1c21 0000 0000 gtx1050 : GP106M [GeForce GTX 1050 Ti Mobile] +10de:1c22 0000 0000 gtx1050 : GP106M [GeForce GTX 1050 Mobile] +10de:1c30 0000 0000 p2000 : GP106GL [Quadro P2000] +10de:1c60 0000 0000 gtx1060 : GP106BM [GeForce GTX 1060 Mobile 6GB] +10de:1c60 103c 8390 gtx1060 : GeForce GTX 1060 Max-Q 6GB +10de:1c61 0000 0000 gtx1050 : GP106BM [GeForce GTX 1050 Ti Mobile] +10de:1c62 0000 0000 gtx1050 : GP106BM [GeForce GTX 1050 Mobile] +10de:1c81 0000 0000 gtx1050 : GP107 [GeForce GTX 1050] +10de:1c82 0000 0000 gtx1050 : GP107 [GeForce GTX 1050 Ti] +10de:1c83 0000 0000 gtx1050 : GP107 [GeForce GTX 1050 3GB] +10de:1c8c 0000 0000 gtx1050 : GP107M [GeForce GTX 1050 Ti Mobile] +10de:1c8d 0000 0000 gtx1050 : GP107M [GeForce GTX 1050 Mobile] +10de:1c8f 0000 0000 gtx1050 : GP107M [GeForce GTX 1050 Ti Max-Q] +10de:1c92 0000 0000 gtx1050 : GP107M [GeForce GTX 1050 Mobile] +10de:1cb1 0000 0000 p1000 : GP107GL [Quadro P1000] +10de:1cb2 0000 0000 p600 : GP107GL [Quadro P600] +10de:1cb3 0000 0000 p400 : GP107GL [Quadro P400] +10de:1cb6 0000 0000 p620 : GP107GL [Quadro P620] +10de:1cba 0000 0000 p2000 : GP107GLM [Quadro P2000 Mobile] +10de:1cba 103c 842c p2000 : P2000 [Zbook 15 G5 mobile workstation] +10de:1cba 103c 842f p2000 : P2000 [Zbook 17 G5 mobile workstation] +10de:1cbb 0000 0000 p1000 : GP107GLM [Quadro P1000 Mobile] +10de:1cbb 103c 8429 p1000 : P1000 [Zbook Studio G5 mobile workstation] +10de:1cbb 103c 842c p1000 : P1000 [Zbook 15 G5 mobile workstation] +10de:1cbb 103c 842f p1000 : P1000 [Zbook 17 G5 mobile workstation] +10de:1cbb 103c 8451 p1000 : P1000 [Zbook Studio x360 G5 mobile workstation] +10de:1cbc 0000 0000 p600 : GP107GLM [Quadro P600 Mobile] +10de:1ccc 0000 0000 gtx1050 : GP107BM [GeForce GTX 1050 Ti Mobile] +10de:1ccd 0000 0000 gtx1050 : GP107BM [GeForce GTX 1050 Mobile] +10de:1d01 0000 0000 gt1030 : GP108 [GeForce GT 1030] +10de:1d10 0000 0000 mx150 : GP108M [GeForce MX150] +10de:1d12 0000 0000 mx150 : GP108M [GeForce MX150] +10de:1d12 1d72 1701 mx150 : Mi Notebook Pro [GeForce MX150] +10de:1d33 0000 0000 p500 : GP108GLM [Quadro P500 Mobile] +10de:1db1 0000 0000 v100 : GV100GL [Tesla V100 SXM2 16GB] +10de:1db3 0000 0000 v100fhhl : GV100GL [Tesla V100 FHHL 16GB] +10de:1db4 0000 0000 v100 : GV100GL [Tesla V100 PCIe 16GB] +10de:1db5 0000 0000 v100 : GV100GL [Tesla V100 SXM2 32GB] +10de:1db6 0000 0000 v100 : GV100GL [Tesla V100 PCIe 32GB] +10de:1db7 0000 0000 v100 : GV100GL [Tesla V100 DGXS 32GB] +10de:1dba 0000 0000 gv100 : GV100GL [Quadro GV100] +10de:1dba 10de 12eb gv100 : TITAN V CEO Edition +10de:1e07 0000 0000 rtx2080 : TU102 [GeForce RTX 2080 Ti] +10de:1e3c 0000 0000 rtx6000 : TU102GL [Quadro RTX 6000] +10de:1e87 0000 0000 rtx2080 : TU104 [GeForce RTX 2080] +10de:1eab 0000 0000 rtx2080 : TU104M [GeForce RTX 2080 Mobile] +10de:1f07 0000 0000 rtx2070 : TU106 [GeForce RTX 2070] diff --git a/llvm/lib/OffloadArch/nvidia/vendor_specific_capabilities.cpp b/llvm/lib/OffloadArch/nvidia/vendor_specific_capabilities.cpp new file mode 100644 --- /dev/null +++ b/llvm/lib/OffloadArch/nvidia/vendor_specific_capabilities.cpp @@ -0,0 +1,37 @@ +//===-- OffloadArch/nvidia/vendor_specific_capabilities.cpp ----*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===---------------------------------------------------------------------===// +/// +/// \file nvidia/vendor_specific_capabilities.cpp +/// +/// Implementation of vendor specific runtime capabilities +/// +//===---------------------------------------------------------------------===// + +#include "llvm/OffloadArch/OffloadArch.h" +#include +#include +#include +#include +#include + +std::string _aot_nvidia_capabilities(uint16_t vid, uint16_t devid, + std::string oa) { + std::string nvidia_capabilities; + std::string file_contents = + _aot_get_file_contents(std::string("/sys/module/nvidia/version")); + if (!file_contents.empty()) { + // parse nvidia kernel module version and release + int ver, rel; + char sbuf[16]; + sscanf(file_contents.c_str(), "%d.%d\n", &ver, &rel); + snprintf(sbuf, 16, "v%d.%d", ver, rel); + nvidia_capabilities.append(sbuf); + } + // FIXME: Add capability for running cuda version + return nvidia_capabilities; +} diff --git a/llvm/lib/OffloadArch/offload-arch/CMakeLists.txt b/llvm/lib/OffloadArch/offload-arch/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/llvm/lib/OffloadArch/offload-arch/CMakeLists.txt @@ -0,0 +1,25 @@ +add_llvm_tool(offload-arch + ${CMAKE_CURRENT_SOURCE_DIR}/offload-arch.cpp + DEPENDS generated-table LLVMOffloadArch +) +target_link_libraries(offload-arch PRIVATE LLVMOffloadArch) + +add_custom_target( + amdgpu-arch ALL + COMMAND ln -sf offload-arch amdgpu-arch + DEPENDS offload-arch) +add_custom_target( + nvidia-arch ALL + COMMAND ln -sf offload-arch nvidia-arch + DEPENDS offload-arch) +add_custom_target( + intelhd-arch ALL + COMMAND ln -sf offload-arch intelhd-arch + DEPENDS offload-arch) + +install(PROGRAMS + ${CMAKE_CURRENT_BINARY_DIR}/amdgpu-arch + ${CMAKE_CURRENT_BINARY_DIR}/nvidia-arch + ${CMAKE_CURRENT_BINARY_DIR}/intelhd-arch + DESTINATION bin + COMPONENT offload-arch) diff --git a/llvm/lib/OffloadArch/offload-arch/offload-arch.cpp b/llvm/lib/OffloadArch/offload-arch/offload-arch.cpp new file mode 100644 --- /dev/null +++ b/llvm/lib/OffloadArch/offload-arch/offload-arch.cpp @@ -0,0 +1,229 @@ +//===------------------ OffloadArch/offload-arch.cpp -----------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===---------------------------------------------------------------------===// +/// +/// \file +/// Implementation of LLVM offload-arch tool and library (libLLVMOffloadArch.a) +/// The offload-arch tool has alias commands "amdgpu-arch", "nvidia-arch". +/// and "intelhd-arch". The alias commands are symbolic links to offload-arch. +/// +/// With no options, offload-arch prints the offload-arch for the current +/// system to stdout. offload-arch has options for querying vendor specific +/// runtime capabilities and for querying the offload-arch of offload images +/// that are embedded into application binaries. See help text below for +/// descriptions of these options. offload-arch uses a two table lookup +/// scheme to determine the offload-arch of supported offload devices. +/// The first table maps pci-id to vendor-specified codenames. Multiple pci-ids +/// can map to a single codename. The 2nd table maps these codenames to the +/// offload-arch needed for compilation using the --offload-arch clang driver +/// options. Multiple codenames can map to a single offload-arch. The +/// offload-arch tool can be used to dump information from these tables. +/// These tables are maintained by vendors and the community as part of LLVM. +/// The tables and source to support querying architecture-specific capabilities +/// are organized in vendor-specific directories such as amdgpu and nvidia, +/// so that offload-arch can be used as a consistent cross-platform tool for +/// managing offloading architectures. offload-arch is both an LLVM tool and +/// an LLVM Library (libLLVMOffloadArch.a). The library is so that runtimes +/// and/or the clang driver have an API to query the current environment +/// without resorting to execv type calls to the offload-arch tool. +/// +//===----------------------------------------------------------------------===// + +#include "llvm/OffloadArch/OffloadArch.h" + +void aot_usage() { + printf("\n\ + offload-arch: Print offload architecture(s) for current system, or\n\ + print offload runtime capabilities of current system,\n\ + or lookup information about offload architectures,\n\ + or print offload requirements for an application binary\n\ +\n\ + Usage:\n\ +\n\ + offload-arch [ Options ] [ Optional lookup-value ]\n\ +\n\ + With no options, offload-arch prints the value for the first visible\n\ + offload-arch in the system. This can be used by various clang\n\ + frontends. For example, to compile for openmp offloading on your current\n\ + system, invoke clang with the following command:\n\ + clang -fopenmp -fopenmp-targets=`offload-arch` foo.c\n\ +\n\ + If an optional lookup-value is specified, offload-arch will\n\ + check if the value is either a valid offload-arch or a codename\n\ + and display associated values with that offload-arch or codename.\n\ + For example, this provides all information for offload-arch gfx906:\n\ +\n\ + offload-arch gfx906 -v \n\ +\n\ + Options:\n\ + -m Print device code name (often found in pci.ids file)\n\ + -n Print numeric pci-id\n\ + -t Print clang offload triple to use for the offload arch.\n\ + -c Print offload capabilities of the current system.\n\ + This option is used by the language runtime to select an image\n\ + when multiple offload images are availble in the binary.\n\ + A capability must exist for each requirement of the selected image.\n\ + each compiled offload image built into an application binary file.\n\ + -a Print values for all devices. Don't stop at first visible device.\n\ + -v Verbose = -a -m -n -t \n\ + For all devices, print codename, numeric value and triple\n\ +\n\ + The options -a and -v will show the offload-arch for all pci-ids that could\n\ + offload, even if they are not visible. Otherwise, the options -m, -n, -t,\n\ + or no option will only show information for the first visible device.\n\ +\n\ + Other Options:\n\ + -h Print this help message\n\ + -f Print offload requirements including offload-arch for\n\ + each offload image compiled into an application binary file.\n\ +\n\ + There are aliases (symbolic links) 'amdgpu-arch', 'nvidia-arch',\n\ + and 'intelhd-arch'to the offload-arch tool. These aliases return 1\n\ + if respectively, no AMD, no Nvidia, or no IntelHD GPUs are found.\n\ + These aliases are useful to determine if architecture-specific\n\ + offloading tests should be run, or to conditionally load \n\ + archecture-specific software.\n\ +\n\ + Copyright (c) 2021 ADVANCED MICRO DEVICES, INC.\n\ +\n\ +"); + exit(1); +} + +static bool AOT_get_first_capable_device; + +int main(int argc, char **argv) { + bool print_codename = false; + bool print_numeric = false; + bool print_runtime_capabilities = false; + bool amdgpu_arch = false; + bool nvidia_arch = false; + bool intelhd_arch = false; + AOT_get_first_capable_device = true; + bool print_triple = false; + std::string lookup_value; + std::string a, input_filename; + for (int argi = 0; argi < argc; argi++) { + a = std::string(argv[argi]); + if (argi == 0) { + // look for arch-specific invocation with symlink + amdgpu_arch = (a.find("amdgpu-arch") != std::string::npos); + nvidia_arch = (a.find("nvidia-arch") != std::string::npos); + intelhd_arch = (a.find("intelhd-arch") != std::string::npos); + } else { + if (a == "-n") { + print_numeric = true; + } else if (a == "-m") { + print_codename = true; + } else if (a == "-c") { + print_runtime_capabilities = true; + } else if (a == "-h") { + aot_usage(); + } else if (a == "-a") { + AOT_get_first_capable_device = false; // get all devices + } else if (a == "-t") { + print_triple = true; + } else if (a == "-v") { + AOT_get_first_capable_device = false; // get all devices + print_codename = true; + print_numeric = true; + print_triple = true; + } else if (a == "-f") { + argi++; + if (argi == argc) { + fprintf(stderr, "ERROR: Missing filename for -f option\n"); + return 1; + } + input_filename = std::string(argv[argi]); + } else { + lookup_value = a; + } + } + } + + std::vector PCI_IDS; + + if (!input_filename.empty()) { + PCI_IDS = _aot_get_requirements_from_file(input_filename); + if (PCI_IDS.empty()) + return 1; + for (auto PCI_ID : PCI_IDS) + printf("%s\n", PCI_ID.c_str()); + return 0; + + } else if (lookup_value.empty()) { + // No lookup_value so get the current pci ids. + // First check if invocation was arch specific. + if (amdgpu_arch) + PCI_IDS = _aot_get_pci_ids(AMDGPU_SEARCH_PHRASE, AMDGPU_PCIID_PHRASE); + else if (nvidia_arch) + PCI_IDS = _aot_get_pci_ids(NVIDIA_SEARCH_PHRASE, NVIDIA_PCIID_PHRASE); + else if (intelhd_arch) + PCI_IDS = _aot_get_pci_ids(INTELHD_SEARCH_PHRASE, INTELHD_PCIID_PHRASE); + else + PCI_IDS = _aot_get_all_pci_ids(); + } else { + if (print_runtime_capabilities) { + fprintf(stderr, "ERROR: cannot lookup offload-arch/codename AND query\n"); + fprintf(stderr, " active runtime capabilities (-c).\n"); + return 1; + } + PCI_IDS = _aot_lookup_offload_arch(lookup_value); + if (PCI_IDS.empty()) + PCI_IDS = _aot_lookup_codename(lookup_value); + if (PCI_IDS.empty()) { + fprintf(stderr, "ERROR: Could not find \"%s\" in offload-arch tables\n", + lookup_value.c_str()); + fprintf(stderr, " as either an offload-arch or a codename.\n"); + return 1; + } + } + + if (PCI_IDS.empty()) { + return 1; + } + + int rc = 0; + bool first_device_printed = false; + for (auto PCI_ID : PCI_IDS) { + if (AOT_get_first_capable_device && first_device_printed) + break; + unsigned vid32, devid32; + sscanf(PCI_ID.c_str(), "%x:%x", &vid32, &devid32); + uint16_t vid = vid32; + uint16_t devid = devid32; + std::string offload_arch = _aot_get_offload_arch(vid, devid); + if (offload_arch.empty()) { + fprintf(stderr, "ERROR: offload-arch not found for %x:%x.\n", vid, devid); + rc = 1; + } else { + std::string xinfo; + if (print_codename) + xinfo.append(" ").append(_aot_get_codename(vid, devid)); + if (print_numeric) + xinfo.append(" ").append(PCI_ID); + if (print_triple) + xinfo.append(" ").append(_aot_get_triple(vid, devid)); + if (print_runtime_capabilities || AOT_get_first_capable_device) { + std::string caps = _aot_get_capabilities(vid, devid, offload_arch); + std::size_t found_loc = caps.find("NOT-VISIBLE"); + if (found_loc == std::string::npos) { + if (print_runtime_capabilities) + xinfo.append(" ").append(caps); + printf("%s%s\n", offload_arch.c_str(), xinfo.c_str()); + first_device_printed = true; + } + } else { + printf("%s%s\n", offload_arch.c_str(), xinfo.c_str()); + first_device_printed = true; + } + } + } + if (!first_device_printed) + rc = 1; + return rc; +} diff --git a/openmp/libomptarget/src/CMakeLists.txt b/openmp/libomptarget/src/CMakeLists.txt --- a/openmp/libomptarget/src/CMakeLists.txt +++ b/openmp/libomptarget/src/CMakeLists.txt @@ -22,7 +22,10 @@ set(LIBOMPTARGET_SRC_FILES ${LIBOMPTARGET_SRC_FILES} PARENT_SCOPE) -include_directories(${LIBOMPTARGET_LLVM_INCLUDE_DIRS}) +include_directories( + ${LIBOMPTARGET_LLVM_INCLUDE_DIRS} + ${CMAKE_INSTALL_PREFIX}/include + ${LLVM_MAIN_INCLUDE_DIR}) # Build libomptarget library with libdl dependency. add_library(omptarget SHARED ${LIBOMPTARGET_SRC_FILES}) @@ -36,6 +39,9 @@ endif() target_link_libraries(omptarget PRIVATE ${CMAKE_DL_LIBS} + -lLLVMOffloadArch + -lclang-cpp + "-Wl,--no-allow-shlib-undefined" "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports") # Install libomptarget under the lib destination folder.