You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

profile.cpp 16 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. /**
  2. * \file dnn/src/x86/profile.cpp
  3. * MegEngine is Licensed under the Apache License, Version 2.0 (the "License")
  4. *
  5. * Copyright (c) 2014-2020 Megvii Inc. All rights reserved.
  6. *
  7. * Unless required by applicable law or agreed to in writing,
  8. * software distributed under the License is distributed on an
  9. * "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. */
  11. #include "src/x86/profile.h"
  12. namespace megdnn {
  13. namespace x86 {
  14. ProfileCache get_profile_cache()
  15. {
  16. ProfileCache vec;
  17. vec.clear();
  18. vec.reserve(294);
  19. vec.push_back(ProfileElement(2, 4, 4, 49));
  20. vec.push_back(ProfileElement(2, 4, 8, 25));
  21. vec.push_back(ProfileElement(2, 4, 16, 19));
  22. vec.push_back(ProfileElement(2, 4, 32, 14));
  23. vec.push_back(ProfileElement(2, 4, 64, 13));
  24. vec.push_back(ProfileElement(2, 4, 96, 15));
  25. vec.push_back(ProfileElement(2, 4, 128, 15));
  26. vec.push_back(ProfileElement(2, 8, 4, 241));
  27. vec.push_back(ProfileElement(2, 8, 8, 121));
  28. vec.push_back(ProfileElement(2, 8, 16, 57));
  29. vec.push_back(ProfileElement(2, 8, 32, 29));
  30. vec.push_back(ProfileElement(2, 8, 64, 17));
  31. vec.push_back(ProfileElement(2, 8, 96, 39));
  32. vec.push_back(ProfileElement(2, 8, 128, 29));
  33. vec.push_back(ProfileElement(2, 16, 4, 1000000000));
  34. vec.push_back(ProfileElement(2, 16, 8, 273));
  35. vec.push_back(ProfileElement(2, 16, 16, 177));
  36. vec.push_back(ProfileElement(2, 16, 32, 137));
  37. vec.push_back(ProfileElement(2, 16, 64, 1000000000));
  38. vec.push_back(ProfileElement(2, 16, 96, 1000000000));
  39. vec.push_back(ProfileElement(2, 16, 128, 1000000000));
  40. vec.push_back(ProfileElement(2, 32, 4, 1000000000));
  41. vec.push_back(ProfileElement(2, 32, 8, 1000000000));
  42. vec.push_back(ProfileElement(2, 32, 16, 1000000000));
  43. vec.push_back(ProfileElement(2, 32, 32, 1000000000));
  44. vec.push_back(ProfileElement(2, 32, 64, 1000000000));
  45. vec.push_back(ProfileElement(2, 32, 96, 1000000000));
  46. vec.push_back(ProfileElement(2, 32, 128, 1000000000));
  47. vec.push_back(ProfileElement(2, 64, 4, 1000000000));
  48. vec.push_back(ProfileElement(2, 64, 8, 1000000000));
  49. vec.push_back(ProfileElement(2, 64, 16, 1000000000));
  50. vec.push_back(ProfileElement(2, 64, 32, 1000000000));
  51. vec.push_back(ProfileElement(2, 64, 64, 1000000000));
  52. vec.push_back(ProfileElement(2, 64, 96, 1000000000));
  53. vec.push_back(ProfileElement(2, 64, 128, 1000000000));
  54. vec.push_back(ProfileElement(2, 96, 4, 1000000000));
  55. vec.push_back(ProfileElement(2, 96, 8, 1000000000));
  56. vec.push_back(ProfileElement(2, 96, 16, 1000000000));
  57. vec.push_back(ProfileElement(2, 96, 32, 1000000000));
  58. vec.push_back(ProfileElement(2, 96, 64, 1000000000));
  59. vec.push_back(ProfileElement(2, 96, 96, 1000000000));
  60. vec.push_back(ProfileElement(2, 96, 128, 1000000000));
  61. vec.push_back(ProfileElement(2, 128, 4, 1000000000));
  62. vec.push_back(ProfileElement(2, 128, 8, 1000000000));
  63. vec.push_back(ProfileElement(2, 128, 16, 1000000000));
  64. vec.push_back(ProfileElement(2, 128, 32, 1000000000));
  65. vec.push_back(ProfileElement(2, 128, 64, 1000000000));
  66. vec.push_back(ProfileElement(2, 128, 96, 1000000000));
  67. vec.push_back(ProfileElement(2, 128, 128, 1000000000));
  68. vec.push_back(ProfileElement(3, 4, 4, 10));
  69. vec.push_back(ProfileElement(3, 4, 8, 5));
  70. vec.push_back(ProfileElement(3, 4, 16, 7));
  71. vec.push_back(ProfileElement(3, 4, 32, 7));
  72. vec.push_back(ProfileElement(3, 4, 64, 6));
  73. vec.push_back(ProfileElement(3, 4, 96, 5));
  74. vec.push_back(ProfileElement(3, 4, 128, 5));
  75. vec.push_back(ProfileElement(3, 8, 4, 14));
  76. vec.push_back(ProfileElement(3, 8, 8, 13));
  77. vec.push_back(ProfileElement(3, 8, 16, 13));
  78. vec.push_back(ProfileElement(3, 8, 32, 13));
  79. vec.push_back(ProfileElement(3, 8, 64, 11));
  80. vec.push_back(ProfileElement(3, 8, 96, 11));
  81. vec.push_back(ProfileElement(3, 8, 128, 12));
  82. vec.push_back(ProfileElement(3, 16, 4, 37));
  83. vec.push_back(ProfileElement(3, 16, 8, 29));
  84. vec.push_back(ProfileElement(3, 16, 16, 21));
  85. vec.push_back(ProfileElement(3, 16, 32, 19));
  86. vec.push_back(ProfileElement(3, 16, 64, 14));
  87. vec.push_back(ProfileElement(3, 16, 96, 13));
  88. vec.push_back(ProfileElement(3, 16, 128, 13));
  89. vec.push_back(ProfileElement(3, 32, 4, 69));
  90. vec.push_back(ProfileElement(3, 32, 8, 105));
  91. vec.push_back(ProfileElement(3, 32, 16, 105));
  92. vec.push_back(ProfileElement(3, 32, 32, 49));
  93. vec.push_back(ProfileElement(3, 32, 64, 29));
  94. vec.push_back(ProfileElement(3, 32, 96, 27));
  95. vec.push_back(ProfileElement(3, 32, 128, 39));
  96. vec.push_back(ProfileElement(3, 64, 4, 193));
  97. vec.push_back(ProfileElement(3, 64, 8, 161));
  98. vec.push_back(ProfileElement(3, 64, 16, 137));
  99. vec.push_back(ProfileElement(3, 64, 32, 113));
  100. vec.push_back(ProfileElement(3, 64, 64, 1000000000));
  101. vec.push_back(ProfileElement(3, 64, 96, 1000000000));
  102. vec.push_back(ProfileElement(3, 64, 128, 1000000000));
  103. vec.push_back(ProfileElement(3, 96, 4, 1000000000));
  104. vec.push_back(ProfileElement(3, 96, 8, 305));
  105. vec.push_back(ProfileElement(3, 96, 16, 1000000000));
  106. vec.push_back(ProfileElement(3, 96, 32, 1000000000));
  107. vec.push_back(ProfileElement(3, 96, 64, 1000000000));
  108. vec.push_back(ProfileElement(3, 96, 96, 1000000000));
  109. vec.push_back(ProfileElement(3, 96, 128, 1000000000));
  110. vec.push_back(ProfileElement(3, 128, 4, 1000000000));
  111. vec.push_back(ProfileElement(3, 128, 8, 1000000000));
  112. vec.push_back(ProfileElement(3, 128, 16, 1000000000));
  113. vec.push_back(ProfileElement(3, 128, 32, 1000000000));
  114. vec.push_back(ProfileElement(3, 128, 64, 1000000000));
  115. vec.push_back(ProfileElement(3, 128, 96, 1000000000));
  116. vec.push_back(ProfileElement(3, 128, 128, 1000000000));
  117. vec.push_back(ProfileElement(4, 4, 4, 7));
  118. vec.push_back(ProfileElement(4, 4, 8, 7));
  119. vec.push_back(ProfileElement(4, 4, 16, 5));
  120. vec.push_back(ProfileElement(4, 4, 32, 6));
  121. vec.push_back(ProfileElement(4, 4, 64, 5));
  122. vec.push_back(ProfileElement(4, 4, 96, 5));
  123. vec.push_back(ProfileElement(4, 4, 128, 5));
  124. vec.push_back(ProfileElement(4, 8, 4, 14));
  125. vec.push_back(ProfileElement(4, 8, 8, 12));
  126. vec.push_back(ProfileElement(4, 8, 16, 5));
  127. vec.push_back(ProfileElement(4, 8, 32, 6));
  128. vec.push_back(ProfileElement(4, 8, 64, 6));
  129. vec.push_back(ProfileElement(4, 8, 96, 6));
  130. vec.push_back(ProfileElement(4, 8, 128, 5));
  131. vec.push_back(ProfileElement(4, 16, 4, 14));
  132. vec.push_back(ProfileElement(4, 16, 8, 14));
  133. vec.push_back(ProfileElement(4, 16, 16, 13));
  134. vec.push_back(ProfileElement(4, 16, 32, 13));
  135. vec.push_back(ProfileElement(4, 16, 64, 13));
  136. vec.push_back(ProfileElement(4, 16, 96, 13));
  137. vec.push_back(ProfileElement(4, 16, 128, 13));
  138. vec.push_back(ProfileElement(4, 32, 4, 37));
  139. vec.push_back(ProfileElement(4, 32, 8, 31));
  140. vec.push_back(ProfileElement(4, 32, 16, 29));
  141. vec.push_back(ProfileElement(4, 32, 32, 21));
  142. vec.push_back(ProfileElement(4, 32, 64, 21));
  143. vec.push_back(ProfileElement(4, 32, 96, 29));
  144. vec.push_back(ProfileElement(4, 32, 128, 21));
  145. vec.push_back(ProfileElement(4, 64, 4, 137));
  146. vec.push_back(ProfileElement(4, 64, 8, 113));
  147. vec.push_back(ProfileElement(4, 64, 16, 89));
  148. vec.push_back(ProfileElement(4, 64, 32, 69));
  149. vec.push_back(ProfileElement(4, 64, 64, 45));
  150. vec.push_back(ProfileElement(4, 64, 96, 37));
  151. vec.push_back(ProfileElement(4, 64, 128, 35));
  152. vec.push_back(ProfileElement(4, 96, 4, 137));
  153. vec.push_back(ProfileElement(4, 96, 8, 113));
  154. vec.push_back(ProfileElement(4, 96, 16, 105));
  155. vec.push_back(ProfileElement(4, 96, 32, 77));
  156. vec.push_back(ProfileElement(4, 96, 64, 53));
  157. vec.push_back(ProfileElement(4, 96, 96, 45));
  158. vec.push_back(ProfileElement(4, 96, 128, 39));
  159. vec.push_back(ProfileElement(4, 128, 4, 137));
  160. vec.push_back(ProfileElement(4, 128, 8, 121));
  161. vec.push_back(ProfileElement(4, 128, 16, 153));
  162. vec.push_back(ProfileElement(4, 128, 32, 97));
  163. vec.push_back(ProfileElement(4, 128, 64, 1000000000));
  164. vec.push_back(ProfileElement(4, 128, 96, 1000000000));
  165. vec.push_back(ProfileElement(4, 128, 128, 1000000000));
  166. vec.push_back(ProfileElement(5, 4, 4, 8));
  167. vec.push_back(ProfileElement(5, 4, 8, 9));
  168. vec.push_back(ProfileElement(5, 4, 16, 5));
  169. vec.push_back(ProfileElement(5, 4, 32, 5));
  170. vec.push_back(ProfileElement(5, 4, 64, 5));
  171. vec.push_back(ProfileElement(5, 4, 96, 5));
  172. vec.push_back(ProfileElement(5, 4, 128, 5));
  173. vec.push_back(ProfileElement(5, 8, 4, 7));
  174. vec.push_back(ProfileElement(5, 8, 8, 6));
  175. vec.push_back(ProfileElement(5, 8, 16, 5));
  176. vec.push_back(ProfileElement(5, 8, 32, 5));
  177. vec.push_back(ProfileElement(5, 8, 64, 5));
  178. vec.push_back(ProfileElement(5, 8, 96, 5));
  179. vec.push_back(ProfileElement(5, 8, 128, 5));
  180. vec.push_back(ProfileElement(5, 16, 4, 21));
  181. vec.push_back(ProfileElement(5, 16, 8, 12));
  182. vec.push_back(ProfileElement(5, 16, 16, 12));
  183. vec.push_back(ProfileElement(5, 16, 32, 11));
  184. vec.push_back(ProfileElement(5, 16, 64, 11));
  185. vec.push_back(ProfileElement(5, 16, 96, 11));
  186. vec.push_back(ProfileElement(5, 16, 128, 11));
  187. vec.push_back(ProfileElement(5, 32, 4, 23));
  188. vec.push_back(ProfileElement(5, 32, 8, 14));
  189. vec.push_back(ProfileElement(5, 32, 16, 14));
  190. vec.push_back(ProfileElement(5, 32, 32, 13));
  191. vec.push_back(ProfileElement(5, 32, 64, 13));
  192. vec.push_back(ProfileElement(5, 32, 96, 13));
  193. vec.push_back(ProfileElement(5, 32, 128, 13));
  194. vec.push_back(ProfileElement(5, 64, 4, 77));
  195. vec.push_back(ProfileElement(5, 64, 8, 39));
  196. vec.push_back(ProfileElement(5, 64, 16, 37));
  197. vec.push_back(ProfileElement(5, 64, 32, 29));
  198. vec.push_back(ProfileElement(5, 64, 64, 29));
  199. vec.push_back(ProfileElement(5, 64, 96, 21));
  200. vec.push_back(ProfileElement(5, 64, 128, 21));
  201. vec.push_back(ProfileElement(5, 96, 4, 113));
  202. vec.push_back(ProfileElement(5, 96, 8, 77));
  203. vec.push_back(ProfileElement(5, 96, 16, 61));
  204. vec.push_back(ProfileElement(5, 96, 32, 39));
  205. vec.push_back(ProfileElement(5, 96, 64, 37));
  206. vec.push_back(ProfileElement(5, 96, 96, 31));
  207. vec.push_back(ProfileElement(5, 96, 128, 29));
  208. vec.push_back(ProfileElement(5, 128, 4, 113));
  209. vec.push_back(ProfileElement(5, 128, 8, 97));
  210. vec.push_back(ProfileElement(5, 128, 16, 69));
  211. vec.push_back(ProfileElement(5, 128, 32, 53));
  212. vec.push_back(ProfileElement(5, 128, 64, 39));
  213. vec.push_back(ProfileElement(5, 128, 96, 31));
  214. vec.push_back(ProfileElement(5, 128, 128, 31));
  215. vec.push_back(ProfileElement(6, 4, 4, 7));
  216. vec.push_back(ProfileElement(6, 4, 8, 3));
  217. vec.push_back(ProfileElement(6, 4, 16, 5));
  218. vec.push_back(ProfileElement(6, 4, 32, 4));
  219. vec.push_back(ProfileElement(6, 4, 64, 5));
  220. vec.push_back(ProfileElement(6, 4, 96, 4));
  221. vec.push_back(ProfileElement(6, 4, 128, 4));
  222. vec.push_back(ProfileElement(6, 8, 4, 11));
  223. vec.push_back(ProfileElement(6, 8, 8, 5));
  224. vec.push_back(ProfileElement(6, 8, 16, 5));
  225. vec.push_back(ProfileElement(6, 8, 32, 5));
  226. vec.push_back(ProfileElement(6, 8, 64, 5));
  227. vec.push_back(ProfileElement(6, 8, 96, 5));
  228. vec.push_back(ProfileElement(6, 8, 128, 5));
  229. vec.push_back(ProfileElement(6, 16, 4, 13));
  230. vec.push_back(ProfileElement(6, 16, 8, 11));
  231. vec.push_back(ProfileElement(6, 16, 16, 11));
  232. vec.push_back(ProfileElement(6, 16, 32, 5));
  233. vec.push_back(ProfileElement(6, 16, 64, 5));
  234. vec.push_back(ProfileElement(6, 16, 96, 5));
  235. vec.push_back(ProfileElement(6, 16, 128, 11));
  236. vec.push_back(ProfileElement(6, 32, 4, 21));
  237. vec.push_back(ProfileElement(6, 32, 8, 14));
  238. vec.push_back(ProfileElement(6, 32, 16, 13));
  239. vec.push_back(ProfileElement(6, 32, 32, 13));
  240. vec.push_back(ProfileElement(6, 32, 64, 13));
  241. vec.push_back(ProfileElement(6, 32, 96, 13));
  242. vec.push_back(ProfileElement(6, 32, 128, 13));
  243. vec.push_back(ProfileElement(6, 64, 4, 39));
  244. vec.push_back(ProfileElement(6, 64, 8, 29));
  245. vec.push_back(ProfileElement(6, 64, 16, 29));
  246. vec.push_back(ProfileElement(6, 64, 32, 21));
  247. vec.push_back(ProfileElement(6, 64, 64, 21));
  248. vec.push_back(ProfileElement(6, 64, 96, 21));
  249. vec.push_back(ProfileElement(6, 64, 128, 21));
  250. vec.push_back(ProfileElement(6, 96, 4, 97));
  251. vec.push_back(ProfileElement(6, 96, 8, 61));
  252. vec.push_back(ProfileElement(6, 96, 16, 39));
  253. vec.push_back(ProfileElement(6, 96, 32, 37));
  254. vec.push_back(ProfileElement(6, 96, 64, 29));
  255. vec.push_back(ProfileElement(6, 96, 96, 29));
  256. vec.push_back(ProfileElement(6, 96, 128, 21));
  257. vec.push_back(ProfileElement(6, 128, 4, 77));
  258. vec.push_back(ProfileElement(6, 128, 8, 61));
  259. vec.push_back(ProfileElement(6, 128, 16, 39));
  260. vec.push_back(ProfileElement(6, 128, 32, 37));
  261. vec.push_back(ProfileElement(6, 128, 64, 29));
  262. vec.push_back(ProfileElement(6, 128, 96, 29));
  263. vec.push_back(ProfileElement(6, 128, 128, 23));
  264. vec.push_back(ProfileElement(7, 4, 4, 5));
  265. vec.push_back(ProfileElement(7, 4, 8, 4));
  266. vec.push_back(ProfileElement(7, 4, 16, 4));
  267. vec.push_back(ProfileElement(7, 4, 32, 4));
  268. vec.push_back(ProfileElement(7, 4, 64, 4));
  269. vec.push_back(ProfileElement(7, 4, 96, 4));
  270. vec.push_back(ProfileElement(7, 4, 128, 3));
  271. vec.push_back(ProfileElement(7, 8, 4, 5));
  272. vec.push_back(ProfileElement(7, 8, 8, 5));
  273. vec.push_back(ProfileElement(7, 8, 16, 5));
  274. vec.push_back(ProfileElement(7, 8, 32, 5));
  275. vec.push_back(ProfileElement(7, 8, 64, 5));
  276. vec.push_back(ProfileElement(7, 8, 96, 5));
  277. vec.push_back(ProfileElement(7, 8, 128, 5));
  278. vec.push_back(ProfileElement(7, 16, 4, 13));
  279. vec.push_back(ProfileElement(7, 16, 8, 11));
  280. vec.push_back(ProfileElement(7, 16, 16, 5));
  281. vec.push_back(ProfileElement(7, 16, 32, 5));
  282. vec.push_back(ProfileElement(7, 16, 64, 5));
  283. vec.push_back(ProfileElement(7, 16, 96, 5));
  284. vec.push_back(ProfileElement(7, 16, 128, 5));
  285. vec.push_back(ProfileElement(7, 32, 4, 21));
  286. vec.push_back(ProfileElement(7, 32, 8, 13));
  287. vec.push_back(ProfileElement(7, 32, 16, 13));
  288. vec.push_back(ProfileElement(7, 32, 32, 13));
  289. vec.push_back(ProfileElement(7, 32, 64, 13));
  290. vec.push_back(ProfileElement(7, 32, 96, 13));
  291. vec.push_back(ProfileElement(7, 32, 128, 12));
  292. vec.push_back(ProfileElement(7, 64, 4, 37));
  293. vec.push_back(ProfileElement(7, 64, 8, 21));
  294. vec.push_back(ProfileElement(7, 64, 16, 14));
  295. vec.push_back(ProfileElement(7, 64, 32, 14));
  296. vec.push_back(ProfileElement(7, 64, 64, 14));
  297. vec.push_back(ProfileElement(7, 64, 96, 13));
  298. vec.push_back(ProfileElement(7, 64, 128, 14));
  299. vec.push_back(ProfileElement(7, 96, 4, 61));
  300. vec.push_back(ProfileElement(7, 96, 8, 39));
  301. vec.push_back(ProfileElement(7, 96, 16, 37));
  302. vec.push_back(ProfileElement(7, 96, 32, 31));
  303. vec.push_back(ProfileElement(7, 96, 64, 21));
  304. vec.push_back(ProfileElement(7, 96, 96, 21));
  305. vec.push_back(ProfileElement(7, 96, 128, 21));
  306. vec.push_back(ProfileElement(7, 128, 4, 61));
  307. vec.push_back(ProfileElement(7, 128, 8, 31));
  308. vec.push_back(ProfileElement(7, 128, 16, 37));
  309. vec.push_back(ProfileElement(7, 128, 32, 11));
  310. vec.push_back(ProfileElement(7, 128, 64, 13));
  311. vec.push_back(ProfileElement(7, 128, 96, 23));
  312. vec.push_back(ProfileElement(7, 128, 128, 21));
  313. return vec;
  314. }
  315. } // namespace fallback
  316. } // namespace megdnn
  317. // vim: syntax=cpp.doxygen

MegEngine 安装包中集成了使用 GPU 运行代码所需的 CUDA 环境,不用区分 CPU 和 GPU 版。 如果想要运行 GPU 程序,请确保机器本身配有 GPU 硬件设备并安装好驱动。 如果你想体验在云端 GPU 算力平台进行深度学习开发的感觉,欢迎访问 MegStudio 平台