Cuda.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. #include "clang/Basic/Cuda.h"
  2. #include "llvm/ADT/StringRef.h"
  3. #include "llvm/ADT/StringSwitch.h"
  4. #include "llvm/Support/ErrorHandling.h"
  5. namespace clang {
  6. const char *CudaVersionToString(CudaVersion V) {
  7. switch (V) {
  8. case CudaVersion::UNKNOWN:
  9. return "unknown";
  10. case CudaVersion::CUDA_70:
  11. return "7.0";
  12. case CudaVersion::CUDA_75:
  13. return "7.5";
  14. case CudaVersion::CUDA_80:
  15. return "8.0";
  16. case CudaVersion::CUDA_90:
  17. return "9.0";
  18. }
  19. llvm_unreachable("invalid enum");
  20. }
  21. const char *CudaArchToString(CudaArch A) {
  22. switch (A) {
  23. case CudaArch::UNKNOWN:
  24. return "unknown";
  25. case CudaArch::SM_20:
  26. return "sm_20";
  27. case CudaArch::SM_21:
  28. return "sm_21";
  29. case CudaArch::SM_30:
  30. return "sm_30";
  31. case CudaArch::SM_32:
  32. return "sm_32";
  33. case CudaArch::SM_35:
  34. return "sm_35";
  35. case CudaArch::SM_37:
  36. return "sm_37";
  37. case CudaArch::SM_50:
  38. return "sm_50";
  39. case CudaArch::SM_52:
  40. return "sm_52";
  41. case CudaArch::SM_53:
  42. return "sm_53";
  43. case CudaArch::SM_60:
  44. return "sm_60";
  45. case CudaArch::SM_61:
  46. return "sm_61";
  47. case CudaArch::SM_62:
  48. return "sm_62";
  49. case CudaArch::SM_70:
  50. return "sm_70";
  51. }
  52. llvm_unreachable("invalid enum");
  53. }
  54. CudaArch StringToCudaArch(llvm::StringRef S) {
  55. return llvm::StringSwitch<CudaArch>(S)
  56. .Case("sm_20", CudaArch::SM_20)
  57. .Case("sm_21", CudaArch::SM_21)
  58. .Case("sm_30", CudaArch::SM_30)
  59. .Case("sm_32", CudaArch::SM_32)
  60. .Case("sm_35", CudaArch::SM_35)
  61. .Case("sm_37", CudaArch::SM_37)
  62. .Case("sm_50", CudaArch::SM_50)
  63. .Case("sm_52", CudaArch::SM_52)
  64. .Case("sm_53", CudaArch::SM_53)
  65. .Case("sm_60", CudaArch::SM_60)
  66. .Case("sm_61", CudaArch::SM_61)
  67. .Case("sm_62", CudaArch::SM_62)
  68. .Case("sm_70", CudaArch::SM_70)
  69. .Default(CudaArch::UNKNOWN);
  70. }
  71. const char *CudaVirtualArchToString(CudaVirtualArch A) {
  72. switch (A) {
  73. case CudaVirtualArch::UNKNOWN:
  74. return "unknown";
  75. case CudaVirtualArch::COMPUTE_20:
  76. return "compute_20";
  77. case CudaVirtualArch::COMPUTE_30:
  78. return "compute_30";
  79. case CudaVirtualArch::COMPUTE_32:
  80. return "compute_32";
  81. case CudaVirtualArch::COMPUTE_35:
  82. return "compute_35";
  83. case CudaVirtualArch::COMPUTE_37:
  84. return "compute_37";
  85. case CudaVirtualArch::COMPUTE_50:
  86. return "compute_50";
  87. case CudaVirtualArch::COMPUTE_52:
  88. return "compute_52";
  89. case CudaVirtualArch::COMPUTE_53:
  90. return "compute_53";
  91. case CudaVirtualArch::COMPUTE_60:
  92. return "compute_60";
  93. case CudaVirtualArch::COMPUTE_61:
  94. return "compute_61";
  95. case CudaVirtualArch::COMPUTE_62:
  96. return "compute_62";
  97. case CudaVirtualArch::COMPUTE_70:
  98. return "compute_70";
  99. }
  100. llvm_unreachable("invalid enum");
  101. }
  102. CudaVirtualArch StringToCudaVirtualArch(llvm::StringRef S) {
  103. return llvm::StringSwitch<CudaVirtualArch>(S)
  104. .Case("compute_20", CudaVirtualArch::COMPUTE_20)
  105. .Case("compute_30", CudaVirtualArch::COMPUTE_30)
  106. .Case("compute_32", CudaVirtualArch::COMPUTE_32)
  107. .Case("compute_35", CudaVirtualArch::COMPUTE_35)
  108. .Case("compute_37", CudaVirtualArch::COMPUTE_37)
  109. .Case("compute_50", CudaVirtualArch::COMPUTE_50)
  110. .Case("compute_52", CudaVirtualArch::COMPUTE_52)
  111. .Case("compute_53", CudaVirtualArch::COMPUTE_53)
  112. .Case("compute_60", CudaVirtualArch::COMPUTE_60)
  113. .Case("compute_61", CudaVirtualArch::COMPUTE_61)
  114. .Case("compute_62", CudaVirtualArch::COMPUTE_62)
  115. .Case("compute_70", CudaVirtualArch::COMPUTE_70)
  116. .Default(CudaVirtualArch::UNKNOWN);
  117. }
  118. CudaVirtualArch VirtualArchForCudaArch(CudaArch A) {
  119. switch (A) {
  120. case CudaArch::UNKNOWN:
  121. return CudaVirtualArch::UNKNOWN;
  122. case CudaArch::SM_20:
  123. case CudaArch::SM_21:
  124. return CudaVirtualArch::COMPUTE_20;
  125. case CudaArch::SM_30:
  126. return CudaVirtualArch::COMPUTE_30;
  127. case CudaArch::SM_32:
  128. return CudaVirtualArch::COMPUTE_32;
  129. case CudaArch::SM_35:
  130. return CudaVirtualArch::COMPUTE_35;
  131. case CudaArch::SM_37:
  132. return CudaVirtualArch::COMPUTE_37;
  133. case CudaArch::SM_50:
  134. return CudaVirtualArch::COMPUTE_50;
  135. case CudaArch::SM_52:
  136. return CudaVirtualArch::COMPUTE_52;
  137. case CudaArch::SM_53:
  138. return CudaVirtualArch::COMPUTE_53;
  139. case CudaArch::SM_60:
  140. return CudaVirtualArch::COMPUTE_60;
  141. case CudaArch::SM_61:
  142. return CudaVirtualArch::COMPUTE_61;
  143. case CudaArch::SM_62:
  144. return CudaVirtualArch::COMPUTE_62;
  145. case CudaArch::SM_70:
  146. return CudaVirtualArch::COMPUTE_70;
  147. }
  148. llvm_unreachable("invalid enum");
  149. }
  150. CudaVersion MinVersionForCudaArch(CudaArch A) {
  151. switch (A) {
  152. case CudaArch::UNKNOWN:
  153. return CudaVersion::UNKNOWN;
  154. case CudaArch::SM_20:
  155. case CudaArch::SM_21:
  156. case CudaArch::SM_30:
  157. case CudaArch::SM_32:
  158. case CudaArch::SM_35:
  159. case CudaArch::SM_37:
  160. case CudaArch::SM_50:
  161. case CudaArch::SM_52:
  162. case CudaArch::SM_53:
  163. return CudaVersion::CUDA_70;
  164. case CudaArch::SM_60:
  165. case CudaArch::SM_61:
  166. case CudaArch::SM_62:
  167. return CudaVersion::CUDA_80;
  168. case CudaArch::SM_70:
  169. return CudaVersion::CUDA_90;
  170. }
  171. llvm_unreachable("invalid enum");
  172. }
  173. CudaVersion MaxVersionForCudaArch(CudaArch A) {
  174. switch (A) {
  175. case CudaArch::UNKNOWN:
  176. return CudaVersion::UNKNOWN;
  177. case CudaArch::SM_20:
  178. case CudaArch::SM_21:
  179. return CudaVersion::CUDA_80;
  180. default:
  181. return CudaVersion::LATEST;
  182. }
  183. }
  184. } // namespace clang