jhuber6 added inline comments.

================
Comment at: clang/tools/amdgpu-arch/AMDGPUArch.cpp:47
 
-  // Attempt to load the HSA runtime.
-  if (llvm::Error Err = loadHSA()) {
-    logAllUnhandledErrors(std::move(Err), llvm::errs());
-    return 1;
-  }
-
-  hsa_status_t Status = hsa_init();
-  if (Status != HSA_STATUS_SUCCESS) {
-    return 1;
-  }
-
-  std::vector<std::string> GPUs;
-  Status = hsa_iterate_agents(iterateAgentsCallback, &GPUs);
-  if (Status != HSA_STATUS_SUCCESS) {
-    return 1;
-  }
-
-  for (const auto &GPU : GPUs)
-    printf("%s\n", GPU.c_str());
-
-  if (GPUs.size() < 1)
-    return 1;
-
-  hsa_shut_down();
-  return 0;
+#ifdef _WIN32
+  return printGPUsByHIP();
----------------
arsenm wrote:
> yaxunl wrote:
> > jhuber6 wrote:
> > > yaxunl wrote:
> > > > jhuber6 wrote:
> > > > > Doesn't LLVM know if it's being built for Windows? Maybe we should 
> > > > > key off of that instead and then conditionally `add_sources` for a 
> > > > > single function that satisfies the same "print all the architectures" 
> > > > > thing.
> > > > When this code is compiled on Windows, the compiler predefines 
> > > > `_WIN32`, so it should work.
> > > > 
> > > > I tried to tweak cmake files of amdgpu-arch to selectively add source 
> > > > files for Windows and non-windows but it did not work. If you have a 
> > > > file in that directory that is not included in any target, cmake will 
> > > > report an error. Seems there is a mechanism in CMake files for clang 
> > > > tools not allowing any 'dangling' source files.
> > > The proper way to do that is to add it to a new subdirectory and 
> > > conditionally do `add_subdirectory`. Something like
> > > ```
> > > HSA/GetAMDGPUArch.cpp
> > > HIP/GetAMDGPUArch.cpp
> > > ```
> > > It's not a big deal, but I just feel like including unused symbols in the 
> > > binary on Linux isn't ideal. Up to you if you want to put in the effort.
> > The HIP version actually works on both Linux and Windows. I am not sure 
> > whether one day we want to use it on Linux too since it supports target ID 
> > features.
> > 
> > Also, I kind of think it is overkill to have separate directories for 
> > Windows and Linux for this simple program.
> Why can't you get the target id features through the HSA path? I think 
> there's value in going through the lowest level component to get the 
> information
This should be what we do in the OpenMP runtime, should be able to add that 
feature.
```
  uint32_t name_len;                                                            
                                                                                
                          
  err = hsa_isa_get_info_alt(isa, HSA_ISA_INFO_NAME_LENGTH, &name_len);         
                                                                                
                               
  if (err != HSA_STATUS_SUCCESS) {                                              
                                                                                
                                                                     
    DP("Error getting ISA info length\n");                                      
                                                                                
                                                                     
    return err;                                                                 
                                                                                
                                                                     
  }                                                                             
                                                                                
                                                                     
                                                                                
                                                                                
                                                                     
  char TargetID[name_len];                                                      
                                                                                
                                                                     
  err = hsa_isa_get_info_alt(isa, HSA_ISA_INFO_NAME, TargetID);                 
                                                                                
                                                                     
  if (err != HSA_STATUS_SUCCESS) {                                              
                                                                                
                                                                     
    DP("Error getting ISA info name\n");                                        
                                                                                
                                                                     
    return err;                                                                 
                                                                                
                                                                     
  } 
```

It's unfortunate that HSA does not work on Windows so we need to split this 
stuff up.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D153725/new/

https://reviews.llvm.org/D153725

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to