{"id":87748,"date":"2026-07-30T20:49:47","date_gmt":"2026-07-30T12:49:47","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/87748.html"},"modified":"2026-07-30T20:49:47","modified_gmt":"2026-07-30T12:49:47","slug":"cuda%e7%bc%96%e7%a8%8b%e5%ae%9e%e6%88%9802%ef%bc%9a%e8%ae%a4%e8%af%86-gpu%e3%80%81sm%e3%80%81%e7%ba%bf%e7%a8%8b%e6%9d%9f%e4%b8%8e%e8%ae%a1%e7%ae%97%e8%83%bd%e5%8a%9b","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/87748.html","title":{"rendered":"CUDA\u7f16\u7a0b\u5b9e\u621802\uff1a\u8ba4\u8bc6 GPU\u3001SM\u3001\u7ebf\u7a0b\u675f\u4e0e\u8ba1\u7b97\u80fd\u529b"},"content":{"rendered":"<h2>CUDA\u7f16\u7a0b\u5b9e\u621802&#xff1a;\u8ba4\u8bc6 GPU\u3001SM\u3001\u7ebf\u7a0b\u675f\u4e0e\u8ba1\u7b97\u80fd\u529b<\/h2>\n<p>\u7cfb\u5217\u5b9a\u4f4d&#xff1a;\u4ece\u96f6\u5f00\u59cb&#xff0c;\u7528\u80fd\u591f\u8fd0\u884c\u3001\u80fd\u591f\u89c2\u5bdf\u3001\u80fd\u591f\u9a8c\u8bc1\u7684\u7a0b\u5e8f\u5b66\u4e60 CUDA\u3002<\/p>\n<p>\u672c\u7bc7\u9002\u5408&#xff1a;\u5df2\u7ecf\u5b8c\u6210\u7b2c\u4e00\u7bc7\u73af\u5883\u642d\u5efa&#xff0c;\u80fd\u8fd0\u884c\u4e00\u4e2a\u7b80\u5355 Kernel&#xff0c;\u4f46\u4ecd\u7136\u5206\u4e0d\u6e05 GPU\u3001SM\u3001Block\u3001Thread\u3001Warp \u548c\u8ba1\u7b97\u80fd\u529b\u7684\u8bfb\u8005\u3002<\/p>\n<p>\u9605\u8bfb\u540e\u7684\u5b9e\u9645\u6210\u679c&#xff1a;\u4f60\u5c06\u5f97\u5230\u4e00\u4efd\u81ea\u5df1\u7535\u8111\u7684 GPU \u80fd\u529b\u62a5\u544a&#xff0c;\u80fd\u591f\u7b97\u51fa\u7ebf\u7a0b\u7684\u5168\u5c40\u7f16\u53f7\u4e0e Warp \u7f16\u53f7&#xff0c;\u80fd\u591f\u4eb2\u773c\u770b\u5230 32 \u4f4d\u6d3b\u52a8\u63a9\u7801&#xff0c;\u5e76\u80fd\u5224\u65ad\u5e38\u89c1 CUDA \u914d\u7f6e\u662f\u5426\u5408\u7406\u3002<\/p>\n<p>\u914d\u5957\u73af\u5883&#xff1a;Windows \u6216 Linux\u3001NVIDIA GPU\u3001CUDA Toolkit\u3001CMake&#xff1b;\u6587\u4e2d\u4ee3\u7801\u4f7f\u7528 CUDA C&#043;&#043;\u3002<\/p>\n<p>\u672c\u6587\u8d44\u6599\u6838\u5bf9\u65e5\u671f&#xff1a;2026 \u5e74 7 \u6708\u3002CUDA \u4f1a\u6301\u7eed\u6f14\u8fdb&#xff0c;\u5177\u4f53\u4e0a\u9650\u5e94\u4ee5\u7a0b\u5e8f\u67e5\u8be2\u7ed3\u679c\u4e0e\u5f53\u524d NVIDIA \u5b98\u65b9\u6587\u6863\u4e3a\u51c6\u3002<\/p>\n<p>\u4e0a\u4e00\u7bc7&#xff1a;CUDA\u7f16\u7a0b\u5b9e\u621801&#xff1a;\u5f00\u53d1\u73af\u5883\u642d\u5efa\u4e0e\u7b2c\u4e00\u4e2a GPU \u7a0b\u5e8f<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/07\/20260730124939-6a6b48631e509.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<hr \/>\n<h3>\u4e00\u3001\u8fd9\u7bc7\u6587\u7ae0\u8981\u89e3\u51b3\u7684&#xff0c;\u4e0d\u662f\u201c\u80cc\u51e0\u4e2a\u786c\u4ef6\u540d\u8bcd\u201d<\/h3>\n<p>\u7b2c\u4e00\u7bc7\u6587\u7ae0\u5b8c\u6210\u540e&#xff0c;\u4f60\u5e94\u8be5\u5df2\u7ecf\u89c1\u8fc7\u8fd9\u6837\u7684 Kernel \u542f\u52a8&#xff1a;<\/p>\n<p>hello_from_gpu<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">4<\/span><span class=\"token operator\">&gt;&gt;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u4f60\u77e5\u9053\u5b83\u4ee3\u8868 2 \u4e2a Block&#xff0c;\u6bcf\u4e2a Block \u6709 4 \u4e2a Thread&#xff0c;\u603b\u5171\u4f1a\u521b\u5efa 8 \u4e2a CUDA \u7ebf\u7a0b\u3002\u4f46\u662f&#xff0c;\u4ece\u8fd9\u4e00\u884c\u7ee7\u7eed\u5f80\u4e0b\u8ffd\u95ee&#xff0c;\u5f88\u5feb\u5c31\u4f1a\u9047\u5230\u4e00\u8fde\u4e32\u95ee\u9898&#xff1a;<\/p>\n<ul>\n<li>\u8fd9\u4e9b\u7ebf\u7a0b\u662f\u4e0d\u662f\u4e00\u4e2a\u7ebf\u7a0b\u5bf9\u5e94\u4e00\u9897\u201cCUDA Core\u201d&#xff1f;<\/li>\n<li>Block \u662f\u4e0d\u662f\u4e00\u5757\u56fa\u5b9a\u786c\u4ef6&#xff1f;<\/li>\n<li>SM \u5230\u5e95\u662f\u4ec0\u4e48&#xff0c;\u4e3a\u4ec0\u4e48\u6027\u80fd\u6587\u7ae0\u603b\u5728\u8c08 SM&#xff1f;<\/li>\n<li>\u4e3a\u4ec0\u4e48\u5f88\u591a\u793a\u4f8b\u559c\u6b22\u7528 128\u3001256 \u4e2a\u7ebf\u7a0b&#xff0c;\u800c\u4e0d\u662f 100\u3001200 \u4e2a&#xff1f;<\/li>\n<li>Warp \u4e3a\u4ec0\u4e48\u603b\u662f 32 \u4e2a\u7ebf\u7a0b&#xff1f;<\/li>\n<li>threadIdx.x\u3001blockIdx.x \u5982\u4f55\u7ec4\u5408\u6210\u5168\u5c40\u7f16\u53f7&#xff1f;<\/li>\n<li>\u540c\u4e00\u4e2a Block \u7684\u7ebf\u7a0b\u662f\u5426\u4e00\u5b9a\u5728\u4e00\u8d77\u6267\u884c&#xff1f;<\/li>\n<li>\u4e0d\u540c Block \u8c01\u5148\u6267\u884c&#xff1f;<\/li>\n<li>\u663e\u5361\u578b\u53f7\u3001CUDA Core \u6570\u91cf\u3001\u8ba1\u7b97\u80fd\u529b\u3001CUDA Toolkit \u7248\u672c\u662f\u4ec0\u4e48\u5173\u7cfb&#xff1f;<\/li>\n<li>sm_75 \u662f\u663e\u5361\u578b\u53f7&#xff0c;\u8fd8\u662f\u7f16\u8bd1\u5668\u7684\u4f18\u5316\u7b49\u7ea7&#xff1f;<\/li>\n<li>\u4e3a\u4ec0\u4e48\u7a0b\u5e8f\u903b\u8f91\u5b8c\u5168\u6b63\u786e&#xff0c;\u6362\u4e00\u4e2a Block \u5927\u5c0f\u6027\u80fd\u5374\u53ef\u80fd\u4e0d\u540c&#xff1f;<\/li>\n<\/ul>\n<p>\u5982\u679c\u8fd9\u4e9b\u95ee\u9898\u6ca1\u6709\u7406\u6e05&#xff0c;\u540e\u9762\u5b66\u4e60\u5411\u91cf\u52a0\u6cd5\u3001\u5171\u4eab\u5185\u5b58\u3001\u5f52\u7ea6\u3001\u77e9\u9635\u4e58\u6cd5\u65f6&#xff0c;\u5f88\u5bb9\u6613\u9677\u5165\u4e00\u79cd\u72b6\u6001&#xff1a;\u4ee3\u7801\u80fd\u591f\u7167\u7740\u5199&#xff0c;\u6570\u5b57\u4e5f\u80fd\u7167\u7740\u6539&#xff0c;\u4f46\u4e0d\u77e5\u9053\u6bcf\u4e00\u4e2a\u6570\u5b57\u4e3a\u4ec0\u4e48\u5b58\u5728&#xff0c;\u66f4\u4e0d\u77e5\u9053\u9519\u8bef\u53d1\u751f\u5728\u54ea\u4e00\u5c42\u3002<\/p>\n<p>\u56e0\u6b64&#xff0c;\u672c\u7bc7\u4e0d\u4f1a\u628a GPU \u786c\u4ef6\u77e5\u8bc6\u5199\u6210\u4ea7\u54c1\u53c2\u6570\u767e\u79d1\u3002\u6211\u4eec\u53ea\u4fdd\u7559\u771f\u6b63\u4f1a\u5f71\u54cd CUDA \u7f16\u7a0b\u5224\u65ad\u7684\u90e8\u5206&#xff0c;\u5e76\u7528\u4e09\u4e2a\u7a0b\u5e8f\u5b8c\u6210\u9a8c\u8bc1&#xff1a;<\/p>\n<li>device_query_lite&#xff1a;\u67e5\u8be2\u81ea\u5df1\u7684 GPU \u540d\u79f0\u3001\u8ba1\u7b97\u80fd\u529b\u3001SM \u6570\u91cf\u3001Warp \u5927\u5c0f\u548c\u8d44\u6e90\u4e0a\u9650&#xff1b;<\/li>\n<li>thread_warp_mapping&#xff1a;\u89c2\u5bdf Block\u3001Thread\u3001\u5168\u5c40\u7f16\u53f7\u3001Warp\u3001Lane \u4e0e SM \u7684\u5bf9\u5e94\u5173\u7cfb&#xff1b;<\/li>\n<li>warp_vote_demo&#xff1a;\u4f7f\u7528 Warp \u6295\u7968\u51fd\u6570&#xff0c;\u628a\u5076\u6570 Lane \u548c\u5947\u6570 Lane \u53d8\u6210\u53ef\u4ee5\u76f4\u63a5\u770b\u5230\u7684 32 \u4f4d\u63a9\u7801\u3002<\/li>\n<p>\u8bfb\u5b8c\u540e&#xff0c;\u4f60\u4e0d\u5e94\u8be5\u53ea\u4f1a\u590d\u8ff0\u201cWarp \u6709 32 \u4e2a\u7ebf\u7a0b\u201d&#xff0c;\u800c\u5e94\u8be5\u80fd\u56de\u7b54&#xff1a;<\/p>\n<p>\u5f53\u4e00\u4e2a Block \u6709 40 \u4e2a\u7ebf\u7a0b\u65f6&#xff0c;\u786c\u4ef6\u4f1a\u5f62\u6210\u51e0\u4e2a Warp&#xff1f;\u7b2c\u4e8c\u4e2a Warp \u6709\u591a\u5c11\u6709\u6548 Lane&#xff1f;\u4e0b\u4e00\u4e2a Block \u7684\u7b2c 0 \u4e2a\u7ebf\u7a0b\u5c5e\u4e8e\u524d\u4e00\u4e2a Block \u7684\u7b2c\u4e8c\u4e2a Warp \u5417&#xff1f;<\/p>\n<p>\u7b54\u6848\u4f1a\u5728\u7a0b\u5e8f\u8f93\u51fa\u4e2d\u51fa\u73b0&#xff0c;\u800c\u4e0d\u662f\u53ea\u5199\u5728\u7ed3\u8bba\u91cc\u3002<\/p>\n<hr \/>\n<h3>\u4e8c\u3001\u5148\u5efa\u7acb\u4e00\u5f20\u4e0d\u4f1a\u6df7\u4e71\u7684\u5730\u56fe<\/h3>\n<p>CUDA \u521d\u5b66\u8005\u6700\u5e38\u89c1\u7684\u56f0\u96be&#xff0c;\u662f\u628a\u201c\u8f6f\u4ef6\u62bd\u8c61\u201d\u548c\u201c\u786c\u4ef6\u5b9e\u4f53\u201d\u6df7\u5728\u4e86\u4e00\u8d77\u3002\u5148\u770b\u4e24\u4e2a\u5c42\u6b21\u3002<\/p>\n<h4>2.1 \u8f6f\u4ef6\u5c42&#xff1a;\u4f60\u5728\u4ee3\u7801\u91cc\u521b\u5efa\u4ec0\u4e48<\/h4>\n<p>\u5f53 CPU \u542f\u52a8\u4e00\u4e2a CUDA Kernel \u65f6&#xff0c;\u7a0b\u5e8f\u5458\u63cf\u8ff0\u7684\u662f&#xff1a;<\/p>\n<p>Grid<br \/>\n\u2514\u2500\u2500 Block<br \/>\n    \u2514\u2500\u2500 Thread<\/p>\n<ul>\n<li>Grid \u8868\u793a\u672c\u6b21 Kernel \u542f\u52a8\u4ea7\u751f\u7684\u5168\u90e8\u7ebf\u7a0b&#xff1b;<\/li>\n<li>Grid \u7531\u591a\u4e2a Block \u7ec4\u6210&#xff1b;<\/li>\n<li>\u6bcf\u4e2a Block \u7531\u591a\u4e2a Thread \u7ec4\u6210&#xff1b;<\/li>\n<li>Grid\u3001Block \u90fd\u53ef\u4ee5\u662f\u4e00\u7ef4\u3001\u4e8c\u7ef4\u6216\u4e09\u7ef4&#xff1b;<\/li>\n<li>Thread \u662f\u7a0b\u5e8f\u5458\u89c6\u89d2\u4e0b\u6700\u57fa\u672c\u7684\u903b\u8f91\u6267\u884c\u8005\u3002<\/li>\n<\/ul>\n<p>\u8fd9\u4e9b\u6982\u5ff5\u76f4\u63a5\u51fa\u73b0\u5728 CUDA \u8bed\u6cd5\u4e2d&#xff1a;<\/p>\n<p>kernel<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token operator\">&lt;<\/span>grid_size<span class=\"token punctuation\">,<\/span> block_size<span class=\"token operator\">&gt;&gt;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u4ee5\u53ca Kernel \u5185\u7684\u5185\u5efa\u53d8\u91cf\u4e2d&#xff1a;<\/p>\n<p>gridDim<br \/>\nblockDim<br \/>\nblockIdx<br \/>\nthreadIdx<\/p>\n<h4>2.2 \u786c\u4ef6\u5c42&#xff1a;GPU \u7528\u4ec0\u4e48\u6267\u884c<\/h4>\n<p>\u4e3a\u4e86\u5efa\u7acb\u7b2c\u4e00\u7248\u6b63\u786e\u5fc3\u667a\u6a21\u578b&#xff0c;\u53ef\u4ee5\u628a\u786c\u4ef6\u5c42\u7b80\u5316\u4e3a&#xff1a;<\/p>\n<p>GPU<br \/>\n\u251c\u2500\u2500 \u591a\u4e2a SM<br \/>\n\u2502   \u251c\u2500\u2500 Warp \u8c03\u5ea6\u76f8\u5173\u8d44\u6e90<br \/>\n\u2502   \u251c\u2500\u2500 \u8fd0\u7b97\u529f\u80fd\u5355\u5143<br \/>\n\u2502   \u251c\u2500\u2500 \u5bc4\u5b58\u5668\u6587\u4ef6<br \/>\n\u2502   \u251c\u2500\u2500 Shared Memory \/ L1 \u76f8\u5173\u7247\u4e0a\u8d44\u6e90<br \/>\n\u2502   \u2514\u2500\u2500 \u53ef\u540c\u65f6\u9a7b\u7559\u7684\u82e5\u5e72 Block \u548c Warp<br \/>\n\u251c\u2500\u2500 L2 Cache<br \/>\n\u2514\u2500\u2500 Global Memory<\/p>\n<p>SM \u7684\u82f1\u6587\u662f Streaming Multiprocessor&#xff0c;\u901a\u5e38\u8bd1\u4e3a\u6d41\u5f0f\u591a\u5904\u7406\u5668\u3002CUDA \u4e2d\u5927\u91cf\u7ebf\u7a0b\u771f\u6b63\u88ab\u7ec4\u7ec7\u548c\u63a8\u8fdb\u6267\u884c\u7684\u6838\u5fc3\u573a\u6240&#xff0c;\u5c31\u662f SM\u3002<\/p>\n<p>\u8fd9\u91cc\u6682\u65f6\u4e0d\u8981\u628a SM \u7b80\u5355\u7b49\u540c\u4e3a\u201cCPU \u6838\u5fc3\u201d&#xff0c;\u56e0\u4e3a\u4e24\u8005\u7684\u8bbe\u8ba1\u76ee\u6807\u548c\u6267\u884c\u65b9\u5f0f\u4e0d\u540c\u3002CPU \u6838\u5fc3\u64c5\u957f\u5c11\u91cf\u590d\u6742\u63a7\u5236\u6d41\u3001\u4f4e\u5ef6\u8fdf\u548c\u5f3a\u5355\u7ebf\u7a0b\u80fd\u529b&#xff1b;GPU \u7684 SM \u64c5\u957f\u8ba9\u5927\u91cf\u7ebf\u7a0b\u4fdd\u6301\u5728\u6267\u884c\u73b0\u573a&#xff0c;\u5e76\u5728\u67d0\u4e9b Warp \u7b49\u5f85\u6570\u636e\u65f6\u5feb\u901f\u5207\u6362\u5230\u5176\u4ed6\u53ef\u8fd0\u884c Warp&#xff0c;\u4ee5\u63d0\u9ad8\u6574\u4f53\u541e\u5410\u91cf\u3002<\/p>\n<h4>2.3 \u8f6f\u4ef6\u5c42\u548c\u786c\u4ef6\u5c42\u5982\u4f55\u8fde\u63a5<\/h4>\n<p>\u6700\u5173\u952e\u7684\u6620\u5c04\u89c4\u5219\u662f&#xff1a;<\/p>\n<ul>\n<li>\u4e00\u4e2a Grid \u53ef\u4ee5\u5305\u542b\u8fdc\u591a\u4e8e SM \u6570\u91cf\u7684 Block&#xff1b;<\/li>\n<li>\u6bcf\u4e2a Block \u5728\u6267\u884c\u671f\u95f4\u5f52\u5c5e\u4e8e\u4e00\u4e2a SM&#xff0c;\u4e0d\u4f1a\u62c6\u6210\u4e24\u534a\u8de8\u8d8a\u4e24\u4e2a SM&#xff1b;<\/li>\n<li>\u4e00\u4e2a SM \u5728\u8d44\u6e90\u5141\u8bb8\u65f6\u53ef\u4ee5\u540c\u65f6\u9a7b\u7559\u591a\u4e2a Block&#xff1b;<\/li>\n<li>Block \u88ab\u5206\u914d\u5230\u54ea\u4e2a SM\u3001\u8c01\u5148\u6267\u884c&#xff0c;\u901a\u5e38\u4e0d\u7531\u7a0b\u5e8f\u5458\u6307\u5b9a&#xff1b;<\/li>\n<li>Block \u5185\u7684\u7ebf\u7a0b\u4f1a\u88ab\u5212\u5206\u4e3a Warp&#xff1b;<\/li>\n<li>Warp \u662f\u786c\u4ef6\u8c03\u5ea6\u548c\u6267\u884c\u65f6\u5fc5\u987b\u7406\u89e3\u7684\u91cd\u8981\u5206\u7ec4\u3002<\/li>\n<\/ul>\n<p>\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0<img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/07\/20260730124942-6a6b4866566ba.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>\u8fd9\u5f20\u56fe\u5fc5\u987b\u8bfb\u51fa\u4e09\u4e2a\u7ed3\u8bba\u3002<\/p>\n<p>\u7b2c\u4e00&#xff0c;Block \u662f\u8f6f\u4ef6\u7ec4\u7ec7\u5355\u4f4d&#xff0c;\u4e0d\u662f\u82af\u7247\u4e0a\u710a\u6b7b\u7684\u4e00\u5757\u533a\u57df\u3002Block A \u8fd9\u6b21\u53ef\u80fd\u5728 SM 0&#xff0c;\u4e0b\u4e00\u6b21\u8fd0\u884c\u4e0d\u5e94\u8be5\u5047\u5b9a\u8fd8\u5728 SM 0\u3002<\/p>\n<p>\u7b2c\u4e8c&#xff0c;\u4e00\u4e2a SM \u4e0d\u4e00\u5b9a\u4e00\u6b21\u53ea\u6267\u884c\u4e00\u4e2a Block\u3002\u53ea\u8981\u5bc4\u5b58\u5668\u3001Shared Memory\u3001\u7ebf\u7a0b\u6570\u3001Warp \u6570\u7b49\u8d44\u6e90\u5141\u8bb8&#xff0c;\u591a\u4e2a Block \u53ef\u4ee5\u540c\u65f6\u9a7b\u7559\u5728\u540c\u4e00\u4e2a SM\u3002<\/p>\n<p>\u7b2c\u4e09&#xff0c;\u4e0d\u540c Block \u4e0d\u80fd\u4f9d\u8d56\u666e\u901a Kernel \u4e2d\u7684\u6267\u884c\u5148\u540e\u987a\u5e8f\u3002\u4f60\u4e0d\u80fd\u5199\u51fa\u201cBlock 1 \u7b49\u5f85 Block 0 \u8bbe\u7f6e\u4e00\u4e2a\u6807\u5fd7\u201d\u7684\u5929\u771f\u5b9e\u73b0&#xff0c;\u7136\u540e\u671f\u5f85\u6240\u6709\u663e\u5361\u90fd\u6b63\u786e\u8fd0\u884c\u3002Block 0 \u53ef\u80fd\u8fd8\u6ca1\u6709\u5f97\u5230\u6267\u884c\u673a\u4f1a&#xff0c;\u800c Block 1 \u5374\u4e00\u76f4\u5360\u7740\u8d44\u6e90\u7b49\u5f85\u5b83&#xff0c;\u6700\u7ec8\u4ea7\u751f\u9519\u8bef\u6216\u6b7b\u9501\u98ce\u9669\u3002<\/p>\n<p>NVIDIA \u5f53\u524d\u7684 CUDA Programming Guide \u660e\u786e\u63cf\u8ff0\u4e86 Grid\u3001Block \u4e0e SM \u7684\u5173\u7cfb&#xff0c;\u4e5f\u5f3a\u8c03 Block \u4e4b\u95f4\u4e0d\u5e94\u4f9d\u8d56\u8c03\u5ea6\u987a\u5e8f\u3002\u5b66\u4e60\u65f6\u53ef\u4ee5\u628a\u5b98\u65b9 Programming Model \u4f5c\u4e3a\u957f\u671f\u53c2\u8003\u3002<\/p>\n<hr \/>\n<h3>\u4e09\u3001GPU \u4e0e CPU \u7684\u5dee\u5f02&#xff1a;\u91cd\u70b9\u4e0d\u662f\u201c\u8c01\u66f4\u5feb\u201d<\/h3>\n<p>\u521d\u5b66\u8005\u5e38\u95ee&#xff1a;\u201cGPU \u6bd4 CPU \u5feb\u591a\u5c11\u500d&#xff1f;\u201d\u8fd9\u4e2a\u95ee\u9898\u6ca1\u6709\u8131\u79bb\u4efb\u52a1\u7c7b\u578b\u7684\u7edf\u4e00\u7b54\u6848\u3002<\/p>\n<h4>3.1 CPU \u66f4\u50cf\u5c11\u91cf\u80fd\u529b\u5168\u9762\u7684\u8d1f\u8d23\u4eba<\/h4>\n<p>CPU \u7684\u5178\u578b\u4f18\u52bf\u5305\u62ec&#xff1a;<\/p>\n<ul>\n<li>\u590d\u6742\u5206\u652f\u4e0e\u63a7\u5236\u903b\u8f91&#xff1b;<\/li>\n<li>\u64cd\u4f5c\u7cfb\u7edf\u3001\u6587\u4ef6\u3001\u7f51\u7edc\u3001\u7528\u6237\u4ea4\u4e92&#xff1b;<\/li>\n<li>\u4f4e\u5ef6\u8fdf\u54cd\u5e94&#xff1b;<\/li>\n<li>\u5f3a\u5355\u7ebf\u7a0b\u6027\u80fd&#xff1b;<\/li>\n<li>\u5927\u7f13\u5b58\u4e0e\u590d\u6742\u9884\u6d4b\u673a\u5236&#xff1b;<\/li>\n<li>\u5904\u7406\u4efb\u52a1\u6570\u91cf\u4e0d\u5927\u3001\u76f8\u4e92\u4f9d\u8d56\u660e\u663e\u7684\u5de5\u4f5c\u3002<\/li>\n<\/ul>\n<h4>3.2 GPU \u66f4\u50cf\u80fd\u591f\u5bb9\u7eb3\u5927\u91cf\u5728\u9014\u4efb\u52a1\u7684\u5e76\u884c\u5de5\u5382<\/h4>\n<p>GPU \u7684\u5178\u578b\u4f18\u52bf\u5305\u62ec&#xff1a;<\/p>\n<ul>\n<li>\u5927\u91cf\u7ed3\u6784\u76f8\u4f3c\u3001\u5f7c\u6b64\u76f8\u5bf9\u72ec\u7acb\u7684\u8fd0\u7b97&#xff1b;<\/li>\n<li>\u9ad8\u541e\u5410\u91cf\u6570\u503c\u8ba1\u7b97&#xff1b;<\/li>\n<li>\u5927\u89c4\u6a21\u5411\u91cf\u3001\u77e9\u9635\u3001\u56fe\u50cf\u3001\u79d1\u5b66\u8ba1\u7b97&#xff1b;<\/li>\n<li>\u7528\u5927\u91cf\u7ebf\u7a0b\u9690\u85cf\u90e8\u5206\u5185\u5b58\u8bbf\u95ee\u7b49\u5f85&#xff1b;<\/li>\n<li>\u5bf9\u89c4\u5219\u6570\u636e\u5e76\u884c\u4efb\u52a1\u8fdb\u884c\u6279\u91cf\u5904\u7406\u3002<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/07\/20260730124943-6a6b48673db33.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>\u8fd9\u5f20\u6982\u5ff5\u56fe\u4e0d\u662f GPU \u7269\u7406\u7248\u56fe\u3002\u5b83\u8868\u8fbe\u7684\u662f&#xff1a;<\/p>\n<ul>\n<li>SM \u5185\u53ef\u4ee5\u9a7b\u7559\u591a\u4e2a\u5f85\u6267\u884c Warp&#xff1b;<\/li>\n<li>Warp \u8c03\u5ea6\u5668\u4f1a\u4ece\u53ef\u8fd0\u884c\u7684 Warp \u4e2d\u9009\u62e9\u5de5\u4f5c\u63a8\u8fdb&#xff1b;<\/li>\n<li>\u5bc4\u5b58\u5668\u548c Shared Memory \u7b49\u7247\u4e0a\u8d44\u6e90\u79bb\u6267\u884c\u5355\u5143\u66f4\u8fd1&#xff1b;<\/li>\n<li>Global Memory \u5bb9\u91cf\u5927&#xff0c;\u4f46\u8bbf\u95ee\u4ee3\u4ef7\u4e0e\u7247\u4e0a\u8d44\u6e90\u4e0d\u540c&#xff1b;<\/li>\n<li>\u5f53\u67d0\u4e2a Warp \u56e0\u6570\u636e\u4f9d\u8d56\u7b49\u539f\u56e0\u6682\u65f6\u4e0d\u80fd\u63a8\u8fdb\u65f6&#xff0c;SM \u53ef\u4ee5\u8ba9\u5176\u4ed6\u5c31\u7eea Warp \u5de5\u4f5c\u3002<\/li>\n<\/ul>\n<p>\u56e0\u6b64&#xff0c;GPU \u7684\u5f3a\u9879\u4e0d\u662f\u201c\u5355\u4e2a\u7ebf\u7a0b\u7279\u522b\u5feb\u201d&#xff0c;\u800c\u662f\u201c\u540c\u65f6\u7ba1\u7406\u5e76\u63a8\u8fdb\u5927\u91cf\u7ebf\u7a0b\u201d\u3002\u4e00\u4e2a CUDA \u7ebf\u7a0b\u5f88\u8f7b\u91cf&#xff0c;\u521b\u5efa\u4e0a\u767e\u4e07\u4e2a\u903b\u8f91\u7ebf\u7a0b\u4e5f\u5f88\u5e38\u89c1\u3002\u5b83\u4e0e\u64cd\u4f5c\u7cfb\u7edf\u7ebf\u7a0b\u4e0d\u662f\u540c\u4e00\u4e2a\u6210\u672c\u6a21\u578b\u3002<\/p>\n<h4>3.3 \u4e0d\u8981\u628a\u201cCUDA \u7ebf\u7a0b\u201d\u7406\u89e3\u6210\u201c\u4e00\u4e2a\u56fa\u5b9a\u7269\u7406\u6838\u5fc3\u201d<\/h4>\n<p>\u8fd9\u662f\u6574\u7bc7\u6587\u7ae0\u6700\u9700\u8981\u6d88\u9664\u7684\u8bef\u533a&#xff1a;<\/p>\n<p>CUDA Thread \u662f\u903b\u8f91\u6267\u884c\u5b9e\u4f8b&#xff0c;\u4e0d\u662f\u4e00\u9897\u88ab\u957f\u671f\u72ec\u5360\u7684 CUDA Core\u3002<\/p>\n<p>Grid \u4e2d\u53ef\u80fd\u6709\u51e0\u767e\u4e07\u4e2a Thread&#xff0c;\u800c GPU \u4e0d\u53ef\u80fd\u6709\u51e0\u767e\u4e07\u4e2a\u72ec\u7acb\u7269\u7406\u8ba1\u7b97\u6838\u5fc3\u3002\u786c\u4ef6\u4f1a\u5206\u6279\u8c03\u5ea6 Block \u548c Warp&#xff0c;\u590d\u7528 SM \u5185\u7684\u6267\u884c\u8d44\u6e90\u3002<\/p>\n<p>\u7c7b\u4f3c\u5730&#xff0c;Warp \u7684 32 \u4e2a Lane \u4e5f\u4e0d\u80fd\u7b80\u5355\u753b\u6210 32 \u9897\u56fa\u5b9a\u7269\u7406\u6838\u5fc3\u5e76\u5efa\u7acb\u6c38\u4e45\u4e00\u4e00\u5bf9\u5e94\u3002\u4e0d\u540c\u67b6\u6784\u7684\u529f\u80fd\u5355\u5143\u6570\u91cf\u3001\u6307\u4ee4\u541e\u5410\u548c\u8c03\u5ea6\u65b9\u5f0f\u4f1a\u53d8\u5316\u3002CUDA \u7f16\u7a0b\u6a21\u578b\u4fdd\u8bc1\u7684\u662f\u53ef\u89c2\u5bdf\u7684\u8f6f\u4ef6\u8bed\u4e49&#xff0c;\u800c\u4e0d\u662f\u8981\u6c42\u6bcf\u4e00\u4ee3 GPU \u4f7f\u7528\u5b8c\u5168\u76f8\u540c\u7684\u5fae\u67b6\u6784\u5b9e\u73b0\u3002<\/p>\n<p>\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48\u672c\u6587\u4e0d\u4f1a\u6839\u636e\u8ba1\u7b97\u80fd\u529b\u548c SM \u6570\u91cf\u201c\u731c CUDA Core \u603b\u6570\u201d\u3002\u4ea7\u54c1\u89c4\u683c\u8868\u53ef\u4ee5\u63d0\u4f9b\u5bf9\u5e94\u578b\u53f7\u7684\u786c\u4ef6\u4fe1\u606f&#xff0c;\u4f46 cudaDeviceProp \u6ca1\u6709\u4e00\u4e2a\u8de8\u67b6\u6784\u7a33\u5b9a\u7684\u201cCUDA Core \u6570\u91cf\u201d\u5b57\u6bb5\u3002\u5bf9\u4e8e\u5b9e\u9645\u7f16\u7a0b&#xff0c;SM \u6570\u91cf\u3001\u8d44\u6e90\u9650\u5236\u3001\u5185\u5b58\u7279\u5f81\u548c\u7ecf\u8fc7\u6d4b\u91cf\u7684 Kernel \u8868\u73b0\u901a\u5e38\u66f4\u6709\u610f\u4e49\u3002<\/p>\n<hr \/>\n<h3>\u56db\u3001SM \u5230\u5e95\u662f\u4ec0\u4e48<\/h3>\n<h4>4.1 \u4e00\u53e5\u8bdd\u5b9a\u4e49<\/h4>\n<p>SM \u662f GPU \u4e2d\u8d1f\u8d23\u9a7b\u7559\u3001\u8c03\u5ea6\u5e76\u6267\u884c\u5927\u91cf\u7ebf\u7a0b\u7684\u6838\u5fc3\u591a\u7ebf\u7a0b\u5904\u7406\u5355\u5143\u3002<\/p>\n<p>\u6ce8\u610f\u8fd9\u53e5\u8bdd\u4e2d\u7684\u4e09\u4e2a\u52a8\u8bcd&#xff1a;<\/p>\n<ul>\n<li>\u9a7b\u7559&#xff1a;\u7ebf\u7a0b\u72b6\u6001\u548c\u6240\u9700\u8d44\u6e90\u9700\u8981\u5728 SM \u4e0a\u5360\u636e\u4f4d\u7f6e&#xff1b;<\/li>\n<li>\u8c03\u5ea6&#xff1a;\u5e76\u4e0d\u662f\u6240\u6709 Warp \u6bcf\u4e2a\u65f6\u523b\u90fd\u80fd\u53d1\u5c04\u6307\u4ee4&#xff1b;<\/li>\n<li>\u6267\u884c&#xff1a;SM \u4e2d\u4e0d\u540c\u7c7b\u578b\u7684\u529f\u80fd\u5355\u5143\u5b8c\u6210\u6574\u6570\u3001\u6d6e\u70b9\u3001\u52a0\u8f7d\u5b58\u50a8\u7b49\u5de5\u4f5c\u3002<\/li>\n<\/ul>\n<h4>4.2 \u4e3a\u4ec0\u4e48\u4e00\u4e2a SM \u80fd\u540c\u65f6\u4fdd\u7559\u5f88\u591a\u7ebf\u7a0b<\/h4>\n<p>GPU \u4f9d\u9760\u5927\u91cf\u5728\u9014\u7ebf\u7a0b\u63d0\u9ad8\u541e\u5410\u3002\u5f53\u4e00\u4e2a Warp \u7b49\u5f85 Global Memory \u6570\u636e\u6216\u7b49\u5f85\u524d\u4e00\u6761\u6307\u4ee4\u7ed3\u679c\u65f6&#xff0c;\u8c03\u5ea6\u5668\u53ef\u4ee5\u9009\u62e9\u53e6\u4e00\u4e2a\u5df2\u7ecf\u51c6\u5907\u597d\u7684 Warp\u3002<\/p>\n<p>\u8fd9\u4e0d\u662f\u8bf4\u5207\u6362\u5b8c\u5168\u6ca1\u6709\u4efb\u4f55\u786c\u4ef6\u6210\u672c&#xff0c;\u4e5f\u4e0d\u662f\u8bf4\u7b49\u5f85\u603b\u80fd\u88ab\u5b8c\u5168\u9690\u85cf&#xff0c;\u800c\u662f\u8bf4\u660e GPU \u7684\u8bbe\u8ba1\u601d\u8def\u4e0e\u4f9d\u9760\u5c11\u91cf\u91cd\u91cf\u7ea7\u7ebf\u7a0b\u7684\u76f4\u89c9\u4e0d\u540c\u3002<\/p>\n<p>\u60f3\u8c61\u4e00\u4e2a\u8f66\u95f4&#xff1a;<\/p>\n<ul>\n<li>\u6bcf\u4e2a\u8ba2\u5355\u662f\u4e00\u4e2a Block&#xff1b;<\/li>\n<li>\u6bcf\u4e2a\u8ba2\u5355\u88ab\u62c6\u6210\u82e5\u5e72\u7ec4&#xff0c;\u6bcf\u7ec4\u662f\u4e00\u4e2a Warp&#xff1b;<\/li>\n<li>\u6bcf\u7ec4\u91cc\u6709 32 \u4e2a Lane&#xff1b;<\/li>\n<li>\u8f66\u95f4\u62e5\u6709\u6709\u9650\u7684\u5de5\u4f5c\u53f0\u3001\u5de5\u5177\u67dc\u548c\u4e34\u65f6\u5b58\u653e\u7a7a\u95f4&#xff1b;<\/li>\n<li>\u4e00\u4e2a\u8ba2\u5355\u9700\u8981\u7684\u5de5\u5177\u548c\u7a7a\u95f4\u8d8a\u591a&#xff0c;\u8f66\u95f4\u80fd\u540c\u65f6\u63a5\u7eb3\u7684\u8ba2\u5355\u5c31\u8d8a\u5c11\u3002<\/li>\n<\/ul>\n<p>\u6620\u5c04\u5230 CUDA&#xff1a;<\/p>\n<ul>\n<li>\u5de5\u4f5c\u53f0\u4e0e\u5de5\u5177\u8d44\u6e90\u53ef\u4ee5\u7c7b\u6bd4\u5bc4\u5b58\u5668\u3001Shared Memory \u548c\u529f\u80fd\u5355\u5143&#xff1b;<\/li>\n<li>Block \u7ebf\u7a0b\u6570\u8d8a\u591a&#xff0c;\u5360\u7528\u7684 Warp \u540d\u989d\u8d8a\u591a&#xff1b;<\/li>\n<li>\u6bcf\u4e2a\u7ebf\u7a0b\u4f7f\u7528\u7684\u5bc4\u5b58\u5668\u8d8a\u591a&#xff0c;\u6574\u4e2a Block \u9700\u8981\u7684\u5bc4\u5b58\u5668\u8d8a\u591a&#xff1b;<\/li>\n<li>\u6bcf\u4e2a Block \u7533\u8bf7\u7684 Shared Memory \u8d8a\u591a&#xff0c;SM \u80fd\u540c\u65f6\u5bb9\u7eb3\u7684 Block \u53ef\u80fd\u8d8a\u5c11\u3002<\/li>\n<\/ul>\n<h4>4.3 \u201c\u9a7b\u7559\u201d\u4e0d\u7b49\u4e8e\u201c\u540c\u4e00\u65f6\u523b\u6bcf\u4e2a\u7ebf\u7a0b\u90fd\u5728\u7b97\u201d<\/h4>\n<p>\u4e00\u4e2a Warp \u9a7b\u7559\u5728 SM \u4e0a&#xff0c;\u8868\u793a\u5b83\u7684\u6267\u884c\u4e0a\u4e0b\u6587\u548c\u8d44\u6e90\u5df2\u7ecf\u5c31\u4f4d\u3002\u5b83\u53ef\u80fd\u5904\u4e8e&#xff1a;<\/p>\n<ul>\n<li>\u53ef\u4ee5\u53d1\u5c04\u4e0b\u4e00\u6761\u6307\u4ee4&#xff1b;<\/li>\n<li>\u7b49\u5f85\u6570\u636e&#xff1b;<\/li>\n<li>\u7b49\u5f85\u540c\u6b65&#xff1b;<\/li>\n<li>\u7b49\u5f85\u67d0\u9879\u4f9d\u8d56&#xff1b;<\/li>\n<li>\u6682\u65f6\u6ca1\u6709\u88ab\u8c03\u5ea6\u5668\u9009\u4e2d\u3002<\/li>\n<\/ul>\n<p>\u56e0\u6b64&#xff0c;\u201cSM \u4e0a\u9a7b\u7559\u4e86\u5f88\u591a Warp\u201d\u4e0e\u201c\u6240\u6709 Warp \u6bcf\u4e2a\u65f6\u949f\u5468\u671f\u90fd\u540c\u65f6\u6267\u884c\u201d\u4e0d\u662f\u540c\u4e00\u4e2a\u610f\u601d\u3002<\/p>\n<h4>4.4 \u4e00\u4e2a SM \u80fd\u653e\u591a\u5c11 Block<\/h4>\n<p>\u6ca1\u6709\u53ea\u770b Block \u6570\u91cf\u5c31\u80fd\u5f97\u5230\u7684\u56fa\u5b9a\u7b54\u6848\u3002\u81f3\u5c11\u4f1a\u53d7\u5230\u4ee5\u4e0b\u56e0\u7d20\u9650\u5236&#xff1a;<\/p>\n<ul>\n<li>\u6bcf\u4e2a Block \u7684\u7ebf\u7a0b\u6570\u91cf&#xff1b;<\/li>\n<li>\u6bcf\u4e2a Block \u5f62\u6210\u7684 Warp \u6570\u91cf&#xff1b;<\/li>\n<li>Kernel \u6bcf\u4e2a\u7ebf\u7a0b\u4f7f\u7528\u7684\u5bc4\u5b58\u5668\u6570\u91cf&#xff1b;<\/li>\n<li>\u6bcf\u4e2a Block \u4f7f\u7528\u7684\u9759\u6001\u4e0e\u52a8\u6001 Shared Memory&#xff1b;<\/li>\n<li>\u67b6\u6784\u5141\u8bb8\u7684\u6bcf SM \u6700\u5927\u7ebf\u7a0b\u6570\u3001Warp \u6570\u548c Block \u6570&#xff1b;<\/li>\n<li>\u67d0\u4e9b\u67b6\u6784\u7279\u5b9a\u9650\u5236\u3002<\/li>\n<\/ul>\n<p>\u53ef\u4ee5\u628a\u201c\u540c\u65f6\u80fd\u9a7b\u7559\u591a\u5c11 Block\u201d\u7406\u89e3\u4e3a\u591a\u4e2a\u8d44\u6e90\u7ea6\u675f\u5171\u540c\u6c42\u6700\u5c0f\u503c\u3002\u8fd9\u91cc\u53ea\u5efa\u7acb\u5f62\u5f0f&#xff0c;\u4e0d\u4ee3\u5165\u5177\u4f53\u67b6\u6784\u6570\u5b57&#xff1a;<\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>          B<\/p>\n<p>          r<\/p>\n<p>         &#061;<\/p>\n<p>         min<\/p>\n<p>         \u2061<\/p>\n<p>         (<\/p>\n<p>          B<\/p>\n<p>          t<\/p>\n<p>         ,<\/p>\n<p>          B<\/p>\n<p>          w<\/p>\n<p>         ,<\/p>\n<p>          B<\/p>\n<p>          g<\/p>\n<p>         ,<\/p>\n<p>          B<\/p>\n<p>          s<\/p>\n<p>         ,<\/p>\n<p>          B<\/p>\n<p>          h<\/p>\n<p>         )<\/p>\n<p>         B_r &#061; \\\\min(B_t, B_w, B_g, B_s, B_h) <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0278em\">r<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.0361em;vertical-align: -0.2861em\"><\/span><span class=\"mop\">min<\/span><span class=\"mopen\">(<\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2806em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">t<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0269em\">w<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0359em\">g<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">s<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mpunct\">,<\/span><span class=\"mspace\" style=\"margin-right: 0.1667em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">h<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mclose\">)<\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u5176\u4e2d&#xff1a;<\/p>\n<ul>\n<li><span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\">\n<p>          B<\/p>\n<p>          r<\/p>\n<p>        B_r<\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0278em\">r<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u8868\u793a\u8d44\u6e90\u7ea6\u675f\u4e0b\u53ef\u9a7b\u7559\u7684 Block \u6570&#xff1b;<\/li>\n<li><span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\">\n<p>          B<\/p>\n<p>          t<\/p>\n<p>        B_t<\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2806em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">t<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u8868\u793a\u7ebf\u7a0b\u6570\u91cf\u7ea6\u675f\u7ed9\u51fa\u7684\u4e0a\u9650&#xff1b;<\/li>\n<li><span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\">\n<p>          B<\/p>\n<p>          w<\/p>\n<p>        B_w<\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0269em\">w<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u8868\u793a Warp \u6570\u91cf\u7ea6\u675f\u7ed9\u51fa\u7684\u4e0a\u9650&#xff1b;<\/li>\n<li><span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\">\n<p>          B<\/p>\n<p>          g<\/p>\n<p>        B_g<\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.9694em;vertical-align: -0.2861em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0359em\">g<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u8868\u793a\u5bc4\u5b58\u5668\u7ea6\u675f\u7ed9\u51fa\u7684\u4e0a\u9650&#xff1b;<\/li>\n<li><span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\">\n<p>          B<\/p>\n<p>          s<\/p>\n<p>        B_s<\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">s<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u8868\u793a Shared Memory \u7ea6\u675f\u7ed9\u51fa\u7684\u4e0a\u9650&#xff1b;<\/li>\n<li><span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\">\n<p>          B<\/p>\n<p>          h<\/p>\n<p>        B_h<\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">h<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u8868\u793a\u786c\u4ef6\u6700\u5927 Block \u6570\u7ea6\u675f\u3002<\/li>\n<\/ul>\n<p>\u8fd9\u4e2a\u516c\u5f0f\u4e0d\u662f\u8ba9\u4f60\u73b0\u5728\u624b\u7b97 Occupancy&#xff0c;\u800c\u662f\u63d0\u9192\u4f60&#xff1a;\u53ea\u770b Block \u5927\u5c0f&#xff0c;\u65e0\u6cd5\u5b8c\u6574\u63a8\u65ad\u9a7b\u7559\u60c5\u51b5\u3002<\/p>\n<p>\u540e\u7eed\u505a\u6027\u80fd\u4f18\u5316\u65f6&#xff0c;\u53ef\u4ee5\u4f7f\u7528 NVIDIA Nsight Compute\u3001Occupancy Calculator \u6216 Runtime Occupancy API\u3002\u73b0\u5728\u5148\u77e5\u9053\u6027\u80fd\u4e0d\u662f\u7531\u4e00\u4e2a\u6570\u5b57\u51b3\u5b9a\u7684\u3002<\/p>\n<h4>4.5 Block \u4e3a\u4ec0\u4e48\u4e0d\u80fd\u8de8 SM<\/h4>\n<p>\u540c\u4e00\u4e2a Block \u7684\u7ebf\u7a0b\u53ef\u4ee5&#xff1a;<\/p>\n<ul>\n<li>\u8bbf\u95ee\u8be5 Block \u7684 Shared Memory&#xff1b;<\/li>\n<li>\u4f7f\u7528 __syncthreads() \u8fdb\u884c Block \u7ea7\u540c\u6b65&#xff1b;<\/li>\n<li>\u4ee5\u8f83\u4f4e\u4ee3\u4ef7\u4ea4\u6362\u67d0\u4e9b\u5c40\u90e8\u6570\u636e\u3002<\/li>\n<\/ul>\n<p>\u5982\u679c Block \u8de8\u8d8a\u591a\u4e2a SM&#xff0c;\u5b9e\u73b0\u8fd9\u4e9b\u8bed\u4e49\u4f1a\u590d\u6742\u5f97\u591a\u3002CUDA \u7684\u57fa\u672c\u6267\u884c\u6a21\u578b\u8ba9\u4e00\u4e2a Block \u5b8c\u6574\u9a7b\u7559\u5728\u4e00\u4e2a SM&#xff0c;\u8fdb\u800c\u5efa\u7acb\u6e05\u6670\u7684\u5171\u4eab\u548c\u540c\u6b65\u8fb9\u754c\u3002<\/p>\n<p>\u8fd9\u4e5f\u89e3\u91ca\u4e86\u4e3a\u4ec0\u4e48 Block \u7ebf\u7a0b\u6570\u5b58\u5728\u4e0a\u9650&#xff1a;\u6240\u6709\u7ebf\u7a0b\u9700\u8981\u5728\u540c\u4e00\u4e2a SM \u4e0a\u83b7\u5f97\u8d44\u6e90\u3002\u7a0b\u5e8f\u4e00\u4f1a\u513f\u4f1a\u67e5\u8be2\u4f60\u8bbe\u5907\u7684 maxThreadsPerBlock&#xff0c;\u4e0d\u8981\u628a\u7f51\u4e0a\u67d0\u4e2a\u6570\u5b57\u6c38\u8fdc\u5199\u6210\u6240\u6709 GPU \u7684\u7edd\u5bf9\u771f\u7406\u3002<\/p>\n<hr \/>\n<h3>\u4e94\u3001Grid\u3001Block\u3001Thread&#xff1a;\u4ece\u5750\u6807\u5230\u552f\u4e00\u7f16\u53f7<\/h3>\n<h4>5.1 \u56db\u4e2a\u5fc5\u987b\u8bb0\u4f4f\u7684\u5185\u5efa\u53d8\u91cf<\/h4>\n<table>\n<tr>\u53d8\u91cf\u542b\u4e49\u8c01\u770b\u5230\u7684\u503c\u76f8\u540c<\/tr>\n<tbody>\n<tr>\n<td>gridDim<\/td>\n<td>Grid \u5728\u5404\u7ef4\u5ea6\u5305\u542b\u591a\u5c11\u4e2a Block<\/td>\n<td>\u672c\u6b21 Grid \u4e2d\u6240\u6709\u7ebf\u7a0b<\/td>\n<\/tr>\n<tr>\n<td>blockDim<\/td>\n<td>\u6bcf\u4e2a Block \u5728\u5404\u7ef4\u5ea6\u5305\u542b\u591a\u5c11\u4e2a Thread<\/td>\n<td>\u540c\u4e00\u6b21\u542f\u52a8\u4e2d\u7684\u6240\u6709\u7ebf\u7a0b<\/td>\n<\/tr>\n<tr>\n<td>blockIdx<\/td>\n<td>\u5f53\u524d Block \u5728 Grid \u4e2d\u7684\u5750\u6807<\/td>\n<td>\u540c\u4e00 Block \u5185\u7ebf\u7a0b<\/td>\n<\/tr>\n<tr>\n<td>threadIdx<\/td>\n<td>\u5f53\u524d Thread \u5728 Block \u4e2d\u7684\u5750\u6807<\/td>\n<td>\u6bcf\u4e2a\u7ebf\u7a0b\u53ef\u80fd\u4e0d\u540c<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5b83\u4eec\u90fd\u662f dim3 \u98ce\u683c\u7684\u4e09\u7ef4\u503c&#xff0c;\u53ef\u4ee5\u8bbf\u95ee .x\u3001.y\u3001.z\u3002<\/p>\n<h4>5.2 \u4e00\u7ef4\u5168\u5c40\u7f16\u53f7<\/h4>\n<p>\u5047\u8bbe&#xff1a;<\/p>\n<ul>\n<li>\u5f53\u524d Block \u7684\u4e00\u7ef4\u7f16\u53f7\u662f blockIdx.x&#xff1b;<\/li>\n<li>\u6bcf\u4e2a Block \u6709 blockDim.x \u4e2a\u7ebf\u7a0b&#xff1b;<\/li>\n<li>\u5f53\u524d\u7ebf\u7a0b\u5728 Block \u4e2d\u7684\u7f16\u53f7\u662f threadIdx.x\u3002<\/li>\n<\/ul>\n<p>\u6700\u5e38\u89c1\u7684\u4e00\u7ef4\u5168\u5c40\u7d22\u5f15\u662f&#xff1a;<\/p>\n<p><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> blockIdx<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">*<\/span> blockDim<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">&#043;<\/span> threadIdx<span class=\"token punctuation\">.<\/span>x<span class=\"token punctuation\">;<\/span><\/p>\n<p>\u4e3a\u4e86\u8ba9 Typora \u7a33\u5b9a\u9884\u89c8&#xff0c;\u672c\u6587\u516c\u5f0f\u90fd\u4f7f\u7528\u5355\u884c\u516c\u5f0f\u4f53&#xff0c;\u5e76\u628a CUDA \u6807\u8bc6\u7b26\u653e\u5728\u516c\u5f0f\u540e\u7684\u6587\u5b57\u4e2d&#xff1a;<\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         i<\/p>\n<p>         &#061;<\/p>\n<p>          b<\/p>\n<p>          x<\/p>\n<p>          B<\/p>\n<p>          x<\/p>\n<p>         &#043;<\/p>\n<p>          t<\/p>\n<p>          x<\/p>\n<p>         i &#061; b_x B_x &#043; t_x <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.6595em\"><\/span><span class=\"mord mathnormal\">i<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8444em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\">b<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.7651em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\">t<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u5176\u4e2d&#xff0c;<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         b<\/p>\n<p>         x<\/p>\n<p>       b_x<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8444em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\">b<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u5bf9\u5e94 blockIdx.x&#xff0c;<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         B<\/p>\n<p>         x<\/p>\n<p>       B_x<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u5bf9\u5e94 blockDim.x&#xff0c;<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         t<\/p>\n<p>         x<\/p>\n<p>       t_x<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.7651em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\">t<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u5bf9\u5e94 threadIdx.x\u3002<\/p>\n<p>\u4f8b\u5982 Grid \u6709 3 \u4e2a Block&#xff0c;\u6bcf\u4e2a Block \u6709 4 \u4e2a Thread&#xff1a;<\/p>\n<table>\n<tr>blockIdx.xthreadIdx.x\u5168\u5c40\u7f16\u53f7<\/tr>\n<tbody>\n<tr>\n<td align=\"right\">0<\/td>\n<td align=\"right\">0<\/td>\n<td align=\"right\">0<\/td>\n<\/tr>\n<tr>\n<td align=\"right\">0<\/td>\n<td align=\"right\">1<\/td>\n<td align=\"right\">1<\/td>\n<\/tr>\n<tr>\n<td align=\"right\">0<\/td>\n<td align=\"right\">2<\/td>\n<td align=\"right\">2<\/td>\n<\/tr>\n<tr>\n<td align=\"right\">0<\/td>\n<td align=\"right\">3<\/td>\n<td align=\"right\">3<\/td>\n<\/tr>\n<tr>\n<td align=\"right\">1<\/td>\n<td align=\"right\">0<\/td>\n<td align=\"right\">4<\/td>\n<\/tr>\n<tr>\n<td align=\"right\">1<\/td>\n<td align=\"right\">1<\/td>\n<td align=\"right\">5<\/td>\n<\/tr>\n<tr>\n<td align=\"right\">2<\/td>\n<td align=\"right\">3<\/td>\n<td align=\"right\">11<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u4f60\u4f1a\u53d1\u73b0&#xff0c;\u6bcf\u8fdb\u5165\u4e0b\u4e00\u4e2a Block&#xff0c;\u5168\u5c40\u7f16\u53f7\u5c31\u5411\u540e\u79fb\u52a8\u4e00\u4e2a blockDim.x\u3002<\/p>\n<h4>5.3 \u4e3a\u4ec0\u4e48\u51e0\u4e4e\u603b\u8981\u505a\u8fb9\u754c\u5224\u65ad<\/h4>\n<p>\u5047\u8bbe\u9700\u8981\u5904\u7406 <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>        N<\/p>\n<p>        &#061;<\/p>\n<p>        1000<\/p>\n<p>       N&#061;1000<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.6833em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">N<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6444em\"><\/span><span class=\"mord\">1000<\/span><\/span><\/span><\/span><\/span> \u4e2a\u5143\u7d20&#xff0c;\u5e0c\u671b\u6bcf\u4e2a Block \u4f7f\u7528 256 \u4e2a\u7ebf\u7a0b\u3002\u9700\u8981\u7684 Block \u6570\u53ef\u4ee5\u7528\u6574\u6570\u8fd0\u7b97\u5199\u6210&#xff1a;<\/p>\n<p><span class=\"token keyword\">int<\/span> blocks <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>N <span class=\"token operator\">&#043;<\/span> threads <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/<\/span> threads<span class=\"token punctuation\">;<\/span><\/p>\n<p>\u8fd9\u91cc\u4f1a\u5f97\u5230 4 \u4e2a Block&#xff0c;\u603b\u5171\u521b\u5efa 1024 \u4e2a\u7ebf\u7a0b\u3002\u6700\u540e 24 \u4e2a\u7ebf\u7a0b\u6ca1\u6709\u5bf9\u5e94\u6570\u636e&#xff0c;\u56e0\u6b64 Kernel \u5185\u5fc5\u987b\u5199&#xff1a;<\/p>\n<p><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> blockIdx<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">*<\/span> blockDim<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">&#043;<\/span> threadIdx<span class=\"token punctuation\">.<\/span>x<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">&lt;<\/span> N<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u53ea\u5904\u7406\u6709\u6548\u5143\u7d20<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u5bf9\u5e94\u5173\u7cfb\u662f&#xff1a;<\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>          N<\/p>\n<p>          l<\/p>\n<p>         &#061;<\/p>\n<p>          G<\/p>\n<p>          x<\/p>\n<p>          B<\/p>\n<p>          x<\/p>\n<p>         N_l &#061; G_x B_x <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">N<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0197em\">l<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\">G<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u5176\u4e2d <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         N<\/p>\n<p>         l<\/p>\n<p>       N_l<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">N<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0197em\">l<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u662f\u521b\u5efa\u7684\u903b\u8f91\u7ebf\u7a0b\u603b\u6570&#xff0c;<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         G<\/p>\n<p>         x<\/p>\n<p>       G_x<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\">G<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u662f\u4e00\u7ef4 Block \u6570&#xff0c;<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         B<\/p>\n<p>         x<\/p>\n<p>       B_x<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u662f\u6bcf\u4e2a Block \u7684\u7ebf\u7a0b\u6570\u3002\u901a\u5e38 <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         N<\/p>\n<p>         l<\/p>\n<p>       N_l<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">N<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0197em\">l<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u53ef\u4ee5\u5927\u4e8e\u771f\u5b9e\u6570\u636e\u91cf <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>        N<\/p>\n<p>       N<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.6833em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">N<\/span><\/span><\/span><\/span><\/span>&#xff0c;\u6240\u4ee5\u8981\u5224\u65ad <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>        i<\/p>\n<p>        &lt;<\/p>\n<p>        N<\/p>\n<p>       i&lt;N<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.6986em;vertical-align: -0.0391em\"><\/span><span class=\"mord mathnormal\">i<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&lt;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6833em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">N<\/span><\/span><\/span><\/span><\/span>\u3002<\/p>\n<h4>5.4 \u4e8c\u7ef4\u5750\u6807<\/h4>\n<p>\u56fe\u50cf\u548c\u77e9\u9635\u5929\u7136\u662f\u4e8c\u7ef4\u6570\u636e&#xff0c;\u5e38\u89c1\u5199\u6cd5\u662f&#xff1a;<\/p>\n<p><span class=\"token keyword\">int<\/span> x <span class=\"token operator\">&#061;<\/span> blockIdx<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">*<\/span> blockDim<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">&#043;<\/span> threadIdx<span class=\"token punctuation\">.<\/span>x<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">int<\/span> y <span class=\"token operator\">&#061;<\/span> blockIdx<span class=\"token punctuation\">.<\/span>y <span class=\"token operator\">*<\/span> blockDim<span class=\"token punctuation\">.<\/span>y <span class=\"token operator\">&#043;<\/span> threadIdx<span class=\"token punctuation\">.<\/span>y<span class=\"token punctuation\">;<\/span><\/p>\n<p>\u6570\u5b66\u5f62\u5f0f&#xff1a;<\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         x<\/p>\n<p>         &#061;<\/p>\n<p>          b<\/p>\n<p>          x<\/p>\n<p>          B<\/p>\n<p>          x<\/p>\n<p>         &#043;<\/p>\n<p>          t<\/p>\n<p>          x<\/p>\n<p>         x &#061; b_x B_x &#043; t_x <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.4306em\"><\/span><span class=\"mord mathnormal\">x<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8444em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\">b<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.7651em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\">t<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         y<\/p>\n<p>         &#061;<\/p>\n<p>          b<\/p>\n<p>          y<\/p>\n<p>          B<\/p>\n<p>          y<\/p>\n<p>         &#043;<\/p>\n<p>          t<\/p>\n<p>          y<\/p>\n<p>         y &#061; b_y B_y &#043; t_y <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.625em;vertical-align: -0.1944em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0359em\">y<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.9805em;vertical-align: -0.2861em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\">b<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0359em\">y<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0359em\">y<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.9012em;vertical-align: -0.2861em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\">t<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0359em\">y<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u5982\u679c\u4e8c\u7ef4\u6570\u7ec4\u6309\u884c\u8fde\u7eed\u5b58\u50a8&#xff0c;\u5bbd\u5ea6\u4e3a width&#xff0c;\u7ebf\u6027\u4e0b\u6807\u901a\u5e38\u662f&#xff1a;<\/p>\n<p><span class=\"token keyword\">int<\/span> index <span class=\"token operator\">&#061;<\/span> y <span class=\"token operator\">*<\/span> width <span class=\"token operator\">&#043;<\/span> x<span class=\"token punctuation\">;<\/span><\/p>\n<p>\u5bf9\u5e94&#xff1a;<\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         i<\/p>\n<p>         &#061;<\/p>\n<p>         y<\/p>\n<p>         W<\/p>\n<p>         &#043;<\/p>\n<p>         x<\/p>\n<p>         i &#061; yW &#043; x <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.6595em\"><\/span><span class=\"mord mathnormal\">i<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8778em;vertical-align: -0.1944em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0359em\">y<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">W<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.4306em\"><\/span><span class=\"mord mathnormal\">x<\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u5176\u4e2d <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>        W<\/p>\n<p>       W<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.6833em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">W<\/span><\/span><\/span><\/span><\/span> \u662f\u6bcf\u884c\u5143\u7d20\u6570\u91cf\u3002<\/p>\n<h4>5.5 \u4e09\u7ef4 Block \u5185\u7ebf\u7a0b\u5982\u4f55\u7ebf\u6027\u5316<\/h4>\n<p>Warp \u7684\u5212\u5206\u9700\u8981\u628a\u4e09\u7ef4 threadIdx \u7ebf\u6027\u5316\u3002CUDA \u4e2d x \u7ef4\u53d8\u5316\u6700\u5feb&#xff0c;\u7136\u540e\u662f y&#xff0c;\u6700\u540e\u662f z\u3002Block \u5185\u7ebf\u6027\u7ebf\u7a0b\u7f16\u53f7\u53ef\u4ee5\u5199\u6210&#xff1a;<\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>          t<\/p>\n<p>          l<\/p>\n<p>         &#061;<\/p>\n<p>          t<\/p>\n<p>          x<\/p>\n<p>         &#043;<\/p>\n<p>          B<\/p>\n<p>          x<\/p>\n<p>          t<\/p>\n<p>          y<\/p>\n<p>         &#043;<\/p>\n<p>          B<\/p>\n<p>          x<\/p>\n<p>          B<\/p>\n<p>          y<\/p>\n<p>          t<\/p>\n<p>          z<\/p>\n<p>         t_l &#061; t_x &#043; B_x t_y &#043; B_x B_y t_z <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.7651em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\">t<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0197em\">l<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.7651em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\">t<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.9694em;vertical-align: -0.2861em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord\"><span class=\"mord mathnormal\">t<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0359em\">y<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">&#043;<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.9694em;vertical-align: -0.2861em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0359em\">y<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord\"><span class=\"mord mathnormal\">t<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.044em\">z<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u5176\u4e2d <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         t<\/p>\n<p>         l<\/p>\n<p>       t_l<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.7651em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\">t<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: 0em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0197em\">l<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u662f Block \u5185\u7ebf\u6027\u7f16\u53f7\u3002<\/p>\n<p>\u8fd9\u6761\u89c4\u5219\u975e\u5e38\u91cd\u8981\u3002Warp \u4e0d\u662f\u201c\u5148\u6309 y \u65b9\u5411\u51d1 32 \u4e2a\u7ebf\u7a0b\u201d&#xff0c;\u800c\u662f\u6839\u636e\u7ebf\u6027\u7ebf\u7a0b\u7f16\u53f7\u8fde\u7eed\u5206\u7ec4\u3002\u8bbe\u8ba1\u4e8c\u7ef4 Block \u65f6&#xff0c;\u4f8b\u5982 dim3 block(16, 16)&#xff1a;<\/p>\n<ul>\n<li>\u603b\u7ebf\u7a0b\u6570\u662f 256&#xff1b;<\/li>\n<li>\u7ebf\u6027\u7f16\u53f7 0&#xff5e;31 \u7ec4\u6210\u7b2c\u4e00\u4e2a Warp&#xff1b;<\/li>\n<li>\u56e0\u4e3a x \u7ef4\u957f\u5ea6\u4e3a 16&#xff0c;\u7b2c\u4e00\u4e2a Warp \u8986\u76d6 y&#061;0 \u7684 16 \u4e2a\u7ebf\u7a0b\u548c y&#061;1 \u7684 16 \u4e2a\u7ebf\u7a0b\u3002<\/li>\n<\/ul>\n<p>\u6240\u4ee5&#xff0c;\u4e8c\u7ef4\u5f62\u72b6\u4e0d\u4ec5\u5f71\u54cd\u4ee3\u7801\u53ef\u8bfb\u6027&#xff0c;\u4e5f\u4f1a\u5f71\u54cd\u8fde\u7eed Lane \u6620\u5c04\u5230\u6570\u636e\u7684\u65b9\u5f0f&#xff0c;\u8fdb\u800c\u4e0e\u5185\u5b58\u8bbf\u95ee\u5408\u5e76\u7b49\u6027\u80fd\u95ee\u9898\u76f8\u5173\u3002<\/p>\n<hr \/>\n<h3>\u516d\u3001Warp&#xff1a;\u4e3a\u4ec0\u4e48\u603b\u6709\u4eba\u5efa\u8bae Block \u5927\u5c0f\u662f 32 \u7684\u500d\u6570<\/h3>\n<h4>6.1 Warp \u662f\u4ec0\u4e48<\/h4>\n<p>\u5728\u5f53\u524d CUDA \u7f16\u7a0b\u6a21\u578b\u4e2d&#xff0c;\u540c\u4e00 Block \u7684\u7ebf\u7a0b\u4f1a\u88ab\u7ec4\u7ec7\u6210\u6bcf\u7ec4 32 \u4e2a\u7ebf\u7a0b\u7684 Warp\u3002Warp \u4e2d\u7ebf\u7a0b\u62e5\u6709\u5404\u81ea\u7684\u5bc4\u5b58\u5668\u72b6\u6001\u548c\u7ebf\u7a0b\u7f16\u53f7&#xff0c;\u4f46\u4ee5 SIMT \u65b9\u5f0f\u63a8\u8fdb\u540c\u4e00\u4efd Kernel \u4ee3\u7801\u3002<\/p>\n<p>\u4f60\u53ef\u4ee5\u628a Warp \u7406\u89e3\u4e3a&#xff1a;<\/p>\n<p>\u786c\u4ef6\u8c03\u5ea6\u65f6\u4e00\u8d77\u8003\u8651\u7684\u4e00\u7ec4 32 \u4e2a Lane\u3002<\/p>\n<p>\u201cLane\u201d\u8868\u793a Warp \u5185\u7684\u4f4d\u7f6e&#xff0c;\u901a\u5e38\u662f 0&#xff5e;31\u3002<\/p>\n<h4>6.2 Warp \u7f16\u53f7\u4ece\u6bcf\u4e2a Block \u91cd\u65b0\u5f00\u59cb<\/h4>\n<p>\u4e00\u7ef4 Block \u5185&#xff1a;<\/p>\n<p><span class=\"token keyword\">int<\/span> warp_in_block <span class=\"token operator\">&#061;<\/span> threadIdx<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">\/<\/span> warpSize<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">int<\/span> lane <span class=\"token operator\">&#061;<\/span> threadIdx<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">%<\/span> warpSize<span class=\"token punctuation\">;<\/span><\/p>\n<p>\u5f53 blockDim.x &#061;&#061; 40 \u65f6&#xff1a;<\/p>\n<ul>\n<li>threadIdx.x \u4e3a 0&#xff5e;31 \u7684\u7ebf\u7a0b\u5c5e\u4e8e Warp 0&#xff1b;<\/li>\n<li>threadIdx.x \u4e3a 32&#xff5e;39 \u7684\u7ebf\u7a0b\u5c5e\u4e8e Warp 1&#xff1b;<\/li>\n<li>Warp 1 \u53ea\u6709 8 \u4e2a Lane \u627f\u8f7d\u8fd9\u4e2a Block \u7684\u7ebf\u7a0b\u3002<\/li>\n<\/ul>\n<p>\u4e0b\u4e00\u4e2a Block \u7684 threadIdx.x &#061;&#061; 0 \u4f1a\u91cd\u65b0\u6210\u4e3a\u8be5 Block \u7684 Warp 0\u3001Lane 0\u3002\u4e0d\u80fd\u62ff\u5168\u5c40\u7ebf\u7a0b\u7f16\u53f7\u76f4\u63a5\u9664\u4ee5 32&#xff0c;\u8ba4\u4e3a Warp \u4f1a\u8de8 Block \u5ef6\u7eed\u3002<\/p>\n<h4>6.3 \u4e00\u4e2a Block \u6709\u591a\u5c11\u4e2a Warp<\/h4>\n<p>\u8bbe\u6bcf\u4e2a Block \u7684\u7ebf\u7a0b\u6570\u4e3a <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         T<\/p>\n<p>         b<\/p>\n<p>       T_b<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">T<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1389em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">b<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>&#xff0c;Warp \u5927\u5c0f\u4e3a <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         W<\/p>\n<p>         s<\/p>\n<p>       W_s<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">W<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1389em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">s<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span>&#xff0c;\u5219 Warp \u6570\u91cf\u9700\u8981\u5411\u4e0a\u53d6\u6574&#xff1a;<\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>          W<\/p>\n<p>          b<\/p>\n<p>         &#061;<\/p>\n<p>         \u2308<\/p>\n<p>          T<\/p>\n<p>          b<\/p>\n<p>         \/<\/p>\n<p>          W<\/p>\n<p>          s<\/p>\n<p>         \u2309<\/p>\n<p>         W_b &#061; \\\\lceil T_b \/ W_s \\\\rceil <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">W<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1389em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">b<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1em;vertical-align: -0.25em\"><\/span><span class=\"mopen\">\u2308<\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">T<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1389em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">b<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord\">\/<\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">W<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1389em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">s<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mclose\">\u2309<\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u5f53\u524d\u8bbe\u5907\u901a\u5e38\u67e5\u8be2\u5230 <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         W<\/p>\n<p>         s<\/p>\n<p>        &#061;<\/p>\n<p>        32<\/p>\n<p>       W_s&#061;32<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">W<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1389em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">s<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6444em\"><\/span><span class=\"mord\">32<\/span><\/span><\/span><\/span><\/span>\u3002<\/p>\n<p>\u5bf9\u4e8e 40 \u4e2a\u7ebf\u7a0b&#xff1a;<\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>          W<\/p>\n<p>          b<\/p>\n<p>         &#061;<\/p>\n<p>         \u2308<\/p>\n<p>         40<\/p>\n<p>         \/<\/p>\n<p>         32<\/p>\n<p>         \u2309<\/p>\n<p>         &#061;<\/p>\n<p>         2<\/p>\n<p>         W_b &#061; \\\\lceil 40 \/ 32 \\\\rceil &#061; 2 <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">W<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1389em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">b<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1em;vertical-align: -0.25em\"><\/span><span class=\"mopen\">\u2308<\/span><span class=\"mord\">40\/32<\/span><span class=\"mclose\">\u2309<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6444em\"><\/span><span class=\"mord\">2<\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/07\/20260730124946-6a6b486a1c88a.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>\u56fe\u4e2d\u7b2c\u4e00\u884c\u662f\u5b8c\u6574\u7684 Warp 0&#xff0c;\u7b2c\u4e8c\u884c\u662f Warp 1\u3002Warp 1 \u7684\u524d 8 \u4e2a Lane \u5bf9\u5e94\u7ebf\u7a0b 32&#xff5e;39&#xff0c;\u5269\u4f59 24 \u4e2a\u4f4d\u7f6e\u6ca1\u6709\u627f\u8f7d\u8fd9\u4e2a Block \u7684\u7ebf\u7a0b\u3002<\/p>\n<h4>6.4 \u4e0d\u8db3 32 \u4e2a\u7ebf\u7a0b&#xff0c;\u7a0b\u5e8f\u4f1a\u4e0d\u4f1a\u9519<\/h4>\n<p>\u4e0d\u4f1a\u56e0\u4e3a\u201c\u4e0d\u8db3 32\u201d\u800c\u81ea\u52a8\u51fa\u9519\u3002\u4ee5\u4e0b\u914d\u7f6e\u5728\u8bed\u6cd5\u4e0a\u90fd\u53ef\u80fd\u5408\u6cd5&#xff1a;<\/p>\n<p>kernel<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token operator\">&gt;&gt;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\nkernel<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">17<\/span><span class=\"token operator\">&gt;&gt;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\nkernel<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">40<\/span><span class=\"token operator\">&gt;&gt;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\nkernel<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">100<\/span><span class=\"token operator\">&gt;&gt;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u4f46\u6700\u540e\u4e00\u4e2a Warp \u53ef\u80fd\u4e0d\u5b8c\u6574\u3002\u672a\u627f\u8f7d\u6709\u6548\u7ebf\u7a0b\u7684 Lane \u65e0\u6cd5\u4e3a\u4f60\u7684\u4efb\u52a1\u8d21\u732e\u5de5\u4f5c&#xff0c;\u56e0\u6b64\u53ef\u80fd\u964d\u4f4e\u8d44\u6e90\u5229\u7528\u7387\u3002<\/p>\n<p>\u8fd9\u5c31\u662f\u201cBlock \u7ebf\u7a0b\u6570\u901a\u5e38\u9009\u62e9 32 \u7684\u500d\u6570\u201d\u7684\u6765\u6e90\u3002\u4f46\u5b83\u4e0d\u662f\u201c\u4efb\u4f55 Kernel \u90fd\u5fc5\u987b\u4f7f\u7528 256\u201d\u7684\u6b7b\u89c4\u5219\u3002Block \u5927\u5c0f\u8fd8\u8981\u8003\u8651&#xff1a;<\/p>\n<ul>\n<li>\u6570\u636e\u5f62\u72b6&#xff1b;<\/li>\n<li>\u5bc4\u5b58\u5668\u4f7f\u7528&#xff1b;<\/li>\n<li>Shared Memory&#xff1b;<\/li>\n<li>\u5360\u7528\u7387&#xff1b;<\/li>\n<li>\u5185\u5b58\u8bbf\u95ee\u6a21\u5f0f&#xff1b;<\/li>\n<li>\u6307\u4ee4\u7c7b\u578b&#xff1b;<\/li>\n<li>\u5b9e\u9645\u6d4b\u91cf\u7ed3\u679c\u3002<\/li>\n<\/ul>\n<p>\u5bf9\u4e8e\u521a\u5f00\u59cb\u7684\u4e00\u7ef4\u9010\u5143\u7d20 Kernel&#xff0c;128 \u6216 256 \u7ecf\u5e38\u662f\u5408\u7406\u8d77\u70b9&#xff1b;\u6700\u7ec8\u9009\u62e9\u9700\u8981\u6d4b\u91cf&#xff0c;\u800c\u4e0d\u662f\u628a\u7ecf\u9a8c\u503c\u5f53\u5b9a\u5f8b\u3002<\/p>\n<h4>6.5 \u4e3a\u4ec0\u4e48\u672c\u6587\u4ee3\u7801\u4f7f\u7528 warpSize<\/h4>\n<p>Kernel \u4e2d\u5b58\u5728\u5185\u5efa\u5e38\u91cf warpSize\u3002\u793a\u4f8b\u5199&#xff1a;<\/p>\n<p><span class=\"token keyword\">int<\/span> warp_in_block <span class=\"token operator\">&#061;<\/span> threadIdx<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">\/<\/span> warpSize<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">int<\/span> lane <span class=\"token operator\">&#061;<\/span> threadIdx<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">%<\/span> warpSize<span class=\"token punctuation\">;<\/span><\/p>\n<p>\u800c\u4e0d\u662f\u628a 32 \u5230\u5904\u6563\u843d\u5728\u903b\u8f91\u4e2d\u3002\u8fd9\u80fd\u6e05\u695a\u8868\u8fbe\u201c\u8ba1\u7b97\u4f9d\u8d56 Warp \u5927\u5c0f\u201d\u3002\u4e3b\u673a\u7aef\u4e5f\u53ef\u4ee5\u901a\u8fc7\u8bbe\u5907\u5c5e\u6027\u67e5\u8be2 prop.warpSize\u3002<\/p>\n<p>NVIDIA \u5b98\u65b9\u6587\u6863\u5f53\u524d\u660e\u786e\u8bf4\u660e Warp \u4e3a 32 \u4e2a\u7ebf\u7a0b&#xff0c;\u4f46\u5de5\u7a0b\u4ee3\u7801\u4ecd\u5e94\u5c3d\u91cf\u8ba9\u786c\u4ef6\u5c5e\u6027\u7684\u6765\u6e90\u6e05\u6670\u3002<\/p>\n<hr \/>\n<h3>\u4e03\u3001SIMT&#xff1a;\u770b\u8d77\u6765\u50cf\u4e00\u8d77\u6267\u884c&#xff0c;\u4f46\u6bcf\u4e2a\u7ebf\u7a0b\u4ecd\u6709\u81ea\u5df1\u7684\u8eab\u4efd<\/h3>\n<h4>7.1 SIMT \u4e0d\u662f\u7b80\u5355\u7684 SIMD \u6539\u540d<\/h4>\n<p>SIMT \u662f Single Instruction, Multiple Threads\u3002\u53ef\u4ee5\u7ffb\u8bd1\u4e3a\u5355\u6307\u4ee4\u3001\u591a\u7ebf\u7a0b\u3002<\/p>\n<p>\u5728 CUDA Kernel \u4e2d&#xff0c;\u6bcf\u4e2a\u7ebf\u7a0b&#xff1a;<\/p>\n<ul>\n<li>\u6709\u81ea\u5df1\u7684 threadIdx&#xff1b;<\/li>\n<li>\u6709\u81ea\u5df1\u7684\u5bc4\u5b58\u5668\u72b6\u6001&#xff1b;<\/li>\n<li>\u53ef\u4ee5\u8ba1\u7b97\u4e0d\u540c\u5730\u5740&#xff1b;<\/li>\n<li>\u53ef\u4ee5\u8bfb\u53d6\u4e0d\u540c\u6570\u636e&#xff1b;<\/li>\n<li>\u529f\u80fd\u4e0a\u53ef\u4ee5\u8fdb\u5165\u4e0d\u540c\u5206\u652f\u3002<\/li>\n<\/ul>\n<p>\u8fd9\u4f7f\u7a0b\u5e8f\u5458\u80fd\u591f\u6309\u7167\u201c\u4e00\u4e2a\u7ebf\u7a0b\u5904\u7406\u4e00\u4e2a\u5143\u7d20\u201d\u7684\u81ea\u7136\u65b9\u5f0f\u5199\u4ee3\u7801&#xff1a;<\/p>\n<p><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> blockIdx<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">*<\/span> blockDim<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">&#043;<\/span> threadIdx<span class=\"token punctuation\">.<\/span>x<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">&lt;<\/span> N<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    output<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> input<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">2.0f<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u6240\u6709\u7ebf\u7a0b\u8fd0\u884c\u540c\u4e00\u4efd Kernel \u51fd\u6570&#xff0c;\u4f46 i \u4e0d\u540c&#xff0c;\u6240\u4ee5\u5904\u7406\u7684\u6570\u636e\u4e0d\u540c\u3002<\/p>\n<h4>7.2 \u4ec0\u4e48\u662f\u5206\u652f\u5206\u6b67<\/h4>\n<p>\u770b\u4e0b\u9762\u7684\u4ee3\u7801&#xff1a;<\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>threadIdx<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">%<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u8def\u5f84 A<\/span><br \/>\n<span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ \u8def\u5f84 B<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u4e00\u4e2a Warp \u4e2d&#xff1a;<\/p>\n<ul>\n<li>Lane 0\u30012\u30014\u2026\u2026\u8d70 A&#xff1b;<\/li>\n<li>Lane 1\u30013\u30015\u2026\u2026\u8d70 B\u3002<\/li>\n<\/ul>\n<p>\u540c\u4e00 Warp \u5185\u51fa\u73b0\u4e0d\u540c\u63a7\u5236\u8def\u5f84&#xff0c;\u8fd9\u5c31\u662f Warp Divergence&#xff0c;\u901a\u5e38\u8bd1\u4e3a\u7ebf\u7a0b\u675f\u5206\u6b67\u6216\u5206\u652f\u5206\u6b67\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/07\/20260730124946-6a6b486a77a54.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>\u4e3a\u4e86\u4fdd\u6301\u7f16\u7a0b\u6a21\u578b\u8bed\u4e49&#xff0c;\u786c\u4ef6\u9700\u8981\u5728\u4e0d\u540c\u6d3b\u52a8\u63a9\u7801\u4e0b\u63a8\u8fdb\u76f8\u5173\u8def\u5f84\u3002\u56fe\u4e2d\u5148\u8ba9\u5076\u6570 Lane \u5bf9\u5e94\u7684\u6d3b\u52a8\u4f4d\u7f6e\u6267\u884c A&#xff0c;\u518d\u8ba9\u5947\u6570 Lane \u5bf9\u5e94\u7684\u4f4d\u7f6e\u6267\u884c B&#xff0c;\u6700\u540e\u6c47\u5408\u3002<\/p>\n<p>\u8fd9\u662f\u4e00\u5e45\u7f16\u7a0b\u6a21\u578b\u793a\u610f\u56fe&#xff0c;\u4e0d\u5e94\u88ab\u7406\u89e3\u4e3a\u6240\u6709\u67b6\u6784\u90fd\u5fc5\u987b\u91c7\u7528\u5b8c\u5168\u76f8\u540c\u7684\u56fa\u5b9a\u5fae\u67b6\u6784\u65f6\u5e8f\u3002\u5c24\u5176\u4ece Volta \u5f00\u59cb\u5b58\u5728 Independent Thread Scheduling&#xff0c;\u9700\u8981\u66f4\u52a0\u8c28\u614e\u5730\u7f16\u5199\u4f9d\u8d56 Warp \u5185\u540c\u6b65\u7684\u4ee3\u7801\u3002\u4f46\u5bf9\u521d\u5b66\u8005\u800c\u8a00&#xff0c;\u4e0b\u9762\u7684\u6027\u80fd\u76f4\u89c9\u4ecd\u7136\u6210\u7acb&#xff1a;<\/p>\n<p>\u540c\u4e00 Warp \u4e2d\u63a7\u5236\u6d41\u8d8a\u4e00\u81f4&#xff0c;\u901a\u5e38\u8d8a\u5bb9\u6613\u5145\u5206\u5229\u7528\u6267\u884c\u8d44\u6e90\u3002<\/p>\n<h4>7.3 \u5206\u652f\u4e0d\u662f\u654c\u4eba<\/h4>\n<p>\u4e0d\u8981\u770b\u5230 if \u5c31\u5bb3\u6015\u3002\u5206\u652f\u662f\u5426\u9020\u6210 Warp \u5206\u6b67&#xff0c;\u53d6\u51b3\u4e8e\u540c\u4e00 Warp \u5185\u7ebf\u7a0b\u7684\u6761\u4ef6\u7ed3\u679c\u662f\u5426\u4e0d\u540c\u3002<\/p>\n<p>\u4f8b\u5982&#xff1a;<\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>blockIdx<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ &#8230;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u540c\u4e00\u4e2a Block \u5185\u6240\u6709\u7ebf\u7a0b\u770b\u5230\u76f8\u540c\u7684 blockIdx.x\u3002\u82e5\u6bcf\u4e2a Warp \u5b8c\u5168\u4f4d\u4e8e\u4e00\u4e2a Block \u5185&#xff0c;\u90a3\u4e48 Warp \u5185\u6761\u4ef6\u4e00\u81f4&#xff0c;\u4e0d\u4f1a\u56e0\u4e3a\u8fd9\u4e2a\u6761\u4ef6\u4ea7\u751f Lane \u4e4b\u95f4\u7684\u5206\u6b67\u3002<\/p>\n<p>\u518d\u4f8b\u5982\u8fb9\u754c\u5224\u65ad&#xff1a;<\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">&lt;<\/span> N<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    output<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> input<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">2.0f<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u901a\u5e38\u53ea\u6709\u6700\u540e\u4e00\u4e2a Block \u7684\u6700\u540e\u90e8\u5206 Warp \u53ef\u80fd\u51fa\u73b0\u5c11\u91cf\u65e0\u6548 Lane\u3002\u8fd9\u79cd\u8fb9\u754c\u5224\u65ad\u662f\u4fdd\u8bc1\u6b63\u786e\u6027\u6240\u5fc5\u9700\u7684&#xff0c;\u4e0d\u80fd\u4e3a\u4e86\u201c\u6d88\u9664\u5206\u652f\u201d\u800c\u8d8a\u754c\u8bbf\u95ee\u5185\u5b58\u3002<\/p>\n<p>\u4f18\u5316\u7684\u7b2c\u4e00\u539f\u5219\u662f\u6b63\u786e&#xff0c;\u7b2c\u4e8c\u539f\u5219\u662f\u6d4b\u91cf\u3002\u4e0d\u8981\u5728\u6ca1\u6709\u6027\u80fd\u8bc1\u636e\u65f6\u7834\u574f\u6e05\u6670\u6027\u3002<\/p>\n<h4>7.4 \u4e3a\u4ec0\u4e48\u4e0d\u80fd\u518d\u4f9d\u8d56\u9690\u5f0f Warp \u540c\u6b65<\/h4>\n<p>\u4e00\u4e9b\u8001\u4ee3\u7801\u5047\u8bbe&#xff1a;<\/p>\n<p>\u540c\u4e00 Warp \u7684\u7ebf\u7a0b\u5929\u7136\u5728\u6bcf\u4e00\u6761\u6307\u4ee4\u4e0a\u4e25\u683c\u540c\u6b65&#xff0c;\u56e0\u6b64\u5171\u4eab\u6570\u636e\u540e\u4e0d\u9700\u8981\u4efb\u4f55\u540c\u6b65\u64cd\u4f5c\u3002<\/p>\n<p>\u8fd9\u79cd\u5199\u6cd5\u53ef\u80fd\u5728\u65b0\u67b6\u6784\u4e0a\u51fa\u73b0\u95ee\u9898\u3002\u9700\u8981 Warp \u5185\u540c\u6b65\u65f6&#xff0c;\u5e94\u4f7f\u7528\u6709\u660e\u786e\u8bed\u4e49\u7684\u540c\u6b65\u4e0e Warp \u7ea7\u539f\u8bed&#xff0c;\u4f8b\u5982 __syncwarp()&#xff0c;\u5e76\u6b63\u786e\u5904\u7406\u53c2\u4e0e\u63a9\u7801\u3002<\/p>\n<p>\u672c\u7bc7\u7684 __ballot_sync \u793a\u4f8b\u8ba9\u6240\u6709\u6d3b\u52a8 Lane \u5728\u8fdb\u5165\u5206\u652f\u524d\u8c03\u7528\u76f8\u540c\u6295\u7968\u51fd\u6570\u548c\u76f8\u540c\u53c2\u4e0e\u63a9\u7801\u3002\u8fd9\u662f\u6709\u610f\u8bbe\u8ba1\u7684\u5b89\u5168\u6a21\u5f0f\u3002<\/p>\n<hr \/>\n<h3>\u516b\u3001\u8ba1\u7b97\u80fd\u529b&#xff1a;\u4e0d\u662f CUDA Toolkit \u7248\u672c&#xff0c;\u4e5f\u4e0d\u662f\u6027\u80fd\u5206\u6570<\/h3>\n<h4>8.1 \u8ba1\u7b97\u80fd\u529b\u8868\u793a\u4ec0\u4e48<\/h4>\n<p>Compute Capability \u901a\u5e38\u5199\u4e3a major.minor&#xff0c;\u4f8b\u5982&#xff1a;<\/p>\n<p>7.5<br \/>\n8.6<br \/>\n8.9<br \/>\n9.0<\/p>\n<p>\u5b83\u63cf\u8ff0 GPU \u786c\u4ef6\u67b6\u6784\u5411 CUDA \u66b4\u9732\u7684\u529f\u80fd\u96c6\u5408\u548c\u90e8\u5206\u8d44\u6e90\u7279\u5f81\u3002\u4e0d\u540c\u8ba1\u7b97\u80fd\u529b\u53ef\u80fd\u5f71\u54cd&#xff1a;<\/p>\n<ul>\n<li>\u652f\u6301\u54ea\u4e9b\u6307\u4ee4\u548c\u786c\u4ef6\u7279\u6027&#xff1b;<\/li>\n<li>\u6bcf\u4e2a Block\u3001SM \u7684\u90e8\u5206\u8d44\u6e90\u4e0a\u9650&#xff1b;<\/li>\n<li>\u67d0\u4e9b\u6570\u636e\u7c7b\u578b\u548c\u539f\u5b50\u64cd\u4f5c\u662f\u5426\u53ef\u7528&#xff1b;<\/li>\n<li>\u7f16\u8bd1\u5668\u5e94\u751f\u6210\u54ea\u7c7b\u76ee\u6807\u4ee3\u7801&#xff1b;<\/li>\n<li>\u67d0\u4e9b\u4f18\u5316\u7b56\u7565\u4e0e\u541e\u5410\u7279\u5f81\u3002<\/li>\n<\/ul>\n<h4>8.2 \u8ba1\u7b97\u80fd\u529b\u4e0d\u4f1a\u56e0\u4e3a\u5347\u7ea7\u9a71\u52a8\u800c\u6539\u53d8<\/h4>\n<p>\u5047\u8bbe\u4e00\u5f20 GPU \u7684\u8ba1\u7b97\u80fd\u529b\u662f 7.5&#xff1a;<\/p>\n<ul>\n<li>\u66f4\u65b0 NVIDIA \u9a71\u52a8\u540e&#xff0c;\u5b83\u4ecd\u7136\u662f 7.5&#xff1b;<\/li>\n<li>\u5b89\u88c5 CUDA Toolkit 11\u300112 \u6216\u5176\u4ed6\u517c\u5bb9\u7248\u672c\u540e&#xff0c;\u5b83\u4ecd\u7136\u662f 7.5&#xff1b;<\/li>\n<li>\u66f4\u6362 CMake \u7248\u672c\u540e&#xff0c;\u5b83\u4ecd\u7136\u662f 7.5\u3002<\/li>\n<\/ul>\n<p>\u56e0\u4e3a\u8ba1\u7b97\u80fd\u529b\u662f GPU \u786c\u4ef6\u67b6\u6784\u5c5e\u6027&#xff0c;\u4e0d\u662f\u8f6f\u4ef6\u5305\u7248\u672c\u53f7\u3002<\/p>\n<h4>8.3 CUDA Toolkit \u7248\u672c\u662f\u4ec0\u4e48<\/h4>\n<p>CUDA Toolkit \u662f\u5f00\u53d1\u5de5\u5177\u96c6\u5408&#xff0c;\u5305\u542b&#xff1a;<\/p>\n<ul>\n<li>NVCC \u7f16\u8bd1\u5668\u9a71\u52a8&#xff1b;<\/li>\n<li>CUDA Runtime \u4e0e\u5f00\u53d1\u5e93&#xff1b;<\/li>\n<li>\u5934\u6587\u4ef6&#xff1b;<\/li>\n<li>\u8c03\u8bd5\u4e0e\u5206\u6790\u5de5\u5177&#xff1b;<\/li>\n<li>\u5404\u7c7b\u914d\u5957\u7ec4\u4ef6\u3002<\/li>\n<\/ul>\n<p>CUDA Toolkit 12.0 \u548c Compute Capability 12.0 \u53ea\u662f\u6570\u5b57\u5f62\u5f0f\u770b\u8d77\u6765\u76f8\u4f3c&#xff0c;\u542b\u4e49\u5b8c\u5168\u4e0d\u540c\u3002\u4e0d\u8981\u628a\u4e8c\u8005\u5efa\u7acb\u4e00\u4e00\u5bf9\u5e94\u3002<\/p>\n<h4>8.4 sm_75 \u662f\u4ec0\u4e48<\/h4>\n<p>\u5f53\u8ba1\u7b97\u80fd\u529b\u662f 7.5 \u65f6&#xff0c;\u5e38\u89c1\u76ee\u6807\u67b6\u6784\u5199\u6cd5\u662f&#xff1a;<\/p>\n<p>sm_75<\/p>\n<p>\u4f7f\u7528 NVCC \u65f6\u53ef\u80fd\u770b\u5230&#xff1a;<\/p>\n<p>nvcc <span class=\"token operator\">&#8211;<\/span>arch&#061;sm_75 program<span class=\"token punctuation\">.<\/span>cu <span class=\"token operator\">&#8211;<\/span>o program<span class=\"token punctuation\">.<\/span>exe<\/p>\n<p>CMake \u4e2d\u901a\u5e38\u5199\u4e0d\u5e26\u5c0f\u6570\u70b9\u7684\u6570\u503c&#xff1a;<\/p>\n<p>cmake <span class=\"token operator\">&#8211;<\/span>S <span class=\"token punctuation\">.<\/span> <span class=\"token operator\">&#8211;<\/span>B build <span class=\"token operator\">&#8211;<\/span>DCMAKE_CUDA_ARCHITECTURES&#061;75<\/p>\n<p>\u5b83\u8868\u793a\u4e3a\u76f8\u5e94 SM \u7248\u672c\u751f\u6210\u76ee\u6807\u4ee3\u7801&#xff0c;\u4e0d\u8868\u793a\u201c\u4f18\u5316\u7b49\u7ea7 75%\u201d&#xff0c;\u4e5f\u4e0d\u662f\u663e\u5361\u663e\u5b58\u5927\u5c0f\u3002<\/p>\n<h4>8.5 compute_75 \u4e0e sm_75 \u7684\u521d\u6b65\u533a\u522b<\/h4>\n<p>\u5728\u4f20\u7edf NVCC \u76ee\u6807\u8bed\u4e49\u4e2d&#xff0c;\u53ef\u4ee5\u5148\u5efa\u7acb\u4ee5\u4e0b\u76f4\u89c9&#xff1a;<\/p>\n<ul>\n<li>compute_75 \u901a\u5e38\u8868\u793a\u865a\u62df\u67b6\u6784\u4e0e PTX \u7ea7\u76ee\u6807&#xff1b;<\/li>\n<li>sm_75 \u901a\u5e38\u8868\u793a\u5bf9\u5e94\u771f\u5b9e\u67b6\u6784\u7684\u673a\u5668\u4ee3\u7801\u76ee\u6807\u3002<\/li>\n<\/ul>\n<p>Fat Binary \u53ef\u4ee5\u540c\u65f6\u5305\u542b\u591a\u79cd\u76ee\u6807&#xff0c;\u4f7f\u7a0b\u5e8f\u8986\u76d6\u591a\u4e2a GPU \u67b6\u6784\u3002\u66f4\u5b8c\u6574\u7684\u524d\u5411\u517c\u5bb9\u3001PTX JIT \u4e0e -gencode \u4f1a\u5728\u7f16\u8bd1\u4e13\u9898\u5c55\u5f00\u3002\u672c\u7bc7\u53ea\u8981\u6c42\u4f60\u80fd\u6839\u636e\u8bbe\u5907\u67e5\u8be2\u7ed3\u679c\u914d\u7f6e\u5f53\u524d\u5b9e\u9a8c\u3002<\/p>\n<h4>8.6 \u5982\u4f55\u67e5\u81ea\u5df1\u7684\u8ba1\u7b97\u80fd\u529b<\/h4>\n<p>\u6700\u53ef\u9760\u7684\u65b9\u5f0f\u6709\u4e09\u79cd&#xff1a;<\/p>\n<li>\u7528\u672c\u6587 Runtime API \u7a0b\u5e8f\u8bfb\u53d6 prop.major \u548c prop.minor&#xff1b;<\/li>\n<li>\u4f7f\u7528\u652f\u6301\u76f8\u5e94\u67e5\u8be2\u7684 nvidia-smi&#xff1b;<\/li>\n<li>\u67e5 NVIDIA \u5b98\u65b9 CUDA GPU Compute Capability \u8868\u3002<\/li>\n<p>\u53ef\u5c1d\u8bd5&#xff1a;<\/p>\n<p>nvidia-smi <span class=\"token operator\">&#8212;<\/span>query-gpu&#061;name<span class=\"token punctuation\">,<\/span>compute_cap <span class=\"token operator\">&#8212;<\/span>format&#061;csv<\/p>\n<p>\u5982\u679c\u672c\u673a\u9a71\u52a8\u7248\u672c\u4e0d\u652f\u6301\u8fd9\u4e2a\u5b57\u6bb5&#xff0c;\u4e0d\u4ee3\u8868 GPU \u4e0d\u652f\u6301 CUDA&#xff0c;\u76f4\u63a5\u8fd0\u884c\u672c\u6587\u67e5\u8be2\u7a0b\u5e8f\u5373\u53ef\u3002<\/p>\n<h4>8.7 \u540c\u4e00\u8ba1\u7b97\u80fd\u529b\u662f\u5426\u4ee3\u8868\u6027\u80fd\u4e00\u6837<\/h4>\n<p>\u4e0d\u4ee3\u8868\u3002\u4e24\u5f20 GPU \u5373\u4f7f\u8ba1\u7b97\u80fd\u529b\u76f8\u540c&#xff0c;\u4e5f\u53ef\u80fd\u6709\u4e0d\u540c\u7684&#xff1a;<\/p>\n<ul>\n<li>SM \u6570\u91cf&#xff1b;<\/li>\n<li>\u663e\u5b58\u5bb9\u91cf&#xff1b;<\/li>\n<li>\u663e\u5b58\u5e26\u5bbd&#xff1b;<\/li>\n<li>\u529f\u8017\u4e0e\u9891\u7387&#xff1b;<\/li>\n<li>\u6563\u70ed\u6761\u4ef6&#xff1b;<\/li>\n<li>\u4ea7\u54c1\u5b9a\u4f4d&#xff1b;<\/li>\n<li>\u67d0\u4e9b\u786c\u4ef6\u8d44\u6e90\u89c4\u6a21\u3002<\/li>\n<\/ul>\n<p>\u8ba1\u7b97\u80fd\u529b\u56de\u7b54\u7684\u662f\u201c\u67b6\u6784\u529f\u80fd\u4e0e\u76ee\u6807\u517c\u5bb9\u6027\u201d\u95ee\u9898&#xff0c;\u4e0d\u662f\u5b8c\u6574\u6027\u80fd\u8bc4\u5206\u3002\u8bc4\u4ef7\u5b9e\u9645\u4efb\u52a1\u5fc5\u987b\u7ed3\u5408\u786c\u4ef6\u89c4\u6a21\u3001\u6570\u636e\u7279\u5f81\u548c\u771f\u5b9e\u57fa\u51c6\u6d4b\u8bd5\u3002<\/p>\n<hr \/>\n<h3>\u4e5d\u3001\u5b9e\u6218\u4e00&#xff1a;\u751f\u6210\u81ea\u5df1\u7684 GPU \u80fd\u529b\u62a5\u544a<\/h3>\n<h4>9.1 \u8fd9\u4e2a\u7a0b\u5e8f\u89e3\u51b3\u4ec0\u4e48\u9700\u6c42<\/h4>\n<p>\u7f51\u4e0a\u7684 CUDA \u6559\u7a0b\u7ecf\u5e38\u5199&#xff1a;<\/p>\n<ul>\n<li>Warp \u662f 32&#xff1b;<\/li>\n<li>\u6bcf\u4e2a Block \u6700\u5927 1024 \u4e2a\u7ebf\u7a0b&#xff1b;<\/li>\n<li>\u67d0\u5361\u6709\u591a\u5c11 SM&#xff1b;<\/li>\n<li>Shared Memory \u6709\u591a\u5c11\u3002<\/li>\n<\/ul>\n<p>\u4f46\u5b66\u4e60\u771f\u6b63\u6709\u4ef7\u503c\u7684\u52a8\u4f5c&#xff0c;\u662f\u8ba9\u7a0b\u5e8f\u67e5\u8be2\u4f60\u6b63\u5728\u4f7f\u7528\u7684\u8bbe\u5907\u3002\u8fd9\u6837\u4f60\u53ef\u4ee5\u628a\u62bd\u8c61\u540d\u8bcd\u53d8\u6210\u771f\u5b9e\u6570\u636e&#xff0c;\u5e76\u907f\u514d\u628a\u522b\u4eba\u7684\u663e\u5361\u53c2\u6570\u5f53\u6210\u81ea\u5df1\u7684\u3002<\/p>\n<p>\u7a0b\u5e8f\u6587\u4ef6\u4f4d\u4e8e&#xff1a;<\/p>\n<p>blogs\/code\/02\/device_query_lite.cu<\/p>\n<h4>9.2 \u5b8c\u6574\u4ee3\u7801<\/h4>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cuda_runtime.h&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cstdio&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cstdlib&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name function\">CUDA_CHECK<\/span><span class=\"token expression\"><span class=\"token punctuation\">(<\/span>call<span class=\"token punctuation\">)<\/span>                                                     <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n    <span class=\"token expression\"><span class=\"token keyword\">do<\/span> <span class=\"token punctuation\">{<\/span>                                                                     <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n        <span class=\"token expression\"><span class=\"token keyword\">const<\/span> cudaError_t error__ <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>call<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>                                  <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n        <span class=\"token expression\"><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>error__ <span class=\"token operator\">!&#061;<\/span> cudaSuccess<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>                                        <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n            <span class=\"token expression\">std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">fprintf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token constant\">stderr<\/span><span class=\"token punctuation\">,<\/span> <\/span><span class=\"token string\">&#034;CUDA error at %s:%d: %s\\\\n&#034;<\/span><span class=\"token expression\"><span class=\"token punctuation\">,<\/span>                <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n                         <span class=\"token expression\"><span class=\"token constant\">__FILE__<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token constant\">__LINE__<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">cudaGetErrorString<\/span><span class=\"token punctuation\">(<\/span>error__<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>    <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n            <span class=\"token expression\"><span class=\"token keyword\">return<\/span> EXIT_FAILURE<span class=\"token punctuation\">;<\/span>                                             <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n        <span class=\"token expression\"><span class=\"token punctuation\">}<\/span>                                                                    <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n    <span class=\"token expression\"><span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><\/span><\/span><\/p>\n<p><span class=\"token keyword\">int<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> device_count <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">CUDA_CHECK<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">cudaGetDeviceCount<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>device_count<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>device_count <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">fprintf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token constant\">stderr<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;No CUDA-capable GPU was found.\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> EXIT_FAILURE<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;CUDA device count: %d\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> device_count<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> device <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> device <span class=\"token operator\">&lt;<\/span> device_count<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>device<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        cudaDeviceProp prop<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token function\">CUDA_CHECK<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">cudaGetDeviceProperties<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>prop<span class=\"token punctuation\">,<\/span> device<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token keyword\">const<\/span> <span class=\"token keyword\">double<\/span> global_memory_gib <span class=\"token operator\">&#061;<\/span><br \/>\n            <span class=\"token generic-function\"><span class=\"token function\">static_cast<\/span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&gt;<\/span><\/span><\/span><span class=\"token punctuation\">(<\/span>prop<span class=\"token punctuation\">.<\/span>totalGlobalMem<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/<\/span><br \/>\n            <span class=\"token punctuation\">(<\/span><span class=\"token number\">1024.0<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">1024.0<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">1024.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token keyword\">const<\/span> <span class=\"token keyword\">double<\/span> peak_bandwidth_gb_s <span class=\"token operator\">&#061;<\/span><br \/>\n            <span class=\"token number\">2.0<\/span> <span class=\"token operator\">*<\/span> <span class=\"token generic-function\"><span class=\"token function\">static_cast<\/span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&gt;<\/span><\/span><\/span><span class=\"token punctuation\">(<\/span>prop<span class=\"token punctuation\">.<\/span>memoryClockRate<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">1000.0<\/span> <span class=\"token operator\">*<\/span><br \/>\n            <span class=\"token punctuation\">(<\/span><span class=\"token generic-function\"><span class=\"token function\">static_cast<\/span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&gt;<\/span><\/span><\/span><span class=\"token punctuation\">(<\/span>prop<span class=\"token punctuation\">.<\/span>memoryBusWidth<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/<\/span> <span class=\"token number\">8.0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/<\/span> <span class=\"token number\">1.0e9<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n&#061;&#061;&#061; Device %d &#061;&#061;&#061;\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> device<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Name                         : %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> prop<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Compute capability           : %d.%d\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    prop<span class=\"token punctuation\">.<\/span>major<span class=\"token punctuation\">,<\/span> prop<span class=\"token punctuation\">.<\/span>minor<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Streaming multiprocessors    : %d\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    prop<span class=\"token punctuation\">.<\/span>multiProcessorCount<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Warp size                    : %d threads\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> prop<span class=\"token punctuation\">.<\/span>warpSize<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Maximum threads per block    : %d\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    prop<span class=\"token punctuation\">.<\/span>maxThreadsPerBlock<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Maximum block dimensions     : (%d, %d, %d)\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    prop<span class=\"token punctuation\">.<\/span>maxThreadsDim<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> prop<span class=\"token punctuation\">.<\/span>maxThreadsDim<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    prop<span class=\"token punctuation\">.<\/span>maxThreadsDim<span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Maximum grid dimensions      : (%d, %d, %d)\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    prop<span class=\"token punctuation\">.<\/span>maxGridSize<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> prop<span class=\"token punctuation\">.<\/span>maxGridSize<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    prop<span class=\"token punctuation\">.<\/span>maxGridSize<span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Global memory                : %.2f GiB\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    global_memory_gib<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Shared memory per block      : %zu bytes\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token generic-function\"><span class=\"token function\">static_cast<\/span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;<\/span>size_t<span class=\"token operator\">&gt;<\/span><\/span><\/span><span class=\"token punctuation\">(<\/span>prop<span class=\"token punctuation\">.<\/span>sharedMemPerBlock<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Registers per block          : %d\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> prop<span class=\"token punctuation\">.<\/span>regsPerBlock<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Core clock (reported)        : %.0f MHz\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    prop<span class=\"token punctuation\">.<\/span>clockRate <span class=\"token operator\">\/<\/span> <span class=\"token number\">1000.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Memory bus width             : %d bits\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    prop<span class=\"token punctuation\">.<\/span>memoryBusWidth<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Peak memory bandwidth (est.) : %.1f GB\/s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    peak_bandwidth_gb_s<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Concurrent kernels           : %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    prop<span class=\"token punctuation\">.<\/span>concurrentKernels <span class=\"token operator\">?<\/span> <span class=\"token string\">&#034;yes&#034;<\/span> <span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;no&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Unified virtual addressing   : %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    prop<span class=\"token punctuation\">.<\/span>unifiedAddressing <span class=\"token operator\">?<\/span> <span class=\"token string\">&#034;yes&#034;<\/span> <span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;no&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token string\">&#034;\\\\nNote: CUDA core count is intentionally not estimated here. &#034;<\/span><br \/>\n        <span class=\"token string\">&#034;It is architecture-specific and is not a stable cudaDeviceProp field.\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> EXIT_SUCCESS<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>9.3 Windows \u7f16\u8bd1<\/h4>\n<p>\u5728\u201cx64 Native Tools Command Prompt for VS 2022\u201d\u6216\u5df2\u7ecf\u6b63\u786e\u52a0\u8f7d MSVC \u73af\u5883\u7684\u7ec8\u7aef\u4e2d&#xff1a;<\/p>\n<p>cd cuda-notes\\\\blogs\\\\code\\\\02<br \/>\nnvcc <span class=\"token operator\">&#8211;<\/span>std&#061;c&#043;<span class=\"token operator\">&#043;<\/span>14 device_query_lite<span class=\"token punctuation\">.<\/span>cu <span class=\"token operator\">&#8211;<\/span>o device_query_lite<span class=\"token punctuation\">.<\/span>exe<br \/>\n<span class=\"token punctuation\">.<\/span>\\\\device_query_lite<span class=\"token punctuation\">.<\/span>exe<\/p>\n<p>\u5982\u679c\u4f7f\u7528 CMake&#xff1a;<\/p>\n<p>cd cuda-notes\\\\blogs\\\\code\\\\02<br \/>\ncmake <span class=\"token operator\">&#8211;<\/span>S <span class=\"token punctuation\">.<\/span> <span class=\"token operator\">&#8211;<\/span>B build <span class=\"token operator\">&#8211;<\/span>G <span class=\"token string\">&#034;Visual Studio 17 2022&#034;<\/span> <span class=\"token operator\">&#8211;<\/span>A x64 <span class=\"token operator\">&#8211;<\/span>DCMAKE_CUDA_ARCHITECTURES&#061;75<br \/>\ncmake <span class=\"token operator\">&#8212;<\/span>build build <span class=\"token operator\">&#8212;<\/span>config Release<br \/>\n<span class=\"token punctuation\">.<\/span>\\\\build\\\\Release\\\\device_query_lite<span class=\"token punctuation\">.<\/span>exe<\/p>\n<p>\u8bf7\u628a 75 \u6539\u6210\u81ea\u5df1 GPU \u7684\u8ba1\u7b97\u80fd\u529b\u6570\u5b57\u3002\u5982\u679c\u6682\u65f6\u4e0d\u77e5\u9053&#xff0c;\u53ef\u4ee5\u7b2c\u4e00\u6b21\u914d\u7f6e\u65f6\u7701\u7565 CMAKE_CUDA_ARCHITECTURES&#xff0c;\u5148\u8fd0\u884c\u67e5\u8be2\u7a0b\u5e8f&#xff0c;\u518d\u91cd\u65b0\u660e\u786e\u76ee\u6807\u3002<\/p>\n<h4>9.4 Linux \u7f16\u8bd1<\/h4>\n<p><span class=\"token builtin class-name\">cd<\/span> cuda-notes\/blogs\/code\/02<br \/>\nnvcc <span class=\"token parameter variable\">-std<\/span><span class=\"token operator\">&#061;<\/span>c&#043;&#043;14 device_query_lite.cu <span class=\"token parameter variable\">-o<\/span> device_query_lite<br \/>\n.\/device_query_lite<\/p>\n<p>\u4f7f\u7528 CMake&#xff1a;<\/p>\n<p>cmake <span class=\"token parameter variable\">-S<\/span> <span class=\"token builtin class-name\">.<\/span> <span class=\"token parameter variable\">-B<\/span> build <span class=\"token parameter variable\">-DCMAKE_BUILD_TYPE<\/span><span class=\"token operator\">&#061;<\/span>Release <span class=\"token parameter variable\">-DCMAKE_CUDA_ARCHITECTURES<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">75<\/span><br \/>\ncmake <span class=\"token parameter variable\">&#8211;build<\/span> build <span class=\"token parameter variable\">-j<\/span><br \/>\n.\/build\/device_query_lite<\/p>\n<h4>9.5 \u672c\u673a\u5b9e\u6d4b\u8f93\u51fa<\/h4>\n<p>\u672c\u6587\u5728 RTX 2060 \u4e0a\u5f97\u5230&#xff1a;<\/p>\n<p>CUDA device count: 1<\/p>\n<p>&#061;&#061;&#061; Device 0 &#061;&#061;&#061;<br \/>\nName                         : NVIDIA GeForce RTX 2060<br \/>\nCompute capability           : 7.5<br \/>\nStreaming multiprocessors    : 30<br \/>\nWarp size                    : 32 threads<br \/>\nMaximum threads per block    : 1024<br \/>\nMaximum block dimensions     : (1024, 1024, 64)<br \/>\nMaximum grid dimensions      : (2147483647, 65535, 65535)<br \/>\nGlobal memory                : 6.00 GiB<br \/>\nShared memory per block      : 49152 bytes<br \/>\nRegisters per block          : 65536<br \/>\nCore clock (reported)        : 1200 MHz<br \/>\nMemory bus width             : 192 bits<br \/>\nPeak memory bandwidth (est.) : 264.0 GB\/s<br \/>\nConcurrent kernels           : yes<br \/>\nUnified virtual addressing   : yes<\/p>\n<p>\u4f60\u7684\u8f93\u51fa\u4e0d\u540c\u662f\u6b63\u5e38\u7684\u3002\u91cd\u8981\u7684\u4e0d\u662f\u5f97\u5230\u548c\u672c\u6587\u4e00\u6837\u7684\u6570\u5b57&#xff0c;\u800c\u662f\u80fd\u89e3\u91ca\u6bcf\u4e00\u884c\u3002<\/p>\n<h4>9.6 \u6bcf\u4e2a\u5b57\u6bb5\u5230\u5e95\u6709\u4ec0\u4e48\u7528<\/h4>\n<h5>name<\/h5>\n<p>\u8bbe\u5907\u540d\u79f0\u3002\u591a GPU \u673a\u5668\u53ef\u80fd\u5217\u51fa\u591a\u4e2a\u8bbe\u5907&#xff0c;\u7f16\u53f7\u4ece 0 \u5f00\u59cb\u3002\u4ee3\u7801\u4e0d\u5e94\u53ea\u51ed\u540d\u79f0\u786c\u7f16\u7801\u80fd\u529b&#xff0c;\u56e0\u4e3a\u4ea7\u54c1\u540d\u79f0\u4e0d\u662f Runtime \u7684\u529f\u80fd\u68c0\u6d4b\u673a\u5236\u3002<\/p>\n<h5>major \u4e0e minor<\/h5>\n<p>\u7ec4\u6210\u8ba1\u7b97\u80fd\u529b\u3002\u4f8b\u5982 7 \u548c 5 \u7ec4\u5408\u4e3a 7.5\u3002\u7f16\u8bd1\u76ee\u6807\u901a\u5e38\u5bf9\u5e94 sm_75\u3002<\/p>\n<h5>multiProcessorCount<\/h5>\n<p>SM \u6570\u91cf\u3002\u8fd9\u662f\u7406\u89e3 GPU \u5e76\u884c\u89c4\u6a21\u7684\u91cd\u8981\u5165\u53e3&#xff0c;\u4f46\u4e0d\u80fd\u76f4\u63a5\u4e58\u4e00\u4e2a\u56fa\u5b9a\u5e38\u6570\u5c31\u8de8\u67b6\u6784\u6bd4\u8f83\u6240\u6709\u6027\u80fd\u3002<\/p>\n<h5>warpSize<\/h5>\n<p>Warp \u7684\u7ebf\u7a0b\u6570\u3002\u672c\u6587\u5b9e\u6d4b\u4e3a 32\u3002\u540e\u9762\u7684\u6620\u5c04\u4ee3\u7801\u4f1a\u4f7f\u7528\u8bbe\u5907\u7aef\u5185\u5efa warpSize\u3002<\/p>\n<h5>maxThreadsPerBlock<\/h5>\n<p>\u5355\u4e2a Block \u5141\u8bb8\u7684\u6700\u5927\u7ebf\u7a0b\u603b\u6570\u3002\u5373\u4f7f\u4e09\u4e2a\u7ef4\u5ea6\u5206\u522b\u6709\u8f83\u5927\u7684\u4e0a\u9650&#xff0c;\u4e09\u4e2a\u7ef4\u5ea6\u4e58\u79ef\u4ecd\u4e0d\u80fd\u8d85\u8fc7\u8fd9\u4e2a\u603b\u6570\u3002<\/p>\n<p>\u4f8b\u5982\u4e0b\u9762\u7684 Block&#xff1a;<\/p>\n<p>dim3 <span class=\"token function\">block<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">32<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">32<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u603b\u7ebf\u7a0b\u6570\u662f 1024&#xff0c;\u53ef\u80fd\u5904\u5728\u8bbe\u5907\u4e0a\u9650\u3002\u4e0b\u9762\u7684\u914d\u7f6e&#xff1a;<\/p>\n<p>dim3 <span class=\"token function\">block<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">32<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">32<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u603b\u7ebf\u7a0b\u6570\u662f 2048&#xff0c;\u5373\u4f7f\u6bcf\u4e2a\u5355\u72ec\u7ef4\u5ea6\u6ca1\u6709\u8d8a\u8fc7\u5bf9\u5e94\u7ef4\u5ea6\u4e0a\u9650&#xff0c;\u4e58\u79ef\u4e5f\u53ef\u80fd\u8d85\u8fc7 maxThreadsPerBlock&#xff0c;\u5bfc\u81f4 Kernel \u542f\u52a8\u5931\u8d25\u3002<\/p>\n<p>\u4e09\u7ef4 Block \u603b\u7ebf\u7a0b\u6570\u4e3a&#xff1a;<\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>          T<\/p>\n<p>          b<\/p>\n<p>         &#061;<\/p>\n<p>          B<\/p>\n<p>          x<\/p>\n<p>          B<\/p>\n<p>          y<\/p>\n<p>          B<\/p>\n<p>          z<\/p>\n<p>         T_b &#061; B_x B_y B_z <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">T<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1389em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">b<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.9694em;vertical-align: -0.2861em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">x<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0359em\">y<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.044em\">z<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u5fc5\u987b\u6ee1\u8db3&#xff1a;<\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>          T<\/p>\n<p>          b<\/p>\n<p>         \u2264<\/p>\n<p>          T<\/p>\n<p>          m<\/p>\n<p>         T_b \\\\le T_m <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">T<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1389em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">b<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">\u2264<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">T<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1389em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">m<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u5176\u4e2d <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         T<\/p>\n<p>         m<\/p>\n<p>       T_m<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">T<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1389em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">m<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u662f\u8bbe\u5907\u5141\u8bb8\u7684\u6bcf Block \u6700\u5927\u7ebf\u7a0b\u6570\u3002<\/p>\n<h5>maxThreadsDim<\/h5>\n<p>\u5206\u522b\u8868\u793a Block \u7684 x\u3001y\u3001z \u7ef4\u5ea6\u4e0a\u9650\u3002\u9664\u4e86\u68c0\u67e5\u603b\u7ebf\u7a0b\u6570&#xff0c;\u8fd8\u8981\u68c0\u67e5\u6bcf\u4e2a\u7ef4\u5ea6\u3002<\/p>\n<h5>maxGridSize<\/h5>\n<p>Grid \u5728\u5404\u7ef4\u5ea6\u7684 Block \u6570\u4e0a\u9650\u3002\u5bf9\u4e8e\u5927\u591a\u6570\u521d\u5b66\u793a\u4f8b&#xff0c;\u4e00\u7ef4 x \u4e0a\u9650\u975e\u5e38\u5927&#xff0c;\u4f46\u5de5\u7a0b\u4ee3\u7801\u4ecd\u5e94\u57fa\u4e8e\u67e5\u8be2\u5c5e\u6027\u548c\u95ee\u9898\u89c4\u6a21\u3002<\/p>\n<h5>totalGlobalMem<\/h5>\n<p>\u8bbe\u5907 Global Memory \u603b\u91cf\u3002\u672c\u6587\u8f6c\u6362\u4e3a GiB&#xff1a;<\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>          M<\/p>\n<p>          g<\/p>\n<p>         &#061;<\/p>\n<p>          M<\/p>\n<p>          b<\/p>\n<p>         \/<\/p>\n<p>          2<\/p>\n<p>          30<\/p>\n<p>         M_g &#061; M_b \/ 2^{30} <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.9694em;vertical-align: -0.2861em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">M<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0359em\">g<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1.1141em;vertical-align: -0.25em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">M<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">b<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord\">\/<\/span><span class=\"mord\"><span class=\"mord\">2<\/span><span class=\"msupsub\"><span class=\"vlist-t\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.8641em\"><span class=\"\" style=\"top: -3.113em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mtight\"><span class=\"mord mtight\">30<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u5176\u4e2d <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         M<\/p>\n<p>         b<\/p>\n<p>       M_b<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">M<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">b<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u662f\u5b57\u8282\u6570&#xff0c;<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         M<\/p>\n<p>         g<\/p>\n<p>       M_g<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.9694em;vertical-align: -0.2861em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">M<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0359em\">g<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u662f GiB\u3002<\/p>\n<p>\u7cfb\u7edf\u4e2d\u663e\u793a\u7684\u53ef\u7528\u663e\u5b58\u53ef\u80fd\u5c0f\u4e8e\u603b\u663e\u5b58&#xff0c;\u56e0\u4e3a\u9a71\u52a8\u3001\u56fe\u5f62\u754c\u9762\u3001\u5176\u4ed6\u8fdb\u7a0b\u548c CUDA \u4e0a\u4e0b\u6587\u4f1a\u5360\u7528\u8d44\u6e90\u3002<\/p>\n<h5>sharedMemPerBlock<\/h5>\n<p>\u5355\u4e2a Block \u53ef\u4f7f\u7528\u7684 Shared Memory \u57fa\u7840\u4e0a\u9650\u4e4b\u4e00\u3002\u4e0d\u540c\u67b6\u6784\u8fd8\u53ef\u80fd\u63d0\u4f9b\u53ef\u914d\u7f6e Shared Memory\u3001Opt-in \u4e0a\u9650\u7b49\u5c5e\u6027&#xff0c;\u4e0d\u80fd\u4ec5\u9760\u8fd9\u4e00\u884c\u8986\u76d6\u6240\u6709\u9ad8\u7ea7\u60c5\u51b5\u3002\u672c\u7cfb\u5217\u4f1a\u5728\u5171\u4eab\u5185\u5b58\u4e13\u9898\u4e2d\u67e5\u8be2\u66f4\u5b8c\u6574\u5c5e\u6027\u3002<\/p>\n<h5>regsPerBlock<\/h5>\n<p>\u4e00\u4e2a Block \u76f8\u5173\u7684\u5bc4\u5b58\u5668\u8d44\u6e90\u4e0a\u9650\u3002\u6bcf\u4e2a\u7ebf\u7a0b\u7528\u591a\u5c11\u5bc4\u5b58\u5668\u7531\u7f16\u8bd1\u7ed3\u679c\u548c\u4ee3\u7801\u51b3\u5b9a\u3002\u7ebf\u7a0b\u6570\u4e58\u4ee5\u6bcf\u7ebf\u7a0b\u5bc4\u5b58\u5668\u9700\u6c42&#xff0c;\u4f1a\u5f71\u54cd Block \u80fd\u5426\u9a7b\u7559\u548c\u540c\u65f6\u9a7b\u7559\u6570\u91cf\u3002<\/p>\n<h5>clockRate<\/h5>\n<p>Runtime \u62a5\u544a\u7684\u6838\u5fc3\u65f6\u949f\u5c5e\u6027\u3002\u771f\u5b9e\u8fd0\u884c\u9891\u7387\u4f1a\u53d7\u5230\u529f\u8017\u3001\u6e29\u5ea6\u3001\u8d1f\u8f7d\u3001\u52a8\u6001\u52a0\u901f\u548c\u7cfb\u7edf\u72b6\u6001\u5f71\u54cd&#xff0c;\u6240\u4ee5\u4e0d\u8981\u62ff\u8fd9\u4e00\u884c\u5f53\u4f5c\u56fa\u5b9a\u6027\u80fd\u627f\u8bfa\u3002<\/p>\n<h5>memoryBusWidth \u4e0e\u4f30\u7b97\u5e26\u5bbd<\/h5>\n<p>\u793a\u4f8b\u4f7f\u7528\u62a5\u544a\u7684\u663e\u5b58\u65f6\u949f\u548c\u603b\u7ebf\u4f4d\u5bbd\u7ed9\u51fa\u4e00\u4e2a\u7406\u8bba\u4f30\u7b97\u3002\u7b80\u5316\u516c\u5f0f&#xff1a;<\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>          B<\/p>\n<p>          p<\/p>\n<p>         &#061;<\/p>\n<p>         2<\/p>\n<p>          f<\/p>\n<p>          m<\/p>\n<p>         w<\/p>\n<p>         \/<\/p>\n<p>         8<\/p>\n<p>         B_p &#061; 2 f_m w \/ 8 <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.9694em;vertical-align: -0.2861em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0502em\">B<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.0502em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">p<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.2861em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1em;vertical-align: -0.25em\"><\/span><span class=\"mord\">2<\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1076em\">f<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1076em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">m<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0269em\">w<\/span><span class=\"mord\">\/8<\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u5176\u4e2d <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         f<\/p>\n<p>         m<\/p>\n<p>       f_m<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8889em;vertical-align: -0.1944em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1076em\">f<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1076em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">m<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u662f\u663e\u5b58\u65f6\u949f&#xff0c;<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>        w<\/p>\n<p>       w<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.4306em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0269em\">w<\/span><\/span><\/span><\/span><\/span> \u662f\u603b\u7ebf\u4f4d\u5bbd&#xff0c;\u7cfb\u6570 2 \u8868\u793a\u53cc\u6cbf\u6570\u636e\u4f20\u8f93\u3002\u4ee3\u7801\u8fd8\u5b8c\u6210\u4e86 kHz \u4e0e GB\/s \u7684\u5355\u4f4d\u6362\u7b97\u3002<\/p>\n<p>\u8fd9\u662f\u7406\u8bba\u5cf0\u503c\u4f30\u7b97&#xff0c;\u4e0d\u662f\u5e94\u7528\u5b9e\u9645\u5e26\u5bbd\u3002\u771f\u5b9e Kernel \u4f1a\u53d7\u5230\u8bbf\u95ee\u6a21\u5f0f\u3001\u7f13\u5b58\u3001\u534f\u8bae\u5f00\u9500\u3001\u5e76\u53d1\u5ea6\u548c\u786c\u4ef6\u72b6\u6001\u5f71\u54cd\u3002\u540e\u7eed\u5e94\u8be5\u901a\u8fc7\u57fa\u51c6\u6d4b\u8bd5\u6216\u5206\u6790\u5de5\u5177\u6d4b\u91cf\u3002<\/p>\n<h4>9.7 \u4e3a\u4ec0\u4e48\u7a0b\u5e8f\u6545\u610f\u4e0d\u6253\u5370 CUDA Core \u6570\u91cf<\/h4>\n<p>\u7f51\u4e0a\u6709\u4e9b deviceQuery \u7b80\u5316\u4ee3\u7801\u6839\u636e\u8ba1\u7b97\u80fd\u529b\u7ef4\u62a4\u4e00\u5f20\u201c\u6bcf SM CUDA Core \u6570\u201d\u8868&#xff0c;\u7136\u540e\u8ba1\u7b97\u603b\u6570\u3002\u8fd9\u5728\u8986\u76d6\u7684\u67b6\u6784\u8303\u56f4\u5185\u53ef\u4ee5\u5f97\u5230\u4ea7\u54c1\u89c4\u683c\u8fd1\u4f3c&#xff0c;\u4f46\u9700\u8981\u6301\u7eed\u7ef4\u62a4\u67b6\u6784\u6620\u5c04&#xff0c;\u4e5f\u5bb9\u6613\u8ba9\u521d\u5b66\u8005\u8bef\u4ee5\u4e3a&#xff1a;<\/p>\n<p>CUDA Thread \u6570\u91cf &#061; CUDA Core \u6570\u91cf<\/p>\n<p>\u8fd9\u662f\u9519\u8bef\u7684\u3002<\/p>\n<p>\u56e0\u6b64&#xff0c;\u672c\u7a0b\u5e8f\u660e\u786e\u4e0d\u731c\u3002\u9700\u8981\u4ea7\u54c1\u89c4\u683c\u65f6\u67e5\u5b98\u65b9\u89c4\u683c\u9875&#xff1b;\u9700\u8981\u7a0b\u5e8f\u517c\u5bb9\u6027\u65f6\u67e5\u8ba1\u7b97\u80fd\u529b\u548c\u8bbe\u5907\u5c5e\u6027&#xff1b;\u9700\u8981\u6027\u80fd\u5224\u65ad\u65f6\u505a\u771f\u5b9e\u6d4b\u91cf\u3002\u4e09\u4e2a\u95ee\u9898\u4f7f\u7528\u4e09\u79cd\u8bc1\u636e&#xff0c;\u4e0d\u6df7\u5728\u4e00\u8d77\u3002<\/p>\n<hr \/>\n<h3>\u5341\u3001\u5b9e\u6218\u4e8c&#xff1a;\u89c2\u5bdf Thread\u3001Warp\u3001Lane \u548c SM<\/h3>\n<h4>10.1 \u4e3a\u4ec0\u4e48\u9009\u62e9 2 \u4e2a Block\u3001\u6bcf\u4e2a 40 \u4e2a\u7ebf\u7a0b<\/h4>\n<p>\u5982\u679c\u4f7f\u7528 32 \u6216 64 \u4e2a\u7ebf\u7a0b&#xff0c;Warp \u90fd\u662f\u5b8c\u6574\u7684&#xff0c;\u4e0d\u5bb9\u6613\u770b\u89c1\u8fb9\u754c\u3002<\/p>\n<p>40 \u662f\u4e00\u4e2a\u6545\u610f\u9009\u62e9\u7684\u5b9e\u9a8c\u6570\u5b57&#xff1a;<\/p>\n<ul>\n<li>\u4e00\u4e2a Block \u5f62\u6210 2 \u4e2a Warp&#xff1b;<\/li>\n<li>Warp 0 \u6709 32 \u4e2a\u7ebf\u7a0b&#xff1b;<\/li>\n<li>Warp 1 \u53ea\u6709 8 \u4e2a\u7ebf\u7a0b&#xff1b;<\/li>\n<li>\u4e24\u4e2a Block \u5404\u81ea\u91cd\u65b0\u4ece Warp 0\u3001Lane 0 \u5f00\u59cb&#xff1b;<\/li>\n<li>\u603b\u5171\u53ea\u6709 80 \u884c&#xff0c;\u4ecd\u7136\u5bb9\u6613\u9605\u8bfb\u3002<\/li>\n<\/ul>\n<h4>10.2 \u4e3a\u4ec0\u4e48\u4e0d\u76f4\u63a5\u5728 GPU \u4e2d printf<\/h4>\n<p>\u8bbe\u5907\u7aef printf \u7684\u8f93\u51fa\u987a\u5e8f\u4e0d\u4fdd\u8bc1&#xff0c;\u5f88\u9002\u5408\u89c2\u5bdf\u5e76\u53d1\u4e71\u5e8f&#xff0c;\u4f46\u4e0d\u9002\u5408\u5236\u4f5c\u6e05\u6670\u7684\u6620\u5c04\u8868\u3002<\/p>\n<p>\u672c\u7a0b\u5e8f\u8ba9\u6bcf\u4e2a GPU \u7ebf\u7a0b\u628a\u81ea\u5df1\u7684\u4fe1\u606f\u5199\u5165\u6570\u7ec4&#xff0c;\u7136\u540e\u590d\u5236\u56de CPU&#xff0c;\u7531 CPU \u6309\u5168\u5c40\u7f16\u53f7\u987a\u5e8f\u6253\u5370\u3002\u8fd9\u6837&#xff1a;<\/p>\n<ul>\n<li>GPU \u4ecd\u7136\u8d1f\u8d23\u751f\u6210\u6bcf\u4e2a\u7ebf\u7a0b\u7684\u8bb0\u5f55&#xff1b;<\/li>\n<li>\u8f93\u51fa\u987a\u5e8f\u7a33\u5b9a&#xff1b;<\/li>\n<li>\u66f4\u5bb9\u6613\u6bd4\u8f83\u4e24\u4e2a Block&#xff1b;<\/li>\n<li>\u987a\u4fbf\u9884\u4e60 cudaMalloc\u3001cudaMemcpy \u548c cudaFree\u3002<\/li>\n<\/ul>\n<p>\u8fd9\u4e9b\u5185\u5b58 API \u4f1a\u5728\u7b2c\u4e09\u7bc7\u7cfb\u7edf\u8bb2\u89e3&#xff0c;\u672c\u7bc7\u53ea\u9700\u8981\u7406\u89e3\u201cGPU \u5199&#xff0c;CPU \u53d6\u56de\u5e76\u6253\u5370\u201d\u3002<\/p>\n<h4>10.3 \u5b8c\u6574\u4ee3\u7801<\/h4>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cuda_runtime.h&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cstdio&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cstdlib&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name function\">CUDA_CHECK<\/span><span class=\"token expression\"><span class=\"token punctuation\">(<\/span>call<span class=\"token punctuation\">)<\/span>                                                     <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n    <span class=\"token expression\"><span class=\"token keyword\">do<\/span> <span class=\"token punctuation\">{<\/span>                                                                     <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n        <span class=\"token expression\"><span class=\"token keyword\">const<\/span> cudaError_t error__ <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>call<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>                                  <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n        <span class=\"token expression\"><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>error__ <span class=\"token operator\">!&#061;<\/span> cudaSuccess<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>                                        <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n            <span class=\"token expression\">std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">fprintf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token constant\">stderr<\/span><span class=\"token punctuation\">,<\/span> <\/span><span class=\"token string\">&#034;CUDA error at %s:%d: %s\\\\n&#034;<\/span><span class=\"token expression\"><span class=\"token punctuation\">,<\/span>                <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n                         <span class=\"token expression\"><span class=\"token constant\">__FILE__<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token constant\">__LINE__<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">cudaGetErrorString<\/span><span class=\"token punctuation\">(<\/span>error__<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>    <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n            <span class=\"token expression\"><span class=\"token keyword\">return<\/span> EXIT_FAILURE<span class=\"token punctuation\">;<\/span>                                             <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n        <span class=\"token expression\"><span class=\"token punctuation\">}<\/span>                                                                    <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n    <span class=\"token expression\"><span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><\/span><\/span><\/p>\n<p><span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">ThreadInfo<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> block<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> thread<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> global<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> warp_in_block<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> lane<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">unsigned<\/span> <span class=\"token keyword\">int<\/span> sm<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>__device__ __forceinline__ <span class=\"token keyword\">unsigned<\/span> <span class=\"token keyword\">int<\/span> <span class=\"token function\">read_smid<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">unsigned<\/span> <span class=\"token keyword\">int<\/span> sm<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">asm<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;mov.u32 %0, %smid;&#034;<\/span> <span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;&#061;r&#034;<\/span><span class=\"token punctuation\">(<\/span>sm<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> sm<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>__global__ <span class=\"token keyword\">void<\/span> <span class=\"token function\">collect_thread_info<\/span><span class=\"token punctuation\">(<\/span>ThreadInfo<span class=\"token operator\">*<\/span> info<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">const<\/span> <span class=\"token keyword\">int<\/span> global <span class=\"token operator\">&#061;<\/span><br \/>\n        <span class=\"token generic-function\"><span class=\"token function\">static_cast<\/span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">int<\/span><span class=\"token operator\">&gt;<\/span><\/span><\/span><span class=\"token punctuation\">(<\/span>blockIdx<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">*<\/span> blockDim<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">&#043;<\/span> threadIdx<span class=\"token punctuation\">.<\/span>x<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    info<span class=\"token punctuation\">[<\/span>global<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>block <span class=\"token operator\">&#061;<\/span> <span class=\"token generic-function\"><span class=\"token function\">static_cast<\/span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">int<\/span><span class=\"token operator\">&gt;<\/span><\/span><\/span><span class=\"token punctuation\">(<\/span>blockIdx<span class=\"token punctuation\">.<\/span>x<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    info<span class=\"token punctuation\">[<\/span>global<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>thread <span class=\"token operator\">&#061;<\/span> <span class=\"token generic-function\"><span class=\"token function\">static_cast<\/span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">int<\/span><span class=\"token operator\">&gt;<\/span><\/span><\/span><span class=\"token punctuation\">(<\/span>threadIdx<span class=\"token punctuation\">.<\/span>x<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    info<span class=\"token punctuation\">[<\/span>global<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>global <span class=\"token operator\">&#061;<\/span> global<span class=\"token punctuation\">;<\/span><br \/>\n    info<span class=\"token punctuation\">[<\/span>global<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>warp_in_block <span class=\"token operator\">&#061;<\/span><br \/>\n        <span class=\"token generic-function\"><span class=\"token function\">static_cast<\/span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">int<\/span><span class=\"token operator\">&gt;<\/span><\/span><\/span><span class=\"token punctuation\">(<\/span>threadIdx<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">\/<\/span> warpSize<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    info<span class=\"token punctuation\">[<\/span>global<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>lane <span class=\"token operator\">&#061;<\/span><br \/>\n        <span class=\"token generic-function\"><span class=\"token function\">static_cast<\/span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">int<\/span><span class=\"token operator\">&gt;<\/span><\/span><\/span><span class=\"token punctuation\">(<\/span>threadIdx<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">%<\/span> warpSize<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    info<span class=\"token punctuation\">[<\/span>global<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>sm <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">read_smid<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">int<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">constexpr<\/span> <span class=\"token keyword\">int<\/span> grid_size <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">constexpr<\/span> <span class=\"token keyword\">int<\/span> block_size <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">40<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">constexpr<\/span> <span class=\"token keyword\">int<\/span> total_threads <span class=\"token operator\">&#061;<\/span> grid_size <span class=\"token operator\">*<\/span> block_size<span class=\"token punctuation\">;<\/span><\/p>\n<p>    ThreadInfo<span class=\"token operator\">*<\/span> device_info <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">CUDA_CHECK<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">cudaMalloc<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token operator\">&amp;<\/span>device_info<span class=\"token punctuation\">,<\/span> total_threads <span class=\"token operator\">*<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>ThreadInfo<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    collect_thread_info<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token operator\">&lt;<\/span>grid_size<span class=\"token punctuation\">,<\/span> block_size<span class=\"token operator\">&gt;&gt;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span>device_info<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">CUDA_CHECK<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">cudaGetLastError<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">CUDA_CHECK<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">cudaDeviceSynchronize<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    ThreadInfo host_info<span class=\"token punctuation\">[<\/span>total_threads<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">CUDA_CHECK<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">cudaMemcpy<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        host_info<span class=\"token punctuation\">,<\/span><br \/>\n        device_info<span class=\"token punctuation\">,<\/span><br \/>\n        total_threads <span class=\"token operator\">*<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>ThreadInfo<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        cudaMemcpyDeviceToHost<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Configuration: grid&#061;%d, block&#061;%d, total&#061;%d\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                grid_size<span class=\"token punctuation\">,<\/span> block_size<span class=\"token punctuation\">,<\/span> total_threads<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Each block has ceil(40 \/ 32) &#061; 2 warps.\\\\n\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034; block thread global warp_in_block lane sm\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034; &#8212;&#8211; &#8212;&#8212; &#8212;&#8212; &#8212;&#8212;&#8212;&#8212;- &#8212;- &#8211;\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> ThreadInfo<span class=\"token operator\">&amp;<\/span> item <span class=\"token operator\">:<\/span> host_info<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034; %5d %6d %6d %13d %4d %2u\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    item<span class=\"token punctuation\">.<\/span>block<span class=\"token punctuation\">,<\/span><br \/>\n                    item<span class=\"token punctuation\">.<\/span>thread<span class=\"token punctuation\">,<\/span><br \/>\n                    item<span class=\"token punctuation\">.<\/span>global<span class=\"token punctuation\">,<\/span><br \/>\n                    item<span class=\"token punctuation\">.<\/span>warp_in_block<span class=\"token punctuation\">,<\/span><br \/>\n                    item<span class=\"token punctuation\">.<\/span>lane<span class=\"token punctuation\">,<\/span><br \/>\n                    item<span class=\"token punctuation\">.<\/span>sm<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token function\">CUDA_CHECK<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">cudaFree<\/span><span class=\"token punctuation\">(<\/span>device_info<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token string\">&#034;\\\\nImportant: warp numbering restarts in every block. &#034;<\/span><br \/>\n        <span class=\"token string\">&#034;The SM id is diagnostic only; never rely on it &#034;<\/span><br \/>\n        <span class=\"token string\">&#034;for program correctness.\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> EXIT_SUCCESS<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>10.4 \u7f16\u8bd1\u8fd0\u884c<\/h4>\n<p>\u76f4\u63a5\u4f7f\u7528 NVCC&#xff1a;<\/p>\n<p>nvcc <span class=\"token operator\">&#8211;<\/span>std&#061;c&#043;<span class=\"token operator\">&#043;<\/span>14 thread_warp_mapping<span class=\"token punctuation\">.<\/span>cu <span class=\"token operator\">&#8211;<\/span>o thread_warp_mapping<span class=\"token punctuation\">.<\/span>exe<br \/>\n<span class=\"token punctuation\">.<\/span>\\\\thread_warp_mapping<span class=\"token punctuation\">.<\/span>exe<\/p>\n<p>Linux&#xff1a;<\/p>\n<p>nvcc <span class=\"token parameter variable\">-std<\/span><span class=\"token operator\">&#061;<\/span>c&#043;&#043;14 thread_warp_mapping.cu <span class=\"token parameter variable\">-o<\/span> thread_warp_mapping<br \/>\n.\/thread_warp_mapping<\/p>\n<p>CMake \u5728\u4e00\u6b21\u6784\u5efa\u4e2d\u4f1a\u751f\u6210\u4e09\u4e2a\u7a0b\u5e8f&#xff1a;<\/p>\n<p>cmake <span class=\"token operator\">&#8211;<\/span>S <span class=\"token punctuation\">.<\/span> <span class=\"token operator\">&#8211;<\/span>B build <span class=\"token operator\">&#8211;<\/span>G <span class=\"token string\">&#034;Visual Studio 17 2022&#034;<\/span> <span class=\"token operator\">&#8211;<\/span>A x64 <span class=\"token operator\">&#8211;<\/span>DCMAKE_CUDA_ARCHITECTURES&#061;75<br \/>\ncmake <span class=\"token operator\">&#8212;<\/span>build build <span class=\"token operator\">&#8212;<\/span>config Release<br \/>\n<span class=\"token punctuation\">.<\/span>\\\\build\\\\Release\\\\thread_warp_mapping<span class=\"token punctuation\">.<\/span>exe<\/p>\n<h4>10.5 \u5148\u770b Block 0 \u7684\u5173\u952e\u8fb9\u754c<\/h4>\n<p>\u8f93\u51fa\u524d\u534a\u90e8\u5206\u4f1a\u7c7b\u4f3c&#xff1a;<\/p>\n<p> block thread global warp_in_block lane sm<br \/>\n &#8212;&#8211; &#8212;&#8212; &#8212;&#8212; &#8212;&#8212;&#8212;&#8212;- &#8212;- &#8212;<br \/>\n     0      0      0             0    0  0<br \/>\n     0      1      1             0    1  0<br \/>\n     &#8230;<br \/>\n     0     30     30             0   30  0<br \/>\n     0     31     31             0   31  0<br \/>\n     0     32     32             1    0  0<br \/>\n     0     33     33             1    1  0<br \/>\n     &#8230;<br \/>\n     0     39     39             1    7  0<\/p>\n<p>\u89c2\u5bdf&#xff1a;<\/p>\n<ul>\n<li>Thread 31 \u662f Warp 0 \u7684 Lane 31&#xff1b;<\/li>\n<li>Thread 32 \u8fdb\u5165 Warp 1&#xff0c;\u5e76\u4ece Lane 0 \u5f00\u59cb&#xff1b;<\/li>\n<li>Thread 39 \u662f Warp 1 \u7684 Lane 7&#xff1b;<\/li>\n<li>\u8fd9\u4e2a Block \u7684 Warp 1 \u6ca1\u6709 Lane 8&#xff5e;31 \u5bf9\u5e94\u7684\u7ebf\u7a0b\u3002<\/li>\n<\/ul>\n<h4>10.6 \u518d\u770b Block 1<\/h4>\n<p>\u672c\u673a\u8f93\u51fa\u7684\u672b\u5c3e\u662f&#xff1a;<\/p>\n<p>     1     30     70             0   30  2<br \/>\n     1     31     71             0   31  2<br \/>\n     1     32     72             1    0  2<br \/>\n     1     33     73             1    1  2<br \/>\n     1     34     74             1    2  2<br \/>\n     1     35     75             1    3  2<br \/>\n     1     36     76             1    4  2<br \/>\n     1     37     77             1    5  2<br \/>\n     1     38     78             1    6  2<br \/>\n     1     39     79             1    7  2<\/p>\n<p>Block 1 \u7684 Thread 0 \u867d\u7136\u5168\u5c40\u7f16\u53f7\u662f 40&#xff0c;\u4f46\u5b83\u4ecd\u7136\u662f\u672c Block \u7684 Warp 0\u3001Lane 0\u3002<\/p>\n<p>\u8fd9\u63ed\u793a\u4e86\u4e00\u4e2a\u5e38\u89c1\u9519\u8bef\u3002\u4e0b\u9762\u7684 Warp \u8ba1\u7b97\u4e0d\u6b63\u786e&#xff1a;<\/p>\n<p><span class=\"token keyword\">int<\/span> wrong_warp <span class=\"token operator\">&#061;<\/span> global_index <span class=\"token operator\">\/<\/span> warpSize<span class=\"token punctuation\">;<\/span><\/p>\n<p>\u5b83\u628a Warp \u5f53\u6210\u53ef\u4ee5\u8de8 Block \u8fde\u7eed\u7f16\u53f7\u3002CUDA \u4e2d Block \u624d\u662f Warp \u5212\u5206\u7684\u8fb9\u754c\u3002\u5bf9\u4e8e\u4e00\u7ef4 Block&#xff0c;\u5e94\u4f7f\u7528 Block \u5185\u7ebf\u7a0b\u7f16\u53f7&#xff1a;<\/p>\n<p><span class=\"token keyword\">int<\/span> warp_in_block <span class=\"token operator\">&#061;<\/span> threadIdx<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">\/<\/span> warpSize<span class=\"token punctuation\">;<\/span><\/p>\n<h4>10.7 \u4e3a\u4ec0\u4e48\u4e24\u4e2a Block \u7684 SM \u7f16\u53f7\u53ef\u80fd\u4e0d\u540c<\/h4>\n<p>\u672c\u673a\u4e00\u6b21\u8fd0\u884c\u4e2d&#xff1a;<\/p>\n<ul>\n<li>Block 0 \u8bb0\u5f55\u5230 SM 0&#xff1b;<\/li>\n<li>Block 1 \u8bb0\u5f55\u5230 SM 2\u3002<\/li>\n<\/ul>\n<p>\u4f60\u7684\u673a\u5668\u53ef\u80fd\u51fa\u73b0&#xff1a;<\/p>\n<ul>\n<li>\u4e24\u4e2a Block \u5728\u540c\u4e00\u4e2a SM&#xff1b;<\/li>\n<li>\u4e24\u4e2a Block \u5728\u4e0d\u540c SM&#xff1b;<\/li>\n<li>\u591a\u6b21\u8fd0\u884c\u770b\u5230\u4e0d\u540c SM \u7f16\u53f7\u3002<\/li>\n<\/ul>\n<p>\u8fd9\u4e9b\u90fd\u53ef\u80fd\u6b63\u5e38\u3002%smid \u662f PTX \u7279\u6b8a\u5bc4\u5b58\u5668&#xff0c;\u9002\u5408\u8bca\u65ad\u4e0e\u91c7\u6837&#xff0c;\u4e0d\u5e94\u8fdb\u5165\u7a0b\u5e8f\u6b63\u786e\u6027\u903b\u8f91\u3002\u5b98\u65b9 PTX ISA Special Registers \u5bf9 %smid \u7684\u5b9a\u4f4d\u4e5f\u662f\u8bca\u65ad\u548c\u5206\u6790\u7528\u9014&#xff0c;\u5e76\u63d0\u9192\u8be5\u503c\u5177\u6709\u6613\u53d8\u6027\u3002<\/p>\n<p>\u4ee3\u7801\u4e2d&#xff1a;<\/p>\n<p><span class=\"token keyword\">asm<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;mov.u32 %0, %smid;&#034;<\/span> <span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;&#061;r&#034;<\/span><span class=\"token punctuation\">(<\/span>sm<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u4f7f\u7528\u5185\u8054 PTX \u8bfb\u53d6\u5b83\u3002\u8fd9\u4e00\u884c\u4e0d\u662f\u521d\u5b66\u8005\u65e5\u5e38 Kernel \u5fc5\u9700\u5199\u6cd5&#xff0c;\u53ea\u662f\u4e3a\u4e86\u8ba9\u201cBlock \u88ab\u5206\u914d\u5230 SM\u201d\u53d8\u6210\u53ef\u89c2\u5bdf\u4e8b\u5b9e\u3002<\/p>\n<h4>10.8 \u4ece\u8f93\u51fa\u80fd\u8bc1\u660e\u4ec0\u4e48&#xff0c;\u4e0d\u80fd\u8bc1\u660e\u4ec0\u4e48<\/h4>\n<p>\u80fd\u591f\u8bc1\u660e&#xff1a;<\/p>\n<ul>\n<li>\u7ebf\u7a0b\u5168\u5c40\u7f16\u53f7\u5982\u4f55\u8ba1\u7b97&#xff1b;<\/li>\n<li>Warp \u7f16\u53f7\u5728 Block \u5185\u5982\u4f55\u5212\u5206&#xff1b;<\/li>\n<li>Lane \u5982\u4f55\u5728 Warp \u5185\u4ece 0 \u5f00\u59cb&#xff1b;<\/li>\n<li>\u4e00\u4e2a Block \u7684\u7ebf\u7a0b\u91c7\u6837\u5230\u540c\u4e00\u4e2a SM&#xff1b;<\/li>\n<li>\u4e0d\u540c Block \u53ef\u80fd\u88ab\u8c03\u5ea6\u5230\u4e0d\u540c SM\u3002<\/li>\n<\/ul>\n<p>\u4e0d\u80fd\u8bc1\u660e&#xff1a;<\/p>\n<ul>\n<li>Block \u6c38\u8fdc\u56fa\u5b9a\u5728\u67d0\u4e2a SM&#xff1b;<\/li>\n<li>SM \u7f16\u53f7\u8fde\u7eed\u7b49\u4ef7\u4e8e\u7269\u7406\u7a7a\u95f4\u987a\u5e8f&#xff1b;<\/li>\n<li>\u4e24\u4e2a Block \u540c\u65f6\u6267\u884c&#xff1b;<\/li>\n<li>\u6bcf\u4e2a Lane \u5bf9\u5e94\u4e00\u9897\u56fa\u5b9a\u7269\u7406\u6838\u5fc3&#xff1b;<\/li>\n<li>\u5f53\u524d\u8f93\u51fa\u5c31\u662f\u6240\u6709\u67b6\u6784\u7684\u5e95\u5c42\u65f6\u5e8f\u3002<\/li>\n<\/ul>\n<p>\u4e00\u4e2a\u5b9e\u9a8c\u7684\u4ef7\u503c\u4e0d\u4ec5\u662f\u770b\u5230\u4ec0\u4e48&#xff0c;\u8fd8\u8981\u77e5\u9053\u8bc1\u636e\u8fb9\u754c\u5728\u54ea\u91cc\u3002<\/p>\n<hr \/>\n<h3>\u5341\u4e00\u3001\u5b9e\u6218\u4e09&#xff1a;\u628a Warp \u7684 32 \u4e2a Lane \u53d8\u6210\u4e00\u4e2a\u63a9\u7801<\/h3>\n<h4>11.1 \u4e3a\u4ec0\u4e48\u9700\u8981 Warp \u6295\u7968<\/h4>\n<p>\u4ec5\u4ec5\u6253\u5370 lane \u4ecd\u7136\u5bb9\u6613\u628a Warp \u5f53\u4f5c\u4e00\u4e2a\u62bd\u8c61\u540d\u8bcd\u3002CUDA \u63d0\u4f9b Warp Vote Functions&#xff0c;\u8ba9 Warp \u4e2d\u7ebf\u7a0b\u5171\u540c\u5bf9\u6761\u4ef6\u8fdb\u884c\u6295\u7968\u3002<\/p>\n<p>\u672c\u7bc7\u4f7f\u7528&#xff1a;<\/p>\n<p><span class=\"token keyword\">unsigned<\/span> <span class=\"token keyword\">int<\/span> <span class=\"token function\">__ballot_sync<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">unsigned<\/span> <span class=\"token keyword\">int<\/span> mask<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> predicate<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u76f4\u89c2\u7406\u89e3&#xff1a;<\/p>\n<ul>\n<li>\u6bcf\u4e2a\u53c2\u4e0e Lane \u63d0\u4f9b\u4e00\u4e2a\u771f\u5047\u6761\u4ef6&#xff1b;<\/li>\n<li>\u8fd4\u56de 32 \u4f4d\u65e0\u7b26\u53f7\u6574\u6570&#xff1b;<\/li>\n<li>\u7b2c n \u4f4d\u5bf9\u5e94 Lane n&#xff1b;<\/li>\n<li>\u6761\u4ef6\u4e3a\u771f\u4e14 Lane \u53c2\u4e0e\u65f6&#xff0c;\u5bf9\u5e94\u4f4d\u4e3a 1&#xff1b;<\/li>\n<li>\u6761\u4ef6\u4e3a\u5047\u65f6&#xff0c;\u5bf9\u5e94\u4f4d\u4e3a 0\u3002<\/li>\n<\/ul>\n<h4>11.2 \u5b8c\u6574\u4ee3\u7801<\/h4>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cuda_runtime.h&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cstdio&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cstdlib&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name function\">CUDA_CHECK<\/span><span class=\"token expression\"><span class=\"token punctuation\">(<\/span>call<span class=\"token punctuation\">)<\/span>                                                     <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n    <span class=\"token expression\"><span class=\"token keyword\">do<\/span> <span class=\"token punctuation\">{<\/span>                                                                     <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n        <span class=\"token expression\"><span class=\"token keyword\">const<\/span> cudaError_t error__ <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>call<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>                                  <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n        <span class=\"token expression\"><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>error__ <span class=\"token operator\">!&#061;<\/span> cudaSuccess<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>                                        <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n            <span class=\"token expression\">std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">fprintf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token constant\">stderr<\/span><span class=\"token punctuation\">,<\/span> <\/span><span class=\"token string\">&#034;CUDA error at %s:%d: %s\\\\n&#034;<\/span><span class=\"token expression\"><span class=\"token punctuation\">,<\/span>                <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n                         <span class=\"token expression\"><span class=\"token constant\">__FILE__<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token constant\">__LINE__<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">cudaGetErrorString<\/span><span class=\"token punctuation\">(<\/span>error__<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>    <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n            <span class=\"token expression\"><span class=\"token keyword\">return<\/span> EXIT_FAILURE<span class=\"token punctuation\">;<\/span>                                             <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n        <span class=\"token expression\"><span class=\"token punctuation\">}<\/span>                                                                    <\/span><span class=\"token punctuation\">\\\\<\/span><br \/>\n    <span class=\"token expression\"><span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><\/span><\/span><\/p>\n<p><span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">WarpResult<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">unsigned<\/span> <span class=\"token keyword\">int<\/span> active_mask<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">unsigned<\/span> <span class=\"token keyword\">int<\/span> even_mask<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">unsigned<\/span> <span class=\"token keyword\">int<\/span> odd_mask<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> even_count<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> odd_count<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> values<span class=\"token punctuation\">[<\/span><span class=\"token number\">32<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>__global__ <span class=\"token keyword\">void<\/span> <span class=\"token function\">inspect_warp<\/span><span class=\"token punctuation\">(<\/span>WarpResult<span class=\"token operator\">*<\/span> result<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">const<\/span> <span class=\"token keyword\">int<\/span> lane <span class=\"token operator\">&#061;<\/span> <span class=\"token generic-function\"><span class=\"token function\">static_cast<\/span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">int<\/span><span class=\"token operator\">&gt;<\/span><\/span><\/span><span class=\"token punctuation\">(<\/span>threadIdx<span class=\"token punctuation\">.<\/span>x<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">const<\/span> <span class=\"token keyword\">unsigned<\/span> <span class=\"token keyword\">int<\/span> active <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">__activemask<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">const<\/span> <span class=\"token keyword\">bool<\/span> is_even <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>lane <span class=\"token operator\">%<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">const<\/span> <span class=\"token keyword\">unsigned<\/span> <span class=\"token keyword\">int<\/span> even_mask <span class=\"token operator\">&#061;<\/span><br \/>\n        <span class=\"token function\">__ballot_sync<\/span><span class=\"token punctuation\">(<\/span>active<span class=\"token punctuation\">,<\/span> is_even<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">const<\/span> <span class=\"token keyword\">unsigned<\/span> <span class=\"token keyword\">int<\/span> odd_mask <span class=\"token operator\">&#061;<\/span><br \/>\n        <span class=\"token function\">__ballot_sync<\/span><span class=\"token punctuation\">(<\/span>active<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">!<\/span>is_even<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>is_even<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        result<span class=\"token operator\">-&gt;<\/span>values<span class=\"token punctuation\">[<\/span>lane<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">100<\/span> <span class=\"token operator\">&#043;<\/span> lane<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        result<span class=\"token operator\">-&gt;<\/span>values<span class=\"token punctuation\">[<\/span>lane<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">200<\/span> <span class=\"token operator\">&#043;<\/span> lane<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>lane <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        result<span class=\"token operator\">-&gt;<\/span>active_mask <span class=\"token operator\">&#061;<\/span> active<span class=\"token punctuation\">;<\/span><br \/>\n        result<span class=\"token operator\">-&gt;<\/span>even_mask <span class=\"token operator\">&#061;<\/span> even_mask<span class=\"token punctuation\">;<\/span><br \/>\n        result<span class=\"token operator\">-&gt;<\/span>odd_mask <span class=\"token operator\">&#061;<\/span> odd_mask<span class=\"token punctuation\">;<\/span><br \/>\n        result<span class=\"token operator\">-&gt;<\/span>even_count <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">__popc<\/span><span class=\"token punctuation\">(<\/span>even_mask<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        result<span class=\"token operator\">-&gt;<\/span>odd_count <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">__popc<\/span><span class=\"token punctuation\">(<\/span>odd_mask<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">int<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    WarpResult<span class=\"token operator\">*<\/span> device_result <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">CUDA_CHECK<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">cudaMalloc<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>device_result<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>WarpResult<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">CUDA_CHECK<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">cudaMemset<\/span><span class=\"token punctuation\">(<\/span>device_result<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>WarpResult<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    inspect_warp<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">32<\/span><span class=\"token operator\">&gt;&gt;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span>device_result<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">CUDA_CHECK<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">cudaGetLastError<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">CUDA_CHECK<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">cudaDeviceSynchronize<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    WarpResult host_result<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">CUDA_CHECK<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">cudaMemcpy<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token operator\">&amp;<\/span>host_result<span class=\"token punctuation\">,<\/span><br \/>\n        device_result<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>WarpResult<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        cudaMemcpyDeviceToHost<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;active mask : 0x%08x\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span> host_result<span class=\"token punctuation\">.<\/span>active_mask<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;even mask   : 0x%08x, active lanes &#061; %d\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                host_result<span class=\"token punctuation\">.<\/span>even_mask<span class=\"token punctuation\">,<\/span><br \/>\n                host_result<span class=\"token punctuation\">.<\/span>even_count<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;odd mask    : 0x%08x, active lanes &#061; %d\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                host_result<span class=\"token punctuation\">.<\/span>odd_mask<span class=\"token punctuation\">,<\/span><br \/>\n                host_result<span class=\"token punctuation\">.<\/span>odd_count<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\nValues after the branch:\\\\n&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> lane <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> lane <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">32<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>lane<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><br \/>\n            <span class=\"token string\">&#034;lane %2d -&gt; %d%s&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            lane<span class=\"token punctuation\">,<\/span><br \/>\n            host_result<span class=\"token punctuation\">.<\/span>values<span class=\"token punctuation\">[<\/span>lane<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token punctuation\">(<\/span>lane <span class=\"token operator\">%<\/span> <span class=\"token number\">4<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">?<\/span> <span class=\"token string\">&#034;\\\\n&#034;<\/span> <span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;    &#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token function\">CUDA_CHECK<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">cudaFree<\/span><span class=\"token punctuation\">(<\/span>device_result<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">const<\/span> <span class=\"token keyword\">bool<\/span> ok <span class=\"token operator\">&#061;<\/span><br \/>\n        host_result<span class=\"token punctuation\">.<\/span>active_mask <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0xffffffffu<\/span> <span class=\"token operator\">&amp;&amp;<\/span><br \/>\n        host_result<span class=\"token punctuation\">.<\/span>even_mask <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0x55555555u<\/span> <span class=\"token operator\">&amp;&amp;<\/span><br \/>\n        host_result<span class=\"token punctuation\">.<\/span>odd_mask <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0xaaaaaaaau<\/span> <span class=\"token operator\">&amp;&amp;<\/span><br \/>\n        host_result<span class=\"token punctuation\">.<\/span>even_count <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">16<\/span> <span class=\"token operator\">&amp;&amp;<\/span><br \/>\n        host_result<span class=\"token punctuation\">.<\/span>odd_count <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">16<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token string\">&#034;\\\\nVerification: %s\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        ok <span class=\"token operator\">?<\/span> <span class=\"token string\">&#034;PASSED&#034;<\/span> <span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;FAILED&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> ok <span class=\"token operator\">?<\/span> EXIT_SUCCESS <span class=\"token operator\">:<\/span> EXIT_FAILURE<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h4>11.3 \u7f16\u8bd1\u8fd0\u884c<\/h4>\n<p>nvcc <span class=\"token operator\">&#8211;<\/span>std&#061;c&#043;<span class=\"token operator\">&#043;<\/span>14 warp_vote_demo<span class=\"token punctuation\">.<\/span>cu <span class=\"token operator\">&#8211;<\/span>o warp_vote_demo<span class=\"token punctuation\">.<\/span>exe<br \/>\n<span class=\"token punctuation\">.<\/span>\\\\warp_vote_demo<span class=\"token punctuation\">.<\/span>exe<\/p>\n<p>Linux&#xff1a;<\/p>\n<p>nvcc <span class=\"token parameter variable\">-std<\/span><span class=\"token operator\">&#061;<\/span>c&#043;&#043;14 warp_vote_demo.cu <span class=\"token parameter variable\">-o<\/span> warp_vote_demo<br \/>\n.\/warp_vote_demo<\/p>\n<h4>11.4 \u672c\u673a\u5b9e\u6d4b\u7ed3\u679c<\/h4>\n<p>active mask : 0xffffffff<br \/>\neven mask   : 0x55555555, active lanes &#061; 16<br \/>\nodd mask    : 0xaaaaaaaa, active lanes &#061; 16<\/p>\n<p>Values after the branch:<br \/>\nlane  0 -&gt; 100    lane  1 -&gt; 201    lane  2 -&gt; 102    lane  3 -&gt; 203<br \/>\nlane  4 -&gt; 104    lane  5 -&gt; 205    lane  6 -&gt; 106    lane  7 -&gt; 207<br \/>\nlane  8 -&gt; 108    lane  9 -&gt; 209    lane 10 -&gt; 110    lane 11 -&gt; 211<br \/>\nlane 12 -&gt; 112    lane 13 -&gt; 213    lane 14 -&gt; 114    lane 15 -&gt; 215<br \/>\nlane 16 -&gt; 116    lane 17 -&gt; 217    lane 18 -&gt; 118    lane 19 -&gt; 219<br \/>\nlane 20 -&gt; 120    lane 21 -&gt; 221    lane 22 -&gt; 122    lane 23 -&gt; 223<br \/>\nlane 24 -&gt; 124    lane 25 -&gt; 225    lane 26 -&gt; 126    lane 27 -&gt; 227<br \/>\nlane 28 -&gt; 128    lane 29 -&gt; 229    lane 30 -&gt; 130    lane 31 -&gt; 231<\/p>\n<p>Verification: PASSED<\/p>\n<h4>11.5 \u5982\u4f55\u8bfb 0xffffffff<\/h4>\n<p>\u4e00\u4e2a\u5341\u516d\u8fdb\u5236\u6570\u5b57\u8868\u793a 4 \u4e2a\u4e8c\u8fdb\u5236\u4f4d\u30028 \u4e2a\u5341\u516d\u8fdb\u5236\u6570\u5b57\u8868\u793a 32 \u4f4d\u3002<\/p>\n<p>0xffffffff<br \/>\n&#061; 11111111111111111111111111111111<\/p>\n<p>32 \u4f4d\u5168\u90e8\u4e3a 1&#xff0c;\u8868\u793a 32 \u4e2a Lane \u5728\u8c03\u7528 __activemask() \u65f6\u90fd\u5904\u4e8e\u6d3b\u52a8\u72b6\u6001\u3002<\/p>\n<h4>11.6 \u5982\u4f55\u8bfb 0x55555555<\/h4>\n<p>\u5341\u516d\u8fdb\u5236 5 \u5bf9\u5e94\u4e8c\u8fdb\u5236&#xff1a;<\/p>\n<p>5 &#061; 0101<\/p>\n<p>\u4ece\u6700\u4f4e\u4f4d Lane 0 \u5f00\u59cb\u770b&#xff0c;0x55555555 \u7684\u7b2c 0\u30012\u30014\u2026\u202630 \u4f4d\u662f 1&#xff0c;\u6070\u597d\u5bf9\u5e94\u5076\u6570 Lane\u3002<\/p>\n<p>Lane:  &#8230; 7 6 5 4 3 2 1 0<br \/>\nMask:  &#8230; 0 1 0 1 0 1 0 1<\/p>\n<p>\u56e0\u4e3a\u6253\u5370\u4e8c\u8fdb\u5236\u65f6\u9ad8\u4f4d\u5728\u5de6\u3001\u4f4e\u4f4d\u5728\u53f3&#xff0c;\u7b2c\u4e00\u6b21\u9605\u8bfb\u63a9\u7801\u5f88\u5bb9\u6613\u628a\u65b9\u5411\u770b\u53cd\u3002\u53ea\u8981\u8bb0\u4f4f\u6700\u4f4e\u6709\u6548\u4f4d\u5bf9\u5e94 Lane 0\u3002<\/p>\n<h4>11.7 \u5982\u4f55\u8bfb 0xaaaaaaaa<\/h4>\n<p>\u5341\u516d\u8fdb\u5236 A \u5bf9\u5e94\u4e8c\u8fdb\u5236&#xff1a;<\/p>\n<p>A &#061; 1010<\/p>\n<p>\u56e0\u6b64 0xaaaaaaaa \u7684\u7b2c 1\u30013\u30015\u2026\u202631 \u4f4d\u4e3a 1&#xff0c;\u5bf9\u5e94\u5947\u6570 Lane\u3002<\/p>\n<p>\u5076\u6570\u63a9\u7801\u548c\u5947\u6570\u63a9\u7801\u6ee1\u8db3&#xff1a;<\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>          M<\/p>\n<p>          e<\/p>\n<p>         \u2223<\/p>\n<p>          M<\/p>\n<p>          o<\/p>\n<p>         &#061;<\/p>\n<p>          M<\/p>\n<p>          a<\/p>\n<p>         M_e \\\\mathbin{|} M_o &#061; M_a <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 1em;vertical-align: -0.25em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">M<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">e<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\"><span class=\"mord\">\u2223<\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">M<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">o<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">M<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">a<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u5176\u4e2d <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         M<\/p>\n<p>         e<\/p>\n<p>       M_e<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">M<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">e<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u662f\u5076\u6570\u63a9\u7801&#xff0c;<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         M<\/p>\n<p>         o<\/p>\n<p>       M_o<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">M<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">o<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u662f\u5947\u6570\u63a9\u7801&#xff0c;<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         M<\/p>\n<p>         a<\/p>\n<p>       M_a<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">M<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">a<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u662f\u5168\u90e8\u6d3b\u52a8 Lane \u63a9\u7801&#xff0c;\u7ad6\u7ebf\u8868\u793a\u6309\u4f4d\u6216\u3002<\/p>\n<p>\u5e76\u4e14&#xff1a;<\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>          M<\/p>\n<p>          e<\/p>\n<p>         &amp;<\/p>\n<p>          M<\/p>\n<p>          o<\/p>\n<p>         &#061;<\/p>\n<p>         0<\/p>\n<p>         M_e \\\\mathbin{\\\\&amp;} M_o &#061; 0 <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8444em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">M<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">e<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\"><span class=\"mord\">&amp;<\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">M<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">o<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6444em\"><\/span><span class=\"mord\">0<\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u8868\u793a\u4e24\u7ec4\u6ca1\u6709\u91cd\u53e0 Lane\u3002<\/p>\n<h4>11.8 __popc \u505a\u4ec0\u4e48<\/h4>\n<p>__popc \u7edf\u8ba1 32 \u4f4d\u6574\u6570\u4e2d 1 \u7684\u6570\u91cf&#xff1a;<\/p>\n<p>result<span class=\"token operator\">-&gt;<\/span>even_count <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">__popc<\/span><span class=\"token punctuation\">(<\/span>even_mask<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u5076\u6570 Lane \u548c\u5947\u6570 Lane \u5404 16 \u4e2a&#xff0c;\u6240\u4ee5\u7ed3\u679c\u90fd\u662f 16\u3002<\/p>\n<p>\u8fd9\u7c7b Warp \u539f\u8bed\u5728\u540e\u7eed\u53ef\u4ee5\u7528\u4e8e&#xff1a;<\/p>\n<ul>\n<li>Warp \u5185\u6761\u4ef6\u7edf\u8ba1&#xff1b;<\/li>\n<li>\u5feb\u901f\u5224\u65ad\u662f\u5426\u6709\u7ebf\u7a0b\u6ee1\u8db3\u6761\u4ef6&#xff1b;<\/li>\n<li>\u6784\u5efa\u7d27\u51d1\u7d22\u5f15&#xff1b;<\/li>\n<li>Warp \u7ea7\u5f52\u7ea6\u4e0e\u534f\u4f5c&#xff1b;<\/li>\n<li>\u590d\u6742\u5e76\u884c\u7b97\u6cd5\u4e2d\u7684\u6d3b\u52a8\u7ebf\u7a0b\u7ba1\u7406\u3002<\/li>\n<\/ul>\n<h4>11.9 \u4e3a\u4ec0\u4e48\u6295\u7968\u653e\u5728\u5206\u652f\u524d<\/h4>\n<p>\u793a\u4f8b\u5148\u8ba9\u6240\u6709\u6d3b\u52a8 Lane \u8c03\u7528&#xff1a;<\/p>\n<p><span class=\"token function\">__ballot_sync<\/span><span class=\"token punctuation\">(<\/span>active<span class=\"token punctuation\">,<\/span> is_even<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token function\">__ballot_sync<\/span><span class=\"token punctuation\">(<\/span>active<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">!<\/span>is_even<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u7136\u540e\u624d\u8fdb\u5165\u5076\u6570\/\u5947\u6570\u5206\u652f\u3002<\/p>\n<p>\u53c2\u4e0e _sync Warp \u539f\u8bed\u7684\u7ebf\u7a0b\u4e0e\u63a9\u7801\u5fc5\u987b\u6ee1\u8db3\u63a5\u53e3\u8981\u6c42\u3002\u4e0d\u80fd\u968f\u610f\u8ba9\u63a9\u7801\u58f0\u660e\u7684\u67d0\u4e9b\u7ebf\u7a0b\u4e0d\u8c03\u7528\u5bf9\u5e94\u539f\u8bed&#xff0c;\u5426\u5219\u7ed3\u679c\u53ef\u80fd\u672a\u5b9a\u4e49\u3002<\/p>\n<p>NVIDIA \u5b98\u65b9 Warp Vote Functions \u5bf9 __all_sync\u3001__any_sync\u3001__ballot_sync \u548c __activemask \u6709\u5b8c\u6574\u8bed\u4e49\u8bf4\u660e\u3002\u73b0\u9636\u6bb5\u8bf7\u4f18\u5148\u4f7f\u7528\u5e26 _sync \u7684\u73b0\u4ee3\u63a5\u53e3&#xff0c;\u4e0d\u8981\u7167\u6284\u65e9\u671f\u6559\u7a0b\u4e2d\u7684\u65e7 __ballot\u3002<\/p>\n<hr \/>\n<h3>\u5341\u4e8c\u3001\u628a\u4e09\u4e2a\u5b9e\u9a8c\u4e32\u8d77\u6765&#xff1a;CUDA \u7a0b\u5e8f\u7a76\u7adf\u600e\u6837\u6267\u884c<\/h3>\n<p>\u73b0\u5728\u628a\u4ece CPU \u542f\u52a8\u5230 GPU \u6267\u884c\u7684\u8fc7\u7a0b\u4e32\u6210\u4e00\u6761\u94fe\u3002<\/p>\n<p>  #mermaid-svg-TT1bsLgFBmnLcruT{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-TT1bsLgFBmnLcruT .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-TT1bsLgFBmnLcruT .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-TT1bsLgFBmnLcruT .error-icon{fill:#552222;}#mermaid-svg-TT1bsLgFBmnLcruT .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-TT1bsLgFBmnLcruT .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-TT1bsLgFBmnLcruT .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-TT1bsLgFBmnLcruT .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-TT1bsLgFBmnLcruT .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-TT1bsLgFBmnLcruT .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-TT1bsLgFBmnLcruT .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-TT1bsLgFBmnLcruT .marker{fill:#333333;stroke:#333333;}#mermaid-svg-TT1bsLgFBmnLcruT .marker.cross{stroke:#333333;}#mermaid-svg-TT1bsLgFBmnLcruT svg{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-TT1bsLgFBmnLcruT p{margin:0;}#mermaid-svg-TT1bsLgFBmnLcruT .label{font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;color:#333;}#mermaid-svg-TT1bsLgFBmnLcruT .cluster-label text{fill:#333;}#mermaid-svg-TT1bsLgFBmnLcruT .cluster-label span{color:#333;}#mermaid-svg-TT1bsLgFBmnLcruT .cluster-label span p{background-color:transparent;}#mermaid-svg-TT1bsLgFBmnLcruT .label text,#mermaid-svg-TT1bsLgFBmnLcruT span{fill:#333;color:#333;}#mermaid-svg-TT1bsLgFBmnLcruT .node rect,#mermaid-svg-TT1bsLgFBmnLcruT .node circle,#mermaid-svg-TT1bsLgFBmnLcruT .node ellipse,#mermaid-svg-TT1bsLgFBmnLcruT .node polygon,#mermaid-svg-TT1bsLgFBmnLcruT .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-TT1bsLgFBmnLcruT .rough-node .label text,#mermaid-svg-TT1bsLgFBmnLcruT .node .label text,#mermaid-svg-TT1bsLgFBmnLcruT .image-shape .label,#mermaid-svg-TT1bsLgFBmnLcruT .icon-shape .label{text-anchor:middle;}#mermaid-svg-TT1bsLgFBmnLcruT .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-TT1bsLgFBmnLcruT .rough-node .label,#mermaid-svg-TT1bsLgFBmnLcruT .node .label,#mermaid-svg-TT1bsLgFBmnLcruT .image-shape .label,#mermaid-svg-TT1bsLgFBmnLcruT .icon-shape .label{text-align:center;}#mermaid-svg-TT1bsLgFBmnLcruT .node.clickable{cursor:pointer;}#mermaid-svg-TT1bsLgFBmnLcruT .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-TT1bsLgFBmnLcruT .arrowheadPath{fill:#333333;}#mermaid-svg-TT1bsLgFBmnLcruT .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-TT1bsLgFBmnLcruT .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-TT1bsLgFBmnLcruT .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TT1bsLgFBmnLcruT .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-TT1bsLgFBmnLcruT .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TT1bsLgFBmnLcruT .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-TT1bsLgFBmnLcruT .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-TT1bsLgFBmnLcruT .cluster text{fill:#333;}#mermaid-svg-TT1bsLgFBmnLcruT .cluster span{color:#333;}#mermaid-svg-TT1bsLgFBmnLcruT div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-TT1bsLgFBmnLcruT .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-TT1bsLgFBmnLcruT rect.text{fill:none;stroke-width:0;}#mermaid-svg-TT1bsLgFBmnLcruT .icon-shape,#mermaid-svg-TT1bsLgFBmnLcruT .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TT1bsLgFBmnLcruT .icon-shape p,#mermaid-svg-TT1bsLgFBmnLcruT .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-TT1bsLgFBmnLcruT .icon-shape .label rect,#mermaid-svg-TT1bsLgFBmnLcruT .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TT1bsLgFBmnLcruT .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-TT1bsLgFBmnLcruT .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-TT1bsLgFBmnLcruT :root{&#8211;mermaid-font-family:\\&#8221;trebuchet ms\\&#8221;,verdana,arial,sans-serif;}<\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"edgeLabel\"><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>CPU \u51c6\u5907\u6570\u636e\u4e0e\u542f\u52a8\u914d\u7f6e<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u53d1\u8d77 Kernel Grid<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>Grid \u62c6\u5206\u4e3a\u591a\u4e2a Block<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>Block \u52a8\u6001\u5206\u914d\u5230\u53ef\u7528 SM<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u6bcf\u4e2a Block \u5212\u5206\u4e3a\u591a\u4e2a Warp<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>Warp \u4e2d 32 \u4e2a Lane \u4ee5 SIMT \u6a21\u578b\u63a8\u8fdb<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>\u7ebf\u7a0b\u6309\u5168\u5c40\u7d22\u5f15\u5904\u7406\u5404\u81ea\u6570\u636e<\/p>\n<p><\/span><\/p>\n<p>         <span class=\"nodeLabel\"><\/p>\n<p>CPU \u540c\u6b65\u5e76\u53d6\u5f97\u7ed3\u679c<\/p>\n<p><\/span><\/p>\n<h4>12.1 \u7a0b\u5e8f\u5458\u51b3\u5b9a\u7684\u5185\u5bb9<\/h4>\n<ul>\n<li>Grid \u7ef4\u5ea6&#xff1b;<\/li>\n<li>Block \u7ef4\u5ea6&#xff1b;<\/li>\n<li>Kernel \u4ee3\u7801&#xff1b;<\/li>\n<li>\u6bcf\u4e2a\u7ebf\u7a0b\u5982\u4f55\u6839\u636e\u7d22\u5f15\u9009\u62e9\u6570\u636e&#xff1b;<\/li>\n<li>\u4f7f\u7528\u591a\u5c11 Shared Memory&#xff1b;<\/li>\n<li>\u662f\u5426\u540c\u6b65&#xff1b;<\/li>\n<li>\u6570\u636e\u5982\u4f55\u4f20\u8f93&#xff1b;<\/li>\n<li>\u7f16\u8bd1\u76ee\u6807\u67b6\u6784\u3002<\/li>\n<\/ul>\n<h4>12.2 Runtime \u4e0e\u786c\u4ef6\u8d1f\u8d23\u7684\u5185\u5bb9<\/h4>\n<ul>\n<li>Block \u5177\u4f53\u8c03\u5ea6\u5230\u54ea\u4e2a SM&#xff1b;<\/li>\n<li>Block \u6267\u884c\u7684\u5148\u540e\u987a\u5e8f&#xff1b;<\/li>\n<li>\u4ec0\u4e48\u65f6\u5019\u9009\u62e9\u54ea\u4e2a\u5c31\u7eea Warp&#xff1b;<\/li>\n<li>\u5b9e\u9645\u6307\u4ee4\u5982\u4f55\u6620\u5c04\u5230\u67b6\u6784\u8d44\u6e90&#xff1b;<\/li>\n<li>\u7f13\u5b58\u547d\u4e2d\u548c\u52a8\u6001\u786c\u4ef6\u72b6\u6001&#xff1b;<\/li>\n<li>\u5728\u7b26\u5408 CUDA \u8bed\u4e49\u7684\u524d\u63d0\u4e0b\u5b8c\u6210\u5e95\u5c42\u5b9e\u73b0\u3002<\/li>\n<\/ul>\n<h4>12.3 \u6b63\u786e\u7684\u5173\u6ce8\u8fb9\u754c<\/h4>\n<p>\u7a0b\u5e8f\u5458\u5e94\u8be5\u7406\u89e3 Warp&#xff0c;\u56e0\u4e3a\u5b83\u5f71\u54cd&#xff1a;<\/p>\n<ul>\n<li>\u5206\u652f\u5206\u6b67&#xff1b;<\/li>\n<li>\u8fde\u7eed\u7ebf\u7a0b\u5982\u4f55\u8bbf\u95ee\u5185\u5b58&#xff1b;<\/li>\n<li>Warp \u7ea7\u539f\u8bed&#xff1b;<\/li>\n<li>Block \u5927\u5c0f\u9009\u62e9&#xff1b;<\/li>\n<li>\u8d44\u6e90\u5229\u7528\u3002<\/li>\n<\/ul>\n<p>\u4f46\u4e0d\u5e94\u8be5\u4f9d\u8d56\u6ca1\u6709\u88ab\u7f16\u7a0b\u6a21\u578b\u4fdd\u8bc1\u7684\u5076\u7136\u65f6\u5e8f&#xff0c;\u4f8b\u5982&#xff1a;<\/p>\n<ul>\n<li>\u8ba4\u4e3a Block 0 \u5fc5\u7136\u6700\u5148\u5b8c\u6210&#xff1b;<\/li>\n<li>\u8ba4\u4e3a\u76f8\u90bb Block \u5fc5\u7136\u5728\u76f8\u90bb SM&#xff1b;<\/li>\n<li>\u8ba4\u4e3a\u540c\u4e00\u4e2a Block \u6bcf\u6b21\u90fd\u5728\u540c\u4e00 SM&#xff1b;<\/li>\n<li>\u8ba4\u4e3a\u4e00\u6b21\u89c2\u5bdf\u5230\u7684\u8f93\u51fa\u987a\u5e8f\u6c38\u8fdc\u4e0d\u53d8&#xff1b;<\/li>\n<li>\u8ba4\u4e3a Lane 0 \u6c38\u8fdc\u5bf9\u5e94\u67d0\u9897\u56fa\u5b9a\u7269\u7406\u6838\u5fc3\u3002<\/li>\n<\/ul>\n<p>\u7406\u89e3\u786c\u4ef6&#xff0c;\u662f\u4e3a\u4e86\u5199\u51fa\u7b26\u5408\u6a21\u578b\u3001\u5bb9\u6613\u4f18\u5316\u7684\u4ee3\u7801&#xff0c;\u4e0d\u662f\u4e3a\u4e86\u628a\u5076\u7136\u5b9e\u73b0\u7ec6\u8282\u53d8\u6210\u8106\u5f31\u4f9d\u8d56\u3002<\/p>\n<hr \/>\n<h3>\u5341\u4e09\u3001Block \u5927\u5c0f\u5230\u5e95\u600e\u4e48\u9009<\/h3>\n<p>\u8fd9\u662f\u8bfb\u8005\u5b8c\u6210\u672c\u7bc7\u540e\u6700\u5e0c\u671b\u89e3\u51b3\u7684\u5b9e\u9645\u95ee\u9898\u4e4b\u4e00\u3002<\/p>\n<h4>13.1 \u5165\u95e8\u9636\u6bb5\u7684\u53ef\u6267\u884c\u5efa\u8bae<\/h4>\n<p>\u5bf9\u4e8e\u7b80\u5355\u7684\u4e00\u7ef4\u9010\u5143\u7d20 Kernel&#xff1a;<\/p>\n<li>\u5148\u5c1d\u8bd5 128 \u6216 256 \u4e2a\u7ebf\u7a0b\u6bcf Block&#xff1b;<\/li>\n<li>\u786e\u4fdd\u662f Warp \u5927\u5c0f 32 \u7684\u6574\u6570\u500d&#xff1b;<\/li>\n<li>\u4f7f\u7528\u5411\u4e0a\u53d6\u6574\u8ba1\u7b97 Block \u6570&#xff1b;<\/li>\n<li>Kernel \u5185\u505a\u8fb9\u754c\u5224\u65ad&#xff1b;<\/li>\n<li>\u786e\u4fdd\u4e0d\u8d85\u8fc7\u8bbe\u5907\u4e0a\u9650&#xff1b;<\/li>\n<li>\u5728\u6570\u636e\u89c4\u6a21\u8db3\u591f\u5927\u65f6\u6d4b\u91cf 128\u3001256\u3001512 \u7b49\u5019\u9009\u503c&#xff1b;<\/li>\n<li>\u4e0d\u8981\u53ea\u8dd1\u4e00\u6b21&#xff0c;\u7528\u9884\u70ed\u548c\u591a\u8f6e\u7edf\u8ba1&#xff1b;<\/li>\n<li>\u4f7f\u7528 Nsight Compute \u67e5\u770b\u539f\u56e0&#xff0c;\u800c\u4e0d\u53ea\u770b\u603b\u65f6\u95f4\u3002<\/li>\n<p>\u793a\u4f8b&#xff1a;<\/p>\n<p><span class=\"token keyword\">constexpr<\/span> <span class=\"token keyword\">int<\/span> threads <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">256<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">const<\/span> <span class=\"token keyword\">int<\/span> blocks <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>N <span class=\"token operator\">&#043;<\/span> threads <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/<\/span> threads<span class=\"token punctuation\">;<\/span><br \/>\nkernel<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token operator\">&lt;<\/span>blocks<span class=\"token punctuation\">,<\/span> threads<span class=\"token operator\">&gt;&gt;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">,<\/span> N<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<h4>13.2 \u4e3a\u4ec0\u4e48\u4e0d\u662f\u201c\u7ebf\u7a0b\u8d8a\u591a\u8d8a\u5feb\u201d<\/h4>\n<p>\u5982\u679c\u6bcf\u4e2a Block \u7ebf\u7a0b\u8fc7\u591a&#xff0c;\u53ef\u80fd&#xff1a;<\/p>\n<ul>\n<li>\u5355\u4e2a Block \u5360\u636e\u592a\u591a\u5bc4\u5b58\u5668&#xff1b;<\/li>\n<li>\u5355\u4e2a Block \u9700\u8981\u592a\u591a Shared Memory&#xff1b;<\/li>\n<li>SM \u540c\u65f6\u53ef\u9a7b\u7559 Block \u6570\u4e0b\u964d&#xff1b;<\/li>\n<li>\u53ef\u8c03\u5ea6 Warp \u6570\u53d7\u9650&#xff1b;<\/li>\n<li>Kernel \u56e0\u8d44\u6e90\u8d85\u9650\u65e0\u6cd5\u542f\u52a8\u3002<\/li>\n<\/ul>\n<p>\u5982\u679c\u6bcf\u4e2a Block \u7ebf\u7a0b\u8fc7\u5c11&#xff0c;\u53ef\u80fd&#xff1a;<\/p>\n<ul>\n<li>\u5f62\u6210\u5927\u91cf\u4e0d\u5b8c\u6574 Warp&#xff1b;<\/li>\n<li>\u6bcf\u4e2a Block \u7684\u56fa\u5b9a\u7ba1\u7406\u6210\u672c\u5360\u6bd4\u63d0\u9ad8&#xff1b;<\/li>\n<li>\u65e0\u6cd5\u63d0\u4f9b\u8db3\u591f\u5e76\u884c\u5ea6&#xff1b;<\/li>\n<li>\u96be\u4ee5\u8986\u76d6\u5185\u5b58\u7b49\u5f85&#xff1b;<\/li>\n<li>\u5bf9\u540e\u7eed Shared Memory \u534f\u4f5c\u4e0d\u65b9\u4fbf\u3002<\/li>\n<\/ul>\n<p>\u6240\u4ee5 Block \u5927\u5c0f\u662f\u8d44\u6e90\u4e0e\u95ee\u9898\u7ed3\u6784\u7684\u6298\u4e2d\u3002<\/p>\n<h4>13.3 Occupancy \u8d8a\u9ad8\u8d8a\u597d\u5417<\/h4>\n<p>Occupancy \u5e38\u7528\u4e8e\u63cf\u8ff0 SM \u4e0a\u6d3b\u52a8 Warp \u6570\u76f8\u5bf9\u4e8e\u786c\u4ef6\u4e0a\u9650\u7684\u6bd4\u4f8b\u3002\u7b80\u5316\u8868\u8fbe&#xff1a;<\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         O<\/p>\n<p>         &#061;<\/p>\n<p>          W<\/p>\n<p>          a<\/p>\n<p>         \/<\/p>\n<p>          W<\/p>\n<p>          m<\/p>\n<p>         O &#061; W_a \/ W_m <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.6833em\"><\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0278em\">O<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 1em;vertical-align: -0.25em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">W<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1389em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">a<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mord\">\/<\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">W<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1389em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">m<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u5176\u4e2d <span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         W<\/p>\n<p>         a<\/p>\n<p>       W_a<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">W<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1389em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">a<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u662f\u6d3b\u52a8 Warp \u6570&#xff0c;<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>         W<\/p>\n<p>         m<\/p>\n<p>       W_m<\/p>\n<p>    <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.1389em\">W<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.1514em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.1389em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\">m<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span> \u662f\u8bbe\u5907\u5141\u8bb8\u7684\u6700\u5927\u6d3b\u52a8 Warp \u6570\u3002<\/p>\n<p>\u9ad8 Occupancy \u6709\u52a9\u4e8e\u63d0\u4f9b\u66f4\u591a\u53ef\u5207\u6362 Warp&#xff0c;\u4f46\u4e0d\u662f\u6027\u80fd\u7684\u552f\u4e00\u76ee\u6807\u3002\u67d0\u4e9b Kernel \u5373\u4f7f Occupancy \u6ca1\u6709\u8fbe\u5230\u6700\u9ad8&#xff0c;\u4e5f\u53ef\u80fd\u56e0\u4e3a&#xff1a;<\/p>\n<ul>\n<li>\u6bcf\u4e2a\u7ebf\u7a0b\u62e5\u6709\u66f4\u591a\u5bc4\u5b58\u5668&#xff1b;<\/li>\n<li>\u6570\u636e\u590d\u7528\u66f4\u597d&#xff1b;<\/li>\n<li>\u6307\u4ee4\u7ea7\u5e76\u884c\u66f4\u9ad8&#xff1b;<\/li>\n<li>\u5185\u5b58\u8bbf\u95ee\u66f4\u6709\u6548&#xff1b;<\/li>\n<li>\u8ba1\u7b97\u541e\u5410\u5df2\u7ecf\u9971\u548c&#xff1b;<\/li>\n<\/ul>\n<p>\u800c\u83b7\u5f97\u66f4\u597d\u6027\u80fd\u3002<\/p>\n<p>\u6b63\u786e\u8bf4\u6cd5\u662f&#xff1a;<\/p>\n<p>Occupancy \u592a\u4f4e\u53ef\u80fd\u63d0\u793a\u5e76\u884c\u8d44\u6e90\u4e0d\u8db3&#xff0c;\u4f46 Occupancy \u6700\u9ad8\u4e0d\u4fdd\u8bc1 Kernel \u6700\u5feb\u3002<\/p>\n<h4>13.4 \u7528\u6d4b\u91cf\u4ee3\u66ff\u731c\u6d4b<\/h4>\n<p>\u4e00\u4e2a\u53ef\u9760\u5b9e\u9a8c\u81f3\u5c11\u5e94\u8be5&#xff1a;<\/p>\n<ul>\n<li>\u4f7f\u7528\u8db3\u591f\u5927\u7684\u6570\u636e&#xff1b;<\/li>\n<li>\u9884\u70ed GPU&#xff1b;<\/li>\n<li>\u591a\u6b21\u8fd0\u884c&#xff1b;<\/li>\n<li>\u4f7f\u7528 CUDA Event \u8ba1\u65f6&#xff1b;<\/li>\n<li>\u5206\u5f00\u6570\u636e\u4f20\u8f93\u4e0e Kernel \u65f6\u95f4&#xff1b;<\/li>\n<li>\u68c0\u67e5\u7ed3\u679c\u6b63\u786e&#xff1b;<\/li>\n<li>\u56fa\u5b9a\u6216\u8bb0\u5f55\u73af\u5883&#xff1b;<\/li>\n<li>\u6bd4\u8f83\u591a\u4e2a Block \u5019\u9009\u503c\u3002<\/li>\n<\/ul>\n<p>\u8fd9\u4e9b\u5185\u5bb9\u4f1a\u5728\u6027\u80fd\u6d4b\u91cf\u4e13\u9898\u4e2d\u5199\u6210\u5b8c\u6574\u7a0b\u5e8f\u3002\u672c\u7bc7\u53ea\u5efa\u7acb\u9009\u62e9 Block \u5927\u5c0f\u7684\u7b2c\u4e00\u5c42\u4f9d\u636e\u3002<\/p>\n<hr \/>\n<h3>\u5341\u56db\u3001\u5341\u4e94\u4e2a\u5e38\u89c1\u8bef\u533a&#xff0c;\u4e00\u6b21\u7ea0\u6b63<\/h3>\n<h4>\u8bef\u533a 1&#xff1a;\u4e00\u4e2a CUDA Thread \u5bf9\u5e94\u4e00\u9897 CUDA Core<\/h4>\n<p>\u9519\u8bef\u3002Thread \u662f\u903b\u8f91\u6267\u884c\u5b9e\u4f8b&#xff0c;\u786c\u4ef6\u5206\u6279\u8c03\u5ea6\u5927\u91cf\u7ebf\u7a0b\u5e76\u590d\u7528\u6267\u884c\u8d44\u6e90\u3002<\/p>\n<h4>\u8bef\u533a 2&#xff1a;Block \u5c31\u662f SM<\/h4>\n<p>\u9519\u8bef\u3002Block \u662f\u8f6f\u4ef6\u5de5\u4f5c\u7ec4&#xff0c;SM \u662f\u786c\u4ef6\u6267\u884c\u8d44\u6e90\u3002Block \u4f1a\u88ab\u8c03\u5ea6\u5230 SM\u3002<\/p>\n<h4>\u8bef\u533a 3&#xff1a;\u4e00\u4e2a SM \u4e00\u6b21\u53ea\u80fd\u6267\u884c\u4e00\u4e2a Block<\/h4>\n<p>\u9519\u8bef\u3002\u8d44\u6e90\u5141\u8bb8\u65f6&#xff0c;\u4e00\u4e2a SM \u53ef\u4ee5\u540c\u65f6\u9a7b\u7559\u591a\u4e2a Block\u3002<\/p>\n<h4>\u8bef\u533a 4&#xff1a;\u4e00\u4e2a Block \u53ef\u4ee5\u62c6\u5230\u591a\u4e2a SM \u4e0a<\/h4>\n<p>\u666e\u901a CUDA \u6267\u884c\u6a21\u578b\u4e2d&#xff0c;\u4e00\u4e2a Block \u7684\u7ebf\u7a0b\u5728\u4e00\u4e2a SM \u4e0a\u6267\u884c&#xff0c;\u4e0d\u8de8\u591a\u4e2a SM\u3002<\/p>\n<h4>\u8bef\u533a 5&#xff1a;Block 0 \u5fc5\u987b\u5148\u4e8e Block 1 \u6267\u884c<\/h4>\n<p>\u9519\u8bef\u3002\u666e\u901a Kernel \u4e0d\u4fdd\u8bc1 Block \u8c03\u5ea6\u987a\u5e8f\u3002<\/p>\n<h4>\u8bef\u533a 6&#xff1a;\u5168\u5c40\u7ebf\u7a0b\u7f16\u53f7\u9664\u4ee5 32 \u5c31\u662f\u6b63\u786e Warp \u7f16\u53f7<\/h4>\n<p>\u5982\u679c\u60f3\u6c42 Block \u5185 Warp \u7f16\u53f7&#xff0c;\u8fd9\u79cd\u5199\u6cd5\u5728 Block \u5927\u5c0f\u4e0d\u662f 32 \u6574\u6570\u500d\u65f6\u4f1a\u8de8 Block \u6df7\u6dc6\u3002Warp \u5212\u5206\u4ece\u6bcf\u4e2a Block \u91cd\u65b0\u5f00\u59cb\u3002<\/p>\n<h4>\u8bef\u533a 7&#xff1a;Block \u5927\u5c0f\u4e0d\u662f 32 \u7684\u500d\u6570&#xff0c;Kernel \u5c31\u4e0d\u80fd\u8fd0\u884c<\/h4>\n<p>\u901a\u5e38\u4ecd\u53ef\u8fd0\u884c&#xff0c;\u4f46\u6700\u540e\u4e00\u4e2a Warp \u53ef\u80fd\u4e0d\u5b8c\u6574&#xff0c;\u5b58\u5728\u5229\u7528\u7387\u635f\u5931\u3002<\/p>\n<h4>\u8bef\u533a 8&#xff1a;\u6240\u6709\u5206\u652f\u90fd\u4f1a\u9020\u6210 Warp \u5206\u6b67<\/h4>\n<p>\u53ea\u6709\u540c\u4e00 Warp \u5185 Lane \u9009\u62e9\u4e0d\u540c\u8def\u5f84\u65f6\u624d\u5f62\u6210\u8be5\u610f\u4e49\u4e0a\u7684\u5206\u6b67\u3002Warp \u5185\u6761\u4ef6\u4e00\u81f4\u7684\u5206\u652f\u4e0d\u4ea7\u751f Lane \u8def\u5f84\u5206\u88c2\u3002<\/p>\n<h4>\u8bef\u533a 9&#xff1a;\u770b\u5230 if \u5c31\u5e94\u8be5\u5220\u9664<\/h4>\n<p>\u9519\u8bef\u3002\u8fb9\u754c\u5224\u65ad\u4fdd\u8bc1\u5185\u5b58\u5b89\u5168\u3002\u4f18\u5316\u4e0d\u80fd\u4ee5\u8d8a\u754c\u548c\u9519\u8bef\u7ed3\u679c\u4e3a\u4ee3\u4ef7\u3002<\/p>\n<h4>\u8bef\u533a 10&#xff1a;\u8ba1\u7b97\u80fd\u529b 8.6 \u8868\u793a CUDA 8.6<\/h4>\n<p>\u9519\u8bef\u3002\u524d\u8005\u662f GPU \u67b6\u6784\u80fd\u529b&#xff0c;\u540e\u8005\u82e5\u51fa\u73b0\u5219\u662f\u8f6f\u4ef6\u5e73\u53f0\u7248\u672c\u6982\u5ff5&#xff0c;\u4e8c\u8005\u4e0d\u540c\u3002<\/p>\n<h4>\u8bef\u533a 11&#xff1a;\u66f4\u65b0\u9a71\u52a8\u80fd\u63d0\u9ad8\u8ba1\u7b97\u80fd\u529b<\/h4>\n<p>\u9519\u8bef\u3002\u9a71\u52a8\u4e0d\u4f1a\u6539\u53d8\u786c\u4ef6\u67b6\u6784\u7248\u672c\u3002<\/p>\n<h4>\u8bef\u533a 12&#xff1a;sm_90 \u6bd4 sm_75 \u4f18\u5316\u7a0b\u5ea6\u9ad8&#xff0c;\u6240\u4ee5\u90fd\u5199 90<\/h4>\n<p>\u9519\u8bef\u3002\u5b83\u4eec\u8868\u793a\u4e0d\u540c\u67b6\u6784\u76ee\u6807\u3002\u76ee\u6807\u5fc5\u987b\u4e0e Toolkit \u652f\u6301\u8303\u56f4\u548c\u8fd0\u884c\u8bbe\u5907\u517c\u5bb9\u3002<\/p>\n<h4>\u8bef\u533a 13&#xff1a;SM \u591a\u7684 GPU \u5728\u4efb\u4f55\u7a0b\u5e8f\u4e2d\u90fd\u4e00\u5b9a\u66f4\u5feb<\/h4>\n<p>\u9519\u8bef\u3002\u8fd8\u53d6\u51b3\u4e8e\u663e\u5b58\u5e26\u5bbd\u3001\u9891\u7387\u3001\u67b6\u6784\u3001\u6570\u636e\u89c4\u6a21\u3001Kernel \u7279\u5f81\u3001\u529f\u8017\u72b6\u6001\u548c\u8f6f\u4ef6\u5b9e\u73b0\u3002<\/p>\n<h4>\u8bef\u533a 14&#xff1a;Occupancy \u8fbe\u5230 100% \u5c31\u5b8c\u6210\u4f18\u5316<\/h4>\n<p>\u9519\u8bef\u3002Occupancy \u662f\u8d44\u6e90\u548c\u5e76\u53d1\u72b6\u6001\u6307\u6807&#xff0c;\u4e0d\u662f\u6700\u7ec8\u6027\u80fd\u5206\u6570\u3002<\/p>\n<h4>\u8bef\u533a 15&#xff1a;\u8bbe\u5907\u7aef\u6253\u5370\u987a\u5e8f\u53ef\u4ee5\u8868\u793a\u771f\u5b9e\u8c03\u5ea6\u987a\u5e8f<\/h4>\n<p>\u9519\u8bef\u3002printf \u6709\u7f13\u51b2\u548c\u5e8f\u5217\u5316\u5f71\u54cd&#xff0c;\u8f93\u51fa\u5148\u540e\u4e0d\u80fd\u5b8c\u6574\u8fd8\u539f\u786c\u4ef6\u6267\u884c\u65f6\u95f4\u7ebf\u3002<\/p>\n<hr \/>\n<h3>\u5341\u4e94\u3001\u9047\u5230\u95ee\u9898\u65f6\u5982\u4f55\u5b9a\u4f4d<\/h3>\n<h4>15.1 invalid configuration argument<\/h4>\n<p>\u5e38\u89c1\u539f\u56e0&#xff1a;<\/p>\n<ul>\n<li>\u6bcf\u4e2a Block \u603b\u7ebf\u7a0b\u6570\u8d85\u8fc7 maxThreadsPerBlock&#xff1b;<\/li>\n<li>\u67d0\u4e00\u7ef4\u5ea6\u8d85\u8fc7 maxThreadsDim&#xff1b;<\/li>\n<li>Grid \u67d0\u4e00\u7ef4\u8d85\u8fc7 maxGridSize&#xff1b;<\/li>\n<li>\u4f7f\u7528\u4e86\u4e0d\u652f\u6301\u7684\u542f\u52a8\u914d\u7f6e\u3002<\/li>\n<\/ul>\n<p>\u5b9a\u4f4d\u65b9\u6cd5&#xff1a;<\/p>\n<li>\u6253\u5370 cudaDeviceProp&#xff1b;<\/li>\n<li>\u8ba1\u7b97 block.x * block.y * block.z&#xff1b;<\/li>\n<li>\u5bf9\u6bd4\u6bcf\u4e2a\u7ef4\u5ea6\u4e0a\u9650&#xff1b;<\/li>\n<li>Kernel \u542f\u52a8\u540e\u7acb\u523b\u8c03\u7528 cudaGetLastError()\u3002<\/li>\n<h4>15.2 no kernel image is available for execution on the device<\/h4>\n<p>\u5e38\u89c1\u539f\u56e0\u662f\u7f16\u8bd1\u4ea7\u7269\u6ca1\u6709\u5305\u542b\u5f53\u524d GPU \u53ef\u6267\u884c\u7684\u76ee\u6807\u4ee3\u7801\u3002\u68c0\u67e5&#xff1a;<\/p>\n<ul>\n<li>GPU \u8ba1\u7b97\u80fd\u529b&#xff1b;<\/li>\n<li>CMAKE_CUDA_ARCHITECTURES&#xff1b;<\/li>\n<li>NVCC -arch \u6216 -gencode&#xff1b;<\/li>\n<li>Toolkit \u662f\u5426\u8ba4\u8bc6\u76ee\u6807\u67b6\u6784&#xff1b;<\/li>\n<li>\u4e8c\u8fdb\u5236\u662f\u5426\u7531\u5176\u4ed6\u673a\u5668\u4ee5\u8fc7\u7a84\u67b6\u6784\u96c6\u5408\u6784\u5efa\u3002<\/li>\n<\/ul>\n<h4>15.3 invalid device function<\/h4>\n<p>\u540c\u6837\u53ef\u80fd\u4e0e\u76ee\u6807\u67b6\u6784\u4e0d\u5339\u914d\u6709\u5173&#xff0c;\u4e5f\u53ef\u80fd\u662f\u51fd\u6570\u7f16\u8bd1\u548c\u94fe\u63a5\u914d\u7f6e\u95ee\u9898\u3002\u5148\u7f29\u5c0f\u4e3a\u672c\u6587\u6700\u5c0f\u5de5\u7a0b&#xff0c;\u660e\u786e\u751f\u6210\u76ee\u6807\u3002<\/p>\n<h4>15.4 \u7a0b\u5e8f\u8f93\u51fa\u7684 SM \u7f16\u53f7\u6bcf\u6b21\u4e0d\u4e00\u6837<\/h4>\n<p>\u8fd9\u662f\u5141\u8bb8\u7684\u3002%smid \u53ea\u7528\u4e8e\u8bca\u65ad&#xff0c;\u4e0d\u8981\u628a\u67d0\u4e2a\u7f16\u53f7\u5199\u8fdb\u6b63\u786e\u6027\u5224\u65ad\u3002<\/p>\n<h4>15.5 40 \u7ebf\u7a0b\u5b9e\u9a8c\u6ca1\u6709\u51fa\u73b0 Lane 8&#xff5e;31<\/h4>\n<p>\u8fd9\u662f\u9884\u671f\u7ed3\u679c\u3002\u7b2c\u4e8c\u4e2a Warp \u5bf9\u8fd9\u4e2a Block \u53ea\u6709 8 \u4e2a\u5b9e\u9645\u7ebf\u7a0b\u3002\u7a0b\u5e8f\u53ea\u4e3a\u5b9e\u9645 CUDA Thread \u521b\u5efa\u8bb0\u5f55&#xff0c;\u4e0d\u4f1a\u4e3a\u672a\u627f\u8f7d\u7ebf\u7a0b\u7684 Lane \u521b\u5efa\u865a\u6784\u8bb0\u5f55\u3002<\/p>\n<h4>15.6 Warp \u63a9\u7801\u4e0d\u662f\u9884\u671f\u503c<\/h4>\n<p>\u5148\u786e\u8ba4\u542f\u52a8\u914d\u7f6e\u4ecd\u7136\u662f&#xff1a;<\/p>\n<p>inspect_warp<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">32<\/span><span class=\"token operator\">&gt;&gt;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span>device_result<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u518d\u786e\u8ba4&#xff1a;<\/p>\n<ul>\n<li>\u6240\u6709 32 \u4e2a\u7ebf\u7a0b\u90fd\u5230\u8fbe\u6295\u7968\u4f4d\u7f6e&#xff1b;<\/li>\n<li>__ballot_sync \u5728\u5206\u652f\u524d\u8c03\u7528&#xff1b;<\/li>\n<li>\u53c2\u4e0e\u63a9\u7801\u6765\u81ea\u540c\u4e00\u4f4d\u7f6e\u7684 __activemask()&#xff1b;<\/li>\n<li>\u6ca1\u6709\u63d0\u524d return&#xff1b;<\/li>\n<li>\u6761\u4ef6\u4ecd\u7136\u662f Lane \u5947\u5076\u3002<\/li>\n<\/ul>\n<p>\u5982\u679c\u4f60\u628a Block \u6539\u6210\u5c11\u4e8e 32 \u4e2a\u7ebf\u7a0b&#xff0c;active_mask \u672c\u6765\u5c31\u4e0d\u4f1a\u662f 0xffffffff&#xff0c;\u81ea\u52a8\u9a8c\u8bc1\u4e5f\u9700\u8981\u76f8\u5e94\u4fee\u6539\u3002<\/p>\n<h4>15.7 CMake \u914d\u7f6e\u540e\u4fee\u6539\u67b6\u6784\u6ca1\u6709\u751f\u6548<\/h4>\n<p>\u53ef\u4ee5\u663e\u5f0f\u91cd\u65b0\u914d\u7f6e&#xff1a;<\/p>\n<p>cmake <span class=\"token operator\">&#8211;<\/span>S <span class=\"token punctuation\">.<\/span> <span class=\"token operator\">&#8211;<\/span>B build <span class=\"token operator\">&#8211;<\/span>DCMAKE_CUDA_ARCHITECTURES&#061;86<br \/>\ncmake <span class=\"token operator\">&#8212;<\/span>build build <span class=\"token operator\">&#8212;<\/span>config Release<\/p>\n<p>\u5982\u679c\u751f\u6210\u5668\u6216\u7f13\u5b58\u72b6\u6001\u6df7\u4e71&#xff0c;\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u3001\u660e\u786e\u547d\u540d\u7684\u6784\u5efa\u76ee\u5f55\u901a\u5e38\u66f4\u5b89\u5168&#xff1a;<\/p>\n<p>cmake <span class=\"token operator\">&#8211;<\/span>S <span class=\"token punctuation\">.<\/span> <span class=\"token operator\">&#8211;<\/span>B build-sm86 <span class=\"token operator\">&#8211;<\/span>DCMAKE_CUDA_ARCHITECTURES&#061;86<\/p>\n<p>\u4e0d\u8981\u5728\u4e0d\u786e\u8ba4\u8def\u5f84\u7684\u60c5\u51b5\u4e0b\u9012\u5f52\u5220\u9664\u76ee\u5f55\u3002<\/p>\n<hr \/>\n<h3>\u5341\u516d\u3001\u628a\u77e5\u8bc6\u8fde\u63a5\u5230\u771f\u5b9e\u9700\u6c42<\/h3>\n<h4>16.1 \u6211\u53ea\u60f3\u7528 PyTorch&#xff0c;\u4e3a\u4ec0\u4e48\u8fd8\u8981\u61c2 SM \u548c Warp<\/h4>\n<p>\u5373\u4f7f\u4e0d\u624b\u5199\u5927\u91cf CUDA Kernel&#xff0c;\u8fd9\u4e9b\u6982\u5ff5\u4ecd\u80fd\u5e2e\u52a9\u4f60\u7406\u89e3&#xff1a;<\/p>\n<ul>\n<li>\u4e3a\u4ec0\u4e48 Batch \u592a\u5c0f\u53ef\u80fd\u65e0\u6cd5\u5145\u5206\u5229\u7528 GPU&#xff1b;<\/li>\n<li>\u4e3a\u4ec0\u4e48\u4e0d\u540c\u5f20\u91cf\u5f62\u72b6\u6027\u80fd\u5dee\u5f02\u660e\u663e&#xff1b;<\/li>\n<li>\u4e3a\u4ec0\u4e48\u67d0\u4e9b\u7b97\u5b50\u53d7\u663e\u5b58\u5e26\u5bbd\u9650\u5236&#xff1b;<\/li>\n<li>\u4e3a\u4ec0\u4e48\u5206\u652f\u548c\u4e0d\u89c4\u5219\u6570\u636e\u53ef\u80fd\u4e0d\u9002\u5408 GPU&#xff1b;<\/li>\n<li>\u4e3a\u4ec0\u4e48\u7f16\u8bd1\u6269\u5c55\u9700\u8981\u6307\u5b9a\u76ee\u6807\u67b6\u6784&#xff1b;<\/li>\n<li>\u4e3a\u4ec0\u4e48\u540c\u4e00\u6a21\u578b\u6362\u5361\u540e\u9700\u8981\u91cd\u65b0\u6d4b\u91cf\u3002<\/li>\n<\/ul>\n<p>\u4f60\u4e0d\u9700\u8981\u4e3a\u4e86\u4f7f\u7528\u6846\u67b6\u800c\u6210\u4e3a\u5fae\u67b6\u6784\u4e13\u5bb6&#xff0c;\u4f46\u6b63\u786e\u7684\u6267\u884c\u6a21\u578b\u4f1a\u8ba9\u8c03\u4f18\u548c\u6392\u9519\u66f4\u6709\u4f9d\u636e\u3002<\/p>\n<h4>16.2 \u6211\u60f3\u6bd4\u8f83\u4e24\u5f20\u663e\u5361&#xff0c;\u5e94\u8be5\u770b\u4ec0\u4e48<\/h4>\n<p>\u4e0d\u8981\u53ea\u6bd4\u8f83\u4e00\u4e2a\u6307\u6807\u3002\u81f3\u5c11\u8981\u533a\u5206&#xff1a;<\/p>\n<ul>\n<li>\u8ba1\u7b97\u80fd\u529b&#xff1a;\u529f\u80fd\u4e0e\u7f16\u8bd1\u76ee\u6807&#xff1b;<\/li>\n<li>SM \u6570\u91cf\u4e0e\u67b6\u6784&#xff1a;\u5e76\u884c\u6267\u884c\u8d44\u6e90&#xff1b;<\/li>\n<li>\u663e\u5b58\u5bb9\u91cf&#xff1a;\u80fd\u5426\u5bb9\u7eb3\u6570\u636e\u548c\u6a21\u578b&#xff1b;<\/li>\n<li>\u663e\u5b58\u5e26\u5bbd&#xff1a;\u6570\u636e\u4f9b\u7ed9\u80fd\u529b&#xff1b;<\/li>\n<li>\u5bf9\u76ee\u6807\u6570\u636e\u7c7b\u578b\u7684\u541e\u5410&#xff1a;\u4f8b\u5982 FP32\u3001FP16\u3001BF16\u3001INT8&#xff1b;<\/li>\n<li>\u529f\u8017\u4e0e\u6563\u70ed&#xff1a;\u6301\u7eed\u6027\u80fd&#xff1b;<\/li>\n<li>\u8f6f\u4ef6\u6808\u4e0e\u9a71\u52a8\u652f\u6301&#xff1b;<\/li>\n<li>\u4f60\u7684\u771f\u5b9e\u5de5\u4f5c\u8d1f\u8f7d\u6d4b\u8bd5\u3002<\/li>\n<\/ul>\n<p>\u5bf9\u4e8e\u6df1\u5ea6\u5b66\u4e60\u8bad\u7ec3&#xff0c;\u663e\u5b58\u5bb9\u91cf\u53ef\u80fd\u5148\u51b3\u5b9a\u201c\u80fd\u4e0d\u80fd\u8dd1\u201d&#xff1b;\u5bf9\u4e8e\u5e26\u5bbd\u53d7\u9650\u7684\u9010\u5143\u7d20\u64cd\u4f5c&#xff0c;\u663e\u5b58\u5e26\u5bbd\u53ef\u80fd\u6bd4\u7406\u8bba\u7b97\u529b\u66f4\u5173\u952e&#xff1b;\u5bf9\u4e8e\u590d\u6742\u81ea\u5b9a\u4e49 Kernel&#xff0c;\u4ee3\u7801\u8d28\u91cf\u53ef\u80fd\u63a9\u76d6\u786c\u4ef6\u5dee\u8ddd\u3002<\/p>\n<h4>16.3 \u6211\u53ea\u60f3\u8ba9\u7a0b\u5e8f\u5148\u8dd1\u8d77\u6765&#xff0c;Block \u5e94\u8be5\u8bbe\u591a\u5c11<\/h4>\n<p>\u4e00\u7ef4\u9010\u5143\u7d20\u4efb\u52a1\u53ef\u4ee5\u4ece 256 \u5f00\u59cb&#xff1a;<\/p>\n<p><span class=\"token keyword\">int<\/span> threads <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">256<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">int<\/span> blocks <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>N <span class=\"token operator\">&#043;<\/span> threads <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/<\/span> threads<span class=\"token punctuation\">;<\/span><br \/>\nkernel<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token operator\">&lt;<\/span>blocks<span class=\"token punctuation\">,<\/span> threads<span class=\"token operator\">&gt;&gt;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u540c\u65f6\u4fdd\u7559\u8fb9\u754c\u5224\u65ad\u3002\u786e\u8ba4\u6b63\u786e\u540e&#xff0c;\u6bd4\u8f83 128\u3001256\u3001512\u3002\u4e0d\u8981\u5728\u6ca1\u6709\u6d4b\u91cf\u65f6\u5ba3\u79f0 256 \u6c38\u8fdc\u6700\u4f73\u3002<\/p>\n<p>\u4e8c\u7ef4\u56fe\u50cf\u53ef\u4ee5\u4ece&#xff1a;<\/p>\n<p>dim3 <span class=\"token function\">block<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">16<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">16<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u5f00\u59cb\u3002\u5b83\u6709 256 \u4e2a\u7ebf\u7a0b\u548c 8 \u4e2a Warp&#xff0c;\u4e8c\u7ef4\u5750\u6807\u81ea\u7136\u3002\u4f46\u67d0\u4e9b\u5185\u5b58\u8bbf\u95ee\u6216\u7b97\u6cd5\u53ef\u80fd\u66f4\u9002\u5408 32\u00d78 \u7b49\u5f62\u72b6&#xff0c;\u4ecd\u8981\u7ed3\u5408\u8fde\u7eed\u5185\u5b58\u65b9\u5411\u548c\u6d4b\u91cf\u3002<\/p>\n<h4>16.4 \u4e3a\u4ec0\u4e48\u6211\u7684 GPU \u5229\u7528\u7387\u4e0d\u9ad8<\/h4>\n<p>\u4f4e\u5229\u7528\u7387\u53ef\u80fd\u6765\u81ea\u591a\u79cd\u539f\u56e0&#xff1a;<\/p>\n<ul>\n<li>\u6570\u636e\u89c4\u6a21\u592a\u5c0f&#xff1b;<\/li>\n<li>CPU \u6570\u636e\u51c6\u5907\u6210\u4e3a\u74f6\u9888&#xff1b;<\/li>\n<li>\u9891\u7e41\u540c\u6b65&#xff1b;<\/li>\n<li>Host \u4e0e Device \u4f20\u8f93\u8fc7\u591a&#xff1b;<\/li>\n<li>Kernel \u5f88\u77ed&#xff0c;\u542f\u52a8\u5f00\u9500\u5360\u6bd4\u9ad8&#xff1b;<\/li>\n<li>Block \u914d\u7f6e\u4e0d\u8db3\u4ee5\u63d0\u4f9b\u5e76\u884c\u5ea6&#xff1b;<\/li>\n<li>\u5bc4\u5b58\u5668\u6216 Shared Memory \u9650\u5236\u9a7b\u7559&#xff1b;<\/li>\n<li>\u5185\u5b58\u8bbf\u95ee\u4e0d\u8fde\u7eed&#xff1b;<\/li>\n<li>\u5206\u652f\u548c\u5de5\u4f5c\u91cf\u4e0d\u5747&#xff1b;<\/li>\n<li>\u7b97\u6cd5\u672c\u8eab\u4e32\u884c\u4f9d\u8d56\u5f3a&#xff1b;<\/li>\n<li>\u76d1\u63a7\u91c7\u6837\u65b9\u5f0f\u4e0d\u5408\u9002\u3002<\/li>\n<\/ul>\n<p>\u672c\u7bc7\u53ea\u80fd\u5e2e\u4f60\u6392\u9664\u7ebf\u7a0b\u5c42\u7ea7\u4e0e\u57fa\u7840\u914d\u7f6e\u95ee\u9898\u3002\u771f\u6b63\u5b9a\u4f4d\u9700\u8981\u8ba1\u65f6\u548c\u6027\u80fd\u5206\u6790\u5de5\u5177&#xff0c;\u540e\u7eed\u4f1a\u9010\u6b65\u8fdb\u5165\u3002<\/p>\n<h4>16.5 \u4e3a\u4ec0\u4e48\u6211\u6709\u5f88\u591a Block&#xff0c;\u5374\u53ea\u770b\u5230\u5c11\u91cf SM<\/h4>\n<p>Grid \u7684 Block \u6570\u4e0d\u8981\u6c42\u7b49\u4e8e SM \u6570\u3002\u5927\u91cf Block \u4f1a\u88ab\u5206\u6279\u8c03\u5ea6\u5230\u6709\u9650 SM \u4e0a\u3002\u8fd9\u6b63\u662f CUDA \u53ef\u6269\u5c55\u7f16\u7a0b\u6a21\u578b\u7684\u91cd\u8981\u4ef7\u503c&#xff1a;\u540c\u4e00\u4e2a Grid \u53ef\u4ee5\u5728 SM \u6570\u91cf\u4e0d\u540c\u7684 GPU \u4e0a\u8fd0\u884c&#xff0c;\u53ea\u662f\u5b8c\u6210\u901f\u5ea6\u548c\u8c03\u5ea6\u6279\u6b21\u4e0d\u540c\u3002<\/p>\n<hr \/>\n<h3>\u5341\u4e03\u3001\u52a8\u624b\u5b9e\u9a8c&#xff1a;\u4e0d\u8981\u53ea\u9605\u8bfb<\/h3>\n<p>\u4e0b\u9762\u7684\u5b9e\u9a8c\u6309\u96be\u5ea6\u9012\u589e\u3002\u6bcf\u4e2a\u5b9e\u9a8c\u90fd\u8981\u6c42\u5148\u5199\u9884\u6d4b&#xff0c;\u518d\u8fd0\u884c\u9a8c\u8bc1\u3002<\/p>\n<h4>\u5b9e\u9a8c 1&#xff1a;\u8bb0\u5f55\u81ea\u5df1\u7684 GPU \u8eab\u4efd\u5361<\/h4>\n<p>\u8fd0\u884c&#xff1a;<\/p>\n<p>device_query_lite<\/p>\n<p>\u5728\u5b66\u4e60\u7b14\u8bb0\u4e2d\u586b\u5199&#xff1a;<\/p>\n<p>GPU \u540d\u79f0&#xff1a;<br \/>\n\u8ba1\u7b97\u80fd\u529b&#xff1a;<br \/>\nSM \u6570\u91cf&#xff1a;<br \/>\nWarp \u5927\u5c0f&#xff1a;<br \/>\n\u6bcf Block \u6700\u5927\u7ebf\u7a0b\u6570&#xff1a;<br \/>\nGlobal Memory&#xff1a;<br \/>\n\u6bcf Block Shared Memory&#xff1a;<br \/>\n\u7f16\u8bd1\u67b6\u6784&#xff1a;<\/p>\n<p>\u5982\u679c\u6709\u591a\u5f20 GPU&#xff0c;\u4e3a\u6bcf\u5f20\u8bbe\u5907\u5404\u8bb0\u5f55\u4e00\u4efd\u3002<\/p>\n<h4>\u5b9e\u9a8c 2&#xff1a;\u628a Block \u5927\u5c0f\u6539\u6210 32<\/h4>\n<p>\u4fee\u6539&#xff1a;<\/p>\n<p><span class=\"token keyword\">constexpr<\/span> <span class=\"token keyword\">int<\/span> block_size <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">32<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u9884\u6d4b&#xff1a;<\/p>\n<ul>\n<li>\u6bcf\u4e2a Block \u6709\u51e0\u4e2a Warp&#xff1b;<\/li>\n<li>Block 1 \u7684\u5168\u5c40\u7f16\u53f7\u4ece\u591a\u5c11\u5f00\u59cb&#xff1b;<\/li>\n<li>Block 1 \u7684 Thread 0 \u662f\u54ea\u4e2a Warp\u3001\u54ea\u4e2a Lane\u3002<\/li>\n<\/ul>\n<p>\u518d\u8fd0\u884c\u786e\u8ba4\u3002<\/p>\n<h4>\u5b9e\u9a8c 3&#xff1a;\u628a Block \u5927\u5c0f\u6539\u6210 33<\/h4>\n<p>\u9884\u6d4b&#xff1a;<\/p>\n<ul>\n<li>\u6bcf\u4e2a Block \u4ecd\u7136\u9700\u8981\u51e0\u4e2a Warp&#xff1b;<\/li>\n<li>\u7b2c\u4e8c\u4e2a Warp \u6709\u51e0\u4e2a\u6709\u6548 Lane&#xff1b;<\/li>\n<li>\u4e0e 32 \u76f8\u6bd4&#xff0c;\u591a\u521b\u5efa\u4e00\u4e2a\u7ebf\u7a0b\u4e3a\u4ec0\u4e48\u9700\u8981\u591a\u4e00\u4e2a Warp \u5206\u7ec4\u3002<\/li>\n<\/ul>\n<p>\u8fd9\u4e2a\u5b9e\u9a8c\u80fd\u975e\u5e38\u76f4\u89c2\u5730\u89e3\u91ca\u201c\u5411\u4e0a\u53d6\u6574\u201d\u3002<\/p>\n<h4>\u5b9e\u9a8c 4&#xff1a;\u628a Block \u5927\u5c0f\u6539\u6210 64<\/h4>\n<p>\u6b64\u65f6\u6bcf\u4e2a Block \u5e94\u6709\u4e24\u4e2a\u5b8c\u6574 Warp\u3002\u68c0\u67e5\u8fb9\u754c&#xff1a;<\/p>\n<p>thread 31 -&gt; warp 0, lane 31<br \/>\nthread 32 -&gt; warp 1, lane 0<br \/>\nthread 63 -&gt; warp 1, lane 31<\/p>\n<h4>\u5b9e\u9a8c 5&#xff1a;\u628a Grid \u6539\u6210 100 \u4e2a Block<\/h4>\n<p>\u8f93\u51fa\u4f1a\u5f88\u591a&#xff0c;\u53ef\u4ee5\u4fee\u6539\u7a0b\u5e8f&#xff0c;\u53ea\u6253\u5370\u6bcf\u4e2a Block \u7684 Thread 0&#xff1a;<\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>item<span class=\"token punctuation\">.<\/span>thread <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u89c2\u5bdf\u591a\u5c11\u4e2a\u4e0d\u540c SM \u88ab\u91c7\u6837\u5230\u3002\u4e0d\u8981\u671f\u5f85\u6bcf\u6b21\u5b8c\u5168\u4e00\u81f4&#xff0c;\u4e5f\u4e0d\u8981\u628a\u91c7\u6837\u6570\u5f53\u4f5c\u6240\u6709 SM \u4e00\u5b9a\u540c\u65f6\u5de5\u4f5c\u7684\u8bc1\u660e\u3002<\/p>\n<h4>\u5b9e\u9a8c 6&#xff1a;\u4fee\u6539 Warp \u6295\u7968\u6761\u4ef6<\/h4>\n<p>\u628a\u5076\u6570\u6761\u4ef6\u6539\u4e3a&#xff1a;<\/p>\n<p><span class=\"token keyword\">const<\/span> <span class=\"token keyword\">bool<\/span> selected <span class=\"token operator\">&#061;<\/span> lane <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u9884\u6d4b\u63a9\u7801\u3002Lane 0&#xff5e;7 \u4e3a 1&#xff0c;\u5341\u516d\u8fdb\u5236\u7ed3\u679c\u5e94\u8be5\u662f&#xff1a;<\/p>\n<p>0x000000ff<\/p>\n<p>\u518d\u5c1d\u8bd5&#xff1a;<\/p>\n<p><span class=\"token keyword\">const<\/span> <span class=\"token keyword\">bool<\/span> selected <span class=\"token operator\">&#061;<\/span> lane <span class=\"token operator\">&gt;&#061;<\/span> <span class=\"token number\">16<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u9884\u6d4b&#xff1a;<\/p>\n<p>0xffff0000<\/p>\n<h4>\u5b9e\u9a8c 7&#xff1a;\u521b\u5efa\u534a\u4e2a Warp<\/h4>\n<p>\u628a\u542f\u52a8\u6539\u6210&#xff1a;<\/p>\n<p>inspect_warp<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">16<\/span><span class=\"token operator\">&gt;&gt;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span>device_result<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u5148\u4e0d\u8981\u8fd0\u884c&#xff0c;\u9884\u6d4b&#xff1a;<\/p>\n<ul>\n<li>active_mask&#xff1b;<\/li>\n<li>\u5076\u6570\u63a9\u7801&#xff1b;<\/li>\n<li>\u5947\u6570\u63a9\u7801&#xff1b;<\/li>\n<li>\u5404\u81ea\u7684 __popc\u3002<\/li>\n<\/ul>\n<p>\u6ce8\u610f\u8fd8\u8981\u8c03\u6574\u7ed3\u679c\u6821\u9a8c&#xff0c;\u5426\u5219\u7a0b\u5e8f\u4f1a\u6545\u610f\u62a5\u544a FAILED\u3002\u8fd9\u4e2a\u5931\u8d25\u4e0d\u662f CUDA \u51fa\u9519&#xff0c;\u800c\u662f\u6d4b\u8bd5\u671f\u671b\u4ecd\u7136\u5199\u7740 32 \u4e2a\u6d3b\u52a8\u7ebf\u7a0b\u3002<\/p>\n<h4>\u5b9e\u9a8c 8&#xff1a;\u4e8c\u7ef4 Block \u7684 Warp \u8fb9\u754c<\/h4>\n<p>\u5c06\u6620\u5c04\u7a0b\u5e8f\u6539\u6210\u4e8c\u7ef4&#xff1a;<\/p>\n<p>dim3 <span class=\"token function\">block<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">16<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">4<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\ndim3 <span class=\"token function\">grid<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u8ba1\u7b97\u7ebf\u6027\u7ebf\u7a0b\u7f16\u53f7&#xff1a;<\/p>\n<p><span class=\"token keyword\">int<\/span> local <span class=\"token operator\">&#061;<\/span> threadIdx<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">&#043;<\/span> blockDim<span class=\"token punctuation\">.<\/span>x <span class=\"token operator\">*<\/span> threadIdx<span class=\"token punctuation\">.<\/span>y<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">int<\/span> warp <span class=\"token operator\">&#061;<\/span> local <span class=\"token operator\">\/<\/span> warpSize<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">int<\/span> lane <span class=\"token operator\">&#061;<\/span> local <span class=\"token operator\">%<\/span> warpSize<span class=\"token punctuation\">;<\/span><\/p>\n<p>\u9884\u6d4b&#xff1a;<\/p>\n<ul>\n<li>y&#061;0 \u7684 16 \u4e2a\u7ebf\u7a0b\u5c5e\u4e8e\u54ea\u4e9b Lane&#xff1b;<\/li>\n<li>y&#061;1 \u7684 16 \u4e2a\u7ebf\u7a0b\u662f\u5426\u4e0e y&#061;0 \u7ec4\u6210\u540c\u4e00 Warp&#xff1b;<\/li>\n<li>y&#061;2 \u4ece\u54ea\u4e2a Warp\u3001\u54ea\u4e2a Lane \u5f00\u59cb\u3002<\/li>\n<\/ul>\n<p>\u5b8c\u6210\u8fd9\u4e2a\u5b9e\u9a8c&#xff0c;\u4f60\u5c31\u771f\u6b63\u7406\u89e3\u4e86\u201cx \u7ef4\u53d8\u5316\u6700\u5feb\u201d\u3002<\/p>\n<hr \/>\n<h3>\u5341\u516b\u3001\u81ea\u6d4b\u9898&#xff1a;\u68c0\u9a8c\u662f\u5426\u771f\u6b63\u7406\u89e3<\/h3>\n<h4>\u95ee\u9898 1<\/h4>\n<p>\u4e00\u4e2a Grid \u6709 100 \u4e2a Block&#xff0c;GPU \u6709 20 \u4e2a SM\u3002\u662f\u5426\u610f\u5473\u7740\u53ea\u6709 20 \u4e2a Block \u80fd\u8fd0\u884c&#xff0c;\u5269\u4f59 80 \u4e2a\u4f1a\u4e22\u5931&#xff1f;<\/p>\n<h4>\u95ee\u9898 2<\/h4>\n<p>\u4e00\u4e2a Block \u6709 96 \u4e2a\u7ebf\u7a0b&#xff0c;\u4f1a\u5f62\u6210\u591a\u5c11\u4e2a Warp&#xff1f;<\/p>\n<h4>\u95ee\u9898 3<\/h4>\n<p>\u4e00\u4e2a Block \u6709 100 \u4e2a\u7ebf\u7a0b&#xff0c;\u4f1a\u5f62\u6210\u591a\u5c11\u4e2a Warp&#xff1f;\u6700\u540e\u4e00\u4e2a Warp \u6709\u591a\u5c11\u4e2a\u6709\u6548\u7ebf\u7a0b&#xff1f;<\/p>\n<h4>\u95ee\u9898 4<\/h4>\n<p>Block 1 \u7684 Thread 0 \u80fd\u5426\u4e0e Block 0 \u7684\u6700\u540e\u51e0\u4e2a\u7ebf\u7a0b\u7ec4\u6210\u540c\u4e00\u4e2a Warp&#xff1f;<\/p>\n<h4>\u95ee\u9898 5<\/h4>\n<p>blockDim.x &#061;&#061; 40 \u65f6&#xff0c;threadIdx.x &#061;&#061; 37 \u7684 Warp \u7f16\u53f7\u4e0e Lane \u7f16\u53f7\u662f\u591a\u5c11&#xff1f;<\/p>\n<h4>\u95ee\u9898 6<\/h4>\n<p>\u66f4\u65b0\u663e\u5361\u9a71\u52a8\u540e&#xff0c;Compute Capability 7.5 \u4f1a\u4e0d\u4f1a\u53d8\u6210 8.0&#xff1f;<\/p>\n<h4>\u95ee\u9898 7<\/h4>\n<p>\u4e3a\u4ec0\u4e48\u4e0d\u80fd\u6839\u636e\u4e00\u6b21 %smid \u8f93\u51fa&#xff0c;\u628a Block \u6c38\u4e45\u7ed1\u5b9a\u5173\u7cfb\u5199\u8fdb\u7b97\u6cd5&#xff1f;<\/p>\n<h4>\u95ee\u9898 8<\/h4>\n<p>\u540c\u4e00 Warp \u4e2d\u6240\u6709\u7ebf\u7a0b\u90fd\u6267\u884c if (blockIdx.x &#061;&#061; 0) \u7684\u540c\u4e00\u5206\u652f&#xff0c;\u8fd9\u4e00\u5b9a\u4ea7\u751f Warp \u5206\u6b67\u5417&#xff1f;<\/p>\n<h4>\u95ee\u9898 9<\/h4>\n<p>\u4e3a\u4ec0\u4e48 dim3 block(32, 32, 2) \u53ef\u80fd\u975e\u6cd5&#xff0c;\u5373\u4f7f x\u3001y\u3001z \u5355\u72ec\u770b\u90fd\u4e0d\u5927&#xff1f;<\/p>\n<h4>\u95ee\u9898 10<\/h4>\n<p>Occupancy \u8fbe\u5230 100%&#xff0c;\u662f\u5426\u8bc1\u660e Kernel \u5df2\u7ecf\u662f\u6700\u5feb\u5b9e\u73b0&#xff1f;<\/p>\n<h4>\u53c2\u8003\u7b54\u6848<\/h4>\n<li>\u4e0d\u4f1a\u3002Block \u4f1a\u5206\u6279\u8c03\u5ea6&#xff0c;Grid \u53ef\u4ee5\u8fdc\u5927\u4e8e SM \u6570\u91cf\u3002<\/li>\n<li>3 \u4e2a\u5b8c\u6574 Warp\u3002<\/li>\n<li>4 \u4e2a Warp&#xff0c;\u6700\u540e\u4e00\u4e2a Warp \u6709 4 \u4e2a\u6709\u6548\u7ebf\u7a0b\u3002<\/li>\n<li>\u4e0d\u80fd\u3002Warp \u5728\u5404\u81ea Block \u5185\u5212\u5206\u3002<\/li>\n<li>Warp 1&#xff0c;Lane 5&#xff0c;\u56e0\u4e3a 37 \u9664\u4ee5 32 \u7684\u5546\u4e3a 1\u3001\u4f59\u6570\u4e3a 5\u3002<\/li>\n<li>\u4e0d\u4f1a\u3002\u8ba1\u7b97\u80fd\u529b\u662f\u786c\u4ef6\u67b6\u6784\u5c5e\u6027\u3002<\/li>\n<li>Block \u8c03\u5ea6\u662f\u52a8\u6001\u7684&#xff0c;%smid \u4e5f\u662f\u8bca\u65ad\u91c7\u6837\u503c&#xff0c;\u4e0d\u662f\u6b63\u786e\u6027\u63a5\u53e3\u3002<\/li>\n<li>\u4e0d\u4e00\u5b9a\u3002\u5bf9\u540c\u4e00\u4e2a Block&#xff0c;Warp \u5185\u7ebf\u7a0b\u770b\u5230\u76f8\u540c blockIdx.x&#xff0c;\u6761\u4ef6\u7ed3\u679c\u4e00\u81f4\u3002<\/li>\n<li>\u603b\u7ebf\u7a0b\u6570\u4e3a 2048&#xff0c;\u53ef\u80fd\u8d85\u8fc7\u6bcf Block \u6700\u5927\u7ebf\u7a0b\u6570\u3002<\/li>\n<li>\u4e0d\u80fd\u3002Occupancy \u53ea\u662f\u6307\u6807\u4e4b\u4e00&#xff0c;\u5fc5\u987b\u6d4b\u91cf\u771f\u5b9e\u6267\u884c\u65f6\u95f4\u548c\u74f6\u9888\u3002<\/li>\n<p>\u5982\u679c\u4f60\u80fd\u4e0d\u770b\u6b63\u6587\u56de\u7b54 8 \u9053\u4ee5\u4e0a&#xff0c;\u5c31\u5df2\u7ecf\u5efa\u7acb\u4e86\u8fdb\u5165\u6570\u636e\u5904\u7406 Kernel \u7684\u57fa\u7840\u6a21\u578b\u3002<\/p>\n<hr \/>\n<h3>\u5341\u4e5d\u3001\u672f\u8bed\u8868&#xff1a;\u4ee5\u540e\u770b\u5230\u8fd9\u4e9b\u8bcd\u4e0d\u518d\u614c<\/h3>\n<h4>Host<\/h4>\n<p>\u901a\u5e38\u6307 CPU \u7aef\u7a0b\u5e8f\u4e0e\u4e3b\u673a\u5185\u5b58\u73af\u5883\u3002\u8d1f\u8d23\u51c6\u5907\u3001\u542f\u52a8\u3001\u540c\u6b65\u548c\u7ed3\u679c\u5904\u7406\u3002<\/p>\n<h4>Device<\/h4>\n<p>CUDA \u8bed\u5883\u4e0b\u901a\u5e38\u6307 GPU \u8bbe\u5907\u53ca\u5176\u6267\u884c\u548c\u5185\u5b58\u73af\u5883\u3002<\/p>\n<h4>Kernel<\/h4>\n<p>\u7531 Host \u542f\u52a8\u3001\u5728 Device \u4e0a\u88ab\u5927\u91cf\u7ebf\u7a0b\u6267\u884c\u7684\u51fd\u6570\u3002<\/p>\n<h4>Grid<\/h4>\n<p>\u4e00\u6b21 Kernel \u542f\u52a8\u4ea7\u751f\u7684\u5168\u90e8 Block \u96c6\u5408\u3002<\/p>\n<h4>Thread Block<\/h4>\n<p>\u4e00\u7ec4\u53ef\u5728\u540c\u4e00 SM \u4e0a\u534f\u4f5c\u7684\u7ebf\u7a0b\u3002Block \u5185\u53ef\u4f7f\u7528 Shared Memory \u548c Block \u7ea7\u540c\u6b65\u3002<\/p>\n<h4>Thread<\/h4>\n<p>CUDA \u7f16\u7a0b\u6a21\u578b\u4e2d\u7684\u903b\u8f91\u6267\u884c\u5b9e\u4f8b&#xff0c;\u62e5\u6709\u81ea\u5df1\u7684\u7d22\u5f15\u548c\u72b6\u6001\u3002<\/p>\n<h4>SM<\/h4>\n<p>Streaming Multiprocessor&#xff0c;\u8d1f\u8d23\u9a7b\u7559\u3001\u8c03\u5ea6\u548c\u6267\u884c\u5927\u91cf CUDA \u7ebf\u7a0b\u7684 GPU \u786c\u4ef6\u5355\u5143\u3002<\/p>\n<h4>Warp<\/h4>\n<p>\u540c\u4e00 Block \u4e2d\u6309\u7ebf\u6027\u7ebf\u7a0b\u7f16\u53f7\u5212\u5206\u7684 32 \u7ebf\u7a0b\u7ec4&#xff0c;\u662f\u7406\u89e3\u6267\u884c\u4e0e\u6027\u80fd\u7684\u91cd\u8981\u5355\u4f4d\u3002<\/p>\n<h4>Lane<\/h4>\n<p>\u7ebf\u7a0b\u5728 Warp \u5185\u7684\u4f4d\u7f6e&#xff0c;\u901a\u5e38\u4e3a 0&#xff5e;31\u3002<\/p>\n<h4>SIMT<\/h4>\n<p>Single Instruction, Multiple Threads\u3002\u7ebf\u7a0b\u8fd0\u884c\u540c\u4e00 Kernel&#xff0c;\u4f46\u4fdd\u7559\u81ea\u5df1\u7684\u8eab\u4efd\u548c\u63a7\u5236\u6d41\u72b6\u6001\u3002<\/p>\n<h4>Warp Divergence<\/h4>\n<p>\u540c\u4e00 Warp \u7684 Lane \u8fdb\u5165\u4e0d\u540c\u63a7\u5236\u8def\u5f84&#xff0c;\u5bfc\u81f4\u786c\u4ef6\u9700\u8981\u5728\u4e0d\u540c\u6d3b\u52a8\u63a9\u7801\u4e0b\u63a8\u8fdb\u76f8\u5173\u8def\u5f84\u3002<\/p>\n<h4>Active Mask<\/h4>\n<p>\u7528\u4f4d\u96c6\u5408\u8868\u793a Warp \u4e2d\u5f53\u524d\u53c2\u4e0e\u6216\u6d3b\u52a8\u7684 Lane\u3002<\/p>\n<h4>Compute Capability<\/h4>\n<p>GPU \u786c\u4ef6\u67b6\u6784\u80fd\u529b\u7248\u672c&#xff0c;\u5199\u6210 major.minor&#xff0c;\u4f8b\u5982 7.5\u3002<\/p>\n<h4>sm_xy<\/h4>\n<p>\u5e38\u89c1\u771f\u5b9e\u67b6\u6784\u76ee\u6807\u6807\u8bb0&#xff0c;\u4f8b\u5982\u8ba1\u7b97\u80fd\u529b 7.5 \u5bf9\u5e94 sm_75\u3002<\/p>\n<h4>PTX<\/h4>\n<p>CUDA \u5de5\u5177\u94fe\u4e2d\u7684\u865a\u62df\u6307\u4ee4\u96c6\u4e0e\u4e2d\u95f4\u8868\u793a\u5c42\u4e4b\u4e00&#xff0c;\u53ef\u7531\u9a71\u52a8\u5728\u5408\u9002\u6761\u4ef6\u4e0b\u8fdb\u4e00\u6b65\u7f16\u8bd1\u3002<\/p>\n<h4>Register<\/h4>\n<p>SM \u4e0a\u7684\u91cd\u8981\u7247\u4e0a\u8d44\u6e90&#xff0c;\u901a\u5e38\u4fdd\u5b58\u7ebf\u7a0b\u5c40\u90e8\u53d8\u91cf\u3002\u6bcf\u7ebf\u7a0b\u5bc4\u5b58\u5668\u4f7f\u7528\u4f1a\u5f71\u54cd\u8d44\u6e90\u9a7b\u7559\u3002<\/p>\n<h4>Shared Memory<\/h4>\n<p>Block \u5185\u7ebf\u7a0b\u53ef\u5171\u540c\u8bbf\u95ee\u7684\u7247\u4e0a\u5185\u5b58\u7a7a\u95f4&#xff0c;\u5bb9\u91cf\u6709\u9650\u4f46\u5ef6\u8fdf\u548c\u5e26\u5bbd\u7279\u5f81\u4e0e Global Memory \u4e0d\u540c\u3002<\/p>\n<h4>Global Memory<\/h4>\n<p>GPU \u4e0a\u5bb9\u91cf\u8f83\u5927\u7684\u8bbe\u5907\u5185\u5b58\u3002\u591a\u4e2a Block \u548c Kernel \u53ef\u4ee5\u8bbf\u95ee&#xff0c;\u4f46\u8bbf\u95ee\u6a21\u5f0f\u5bf9\u6027\u80fd\u5f71\u54cd\u660e\u663e\u3002<\/p>\n<h4>Occupancy<\/h4>\n<p>\u6d3b\u52a8 Warp \u76f8\u5bf9\u786c\u4ef6\u4e0a\u9650\u7684\u6bd4\u4f8b\u6216\u76f8\u5173\u8d44\u6e90\u9a7b\u7559\u6307\u6807\u3002\u5b83\u6709\u53c2\u8003\u4ef7\u503c&#xff0c;\u4f46\u4e0d\u662f\u6700\u7ec8\u6027\u80fd\u5206\u6570\u3002<\/p>\n<h4>Coalescing<\/h4>\n<p>\u76f8\u90bb\u7ebf\u7a0b\u7684\u5185\u5b58\u8bbf\u95ee\u80fd\u591f\u4ee5\u786c\u4ef6\u53cb\u597d\u7684\u65b9\u5f0f\u5408\u5e76\u3002\u5c06\u5728\u5185\u5b58\u4e13\u9898\u8be6\u7ec6\u5b66\u4e60\u3002<\/p>\n<h4>Runtime API<\/h4>\n<p>\u672c\u6587\u4f7f\u7528\u7684 cudaGetDeviceProperties\u3001cudaMalloc\u3001cudaMemcpy \u7b49\u63a5\u53e3\u6240\u5c5e\u7684 CUDA Runtime \u7f16\u7a0b\u63a5\u53e3\u3002<\/p>\n<h4>Device Property<\/h4>\n<p>\u901a\u8fc7 Runtime \u67e5\u8be2\u5230\u7684\u8bbe\u5907\u5c5e\u6027&#xff0c;\u4f8b\u5982\u8ba1\u7b97\u80fd\u529b\u3001SM \u6570\u91cf\u548c\u7ebf\u7a0b\u4e0a\u9650\u3002<\/p>\n<h4>Intrinsic<\/h4>\n<p>\u7f16\u8bd1\u5668\u548c\u786c\u4ef6\u63d0\u4f9b\u7684\u5185\u5efa\u51fd\u6570&#xff0c;\u4f8b\u5982 __ballot_sync\u3001__popc\u3002<\/p>\n<h4>Synchronization<\/h4>\n<p>\u534f\u8c03\u7ebf\u7a0b\u6216 Host\/Device \u6267\u884c\u8fdb\u5ea6\u7684\u673a\u5236\u3002\u540c\u6b65\u8303\u56f4\u548c\u5185\u5b58\u53ef\u89c1\u6027\u5fc5\u987b\u660e\u786e\u3002<\/p>\n<h4>Scheduling<\/h4>\n<p>\u786c\u4ef6\u548c Runtime \u5bf9 Block\u3001Warp \u7b49\u5de5\u4f5c\u7684\u5b89\u6392\u8fc7\u7a0b\u3002\u7a0b\u5e8f\u4e0d\u80fd\u4f9d\u8d56\u672a\u88ab\u63a5\u53e3\u4fdd\u8bc1\u7684\u5177\u4f53\u987a\u5e8f\u3002<\/p>\n<hr \/>\n<h3>\u4e8c\u5341\u3001\u5efa\u8bae\u7684 120 \u5206\u949f\u5b66\u4e60\u5b89\u6392<\/h3>\n<p>\u5982\u679c\u4f60\u5e0c\u671b\u8fd9\u7bc7\u6587\u7ae0\u771f\u6b63\u8f6c\u5316\u4e3a\u80fd\u529b&#xff0c;\u53ef\u4ee5\u6309\u4e0b\u9762\u8282\u594f\u5b8c\u6210\u3002<\/p>\n<h4>\u7b2c 0&#xff5e;15 \u5206\u949f&#xff1a;\u6062\u590d\u7b2c\u4e00\u7bc7\u73af\u5883<\/h4>\n<ul>\n<li>\u6267\u884c nvidia-smi&#xff1b;<\/li>\n<li>\u6267\u884c nvcc &#8211;version&#xff1b;<\/li>\n<li>\u91cd\u65b0\u8fd0\u884c\u7b2c\u4e00\u7bc7 hello_cuda&#xff1b;<\/li>\n<li>\u786e\u8ba4\u7ec8\u7aef\u4e0e\u6784\u5efa\u73af\u5883\u6ca1\u6709\u53d8\u5316\u3002<\/li>\n<\/ul>\n<h4>\u7b2c 15&#xff5e;35 \u5206\u949f&#xff1a;\u5efa\u7acb\u8bbe\u5907\u8eab\u4efd\u5361<\/h4>\n<ul>\n<li>\u7f16\u8bd1 device_query_lite&#xff1b;<\/li>\n<li>\u4fdd\u5b58\u5b8c\u6574\u8f93\u51fa&#xff1b;<\/li>\n<li>\u67e5\u5b98\u65b9\u8ba1\u7b97\u80fd\u529b\u8868&#xff1b;<\/li>\n<li>\u5c06\u81ea\u5df1\u7684 Compute Capability \u8f6c\u4e3a sm_xy \u548c CMake \u6570\u5b57\u3002<\/li>\n<\/ul>\n<h4>\u7b2c 35&#xff5e;60 \u5206\u949f&#xff1a;\u624b\u7b97\u7ebf\u7a0b\u6620\u5c04<\/h4>\n<ul>\n<li>\u5728\u7eb8\u4e0a\u753b 2 \u4e2a Block&#xff1b;<\/li>\n<li>\u6bcf\u4e2a Block \u5199 40 \u4e2a\u7ebf\u7a0b&#xff1b;<\/li>\n<li>\u6807\u8bb0 0&#xff5e;31 \u4e0e 32&#xff5e;39&#xff1b;<\/li>\n<li>\u7b97\u51fa Warp \u548c Lane&#xff1b;<\/li>\n<li>\u6682\u65f6\u4e0d\u8981\u8fd0\u884c\u7a0b\u5e8f\u3002<\/li>\n<\/ul>\n<h4>\u7b2c 60&#xff5e;80 \u5206\u949f&#xff1a;\u7528\u7a0b\u5e8f\u9a8c\u8bc1<\/h4>\n<ul>\n<li>\u8fd0\u884c thread_warp_mapping&#xff1b;<\/li>\n<li>\u5bf9\u7167\u624b\u7b97\u7ed3\u679c&#xff1b;<\/li>\n<li>\u8bb0\u5f55\u4e24\u4e2a Block \u7684 SM \u7f16\u53f7&#xff1b;<\/li>\n<li>\u518d\u8fd0\u884c\u4e09\u6b21&#xff0c;\u89c2\u5bdf\u7f16\u53f7\u662f\u5426\u53d8\u5316&#xff1b;<\/li>\n<li>\u660e\u786e\u54ea\u4e9b\u73b0\u8c61\u662f\u4fdd\u8bc1&#xff0c;\u54ea\u4e9b\u53ea\u662f\u4e00\u6b21\u91c7\u6837\u3002<\/li>\n<\/ul>\n<h4>\u7b2c 80&#xff5e;100 \u5206\u949f&#xff1a;\u7406\u89e3\u6d3b\u52a8\u63a9\u7801<\/h4>\n<ul>\n<li>\u8fd0\u884c warp_vote_demo&#xff1b;<\/li>\n<li>\u628a 0x55555555 \u624b\u5199\u6210\u4e8c\u8fdb\u5236&#xff1b;<\/li>\n<li>\u6807\u8bb0 Lane 0 \u5728\u6700\u4f4e\u4f4d&#xff1b;<\/li>\n<li>\u4fee\u6539\u6761\u4ef6\u4e3a lane &lt; 8&#xff1b;<\/li>\n<li>\u9884\u6d4b\u5e76\u9a8c\u8bc1 0x000000ff\u3002<\/li>\n<\/ul>\n<h4>\u7b2c 100&#xff5e;120 \u5206\u949f&#xff1a;\u8f93\u51fa\u81ea\u5df1\u7684\u603b\u7ed3<\/h4>\n<p>\u4e0d\u8981\u590d\u5236\u672c\u6587&#xff0c;\u5c1d\u8bd5\u7528\u81ea\u5df1\u7684\u8bdd\u89e3\u91ca&#xff1a;<\/p>\n<li>Block \u548c SM \u7684\u533a\u522b&#xff1b;<\/li>\n<li>40 \u4e2a\u7ebf\u7a0b\u4e3a\u4ec0\u4e48\u9700\u8981\u4e24\u4e2a Warp&#xff1b;<\/li>\n<li>Warp \u4e3a\u4ec0\u4e48\u4e0d\u80fd\u8de8 Block&#xff1b;<\/li>\n<li>\u8ba1\u7b97\u80fd\u529b\u548c Toolkit \u7248\u672c\u7684\u533a\u522b&#xff1b;<\/li>\n<li>\u4e3a\u4ec0\u4e48 Block \u5927\u5c0f\u901a\u5e38\u4ece 128 \u6216 256 \u5f00\u59cb\u8bd5\u9a8c\u3002<\/li>\n<p>\u80fd\u8bb2\u6e05\u695a&#xff0c;\u624d\u662f\u771f\u6b63\u638c\u63e1\u3002<\/p>\n<hr \/>\n<h3>\u4e8c\u5341\u4e00\u3001\u5b8c\u6574\u6784\u5efa\u5de5\u7a0b<\/h3>\n<p>\u76ee\u5f55\u7ed3\u6784&#xff1a;<\/p>\n<p>blogs\/<br \/>\n\u251c\u2500\u2500 CUDA\u7f16\u7a0b\u5b9e\u621802_\u8ba4\u8bc6GPU_SM_\u7ebf\u7a0b\u675f\u4e0e\u8ba1\u7b97\u80fd\u529b.md<br \/>\n\u251c\u2500\u2500 assets\/<br \/>\n\u2502   \u2514\u2500\u2500 02\/<br \/>\n\u2502       \u251c\u2500\u2500 01-hero-gpu-sm-warp.png<br \/>\n\u2502       \u251c\u2500\u2500 02-sm-parallel-workshop.png<br \/>\n\u2502       \u251c\u2500\u2500 03-software-hardware-mapping.svg<br \/>\n\u2502       \u251c\u2500\u2500 04-forty-threads-two-warps.svg<br \/>\n\u2502       \u2514\u2500\u2500 05-warp-divergence.svg<br \/>\n\u2514\u2500\u2500 code\/<br \/>\n    \u2514\u2500\u2500 02\/<br \/>\n        \u251c\u2500\u2500 CMakeLists.txt<br \/>\n        \u251c\u2500\u2500 device_query_lite.cu<br \/>\n        \u251c\u2500\u2500 thread_warp_mapping.cu<br \/>\n        \u2514\u2500\u2500 warp_vote_demo.cu<\/p>\n<p>CMakeLists.txt&#xff1a;<\/p>\n<p>cmake_minimum_required(VERSION 3.18)<\/p>\n<p>project(cuda_blog_02 LANGUAGES CXX CUDA)<\/p>\n<p>set(CMAKE_CXX_STANDARD 14)<br \/>\nset(CMAKE_CXX_STANDARD_REQUIRED ON)<br \/>\nset(CMAKE_CUDA_STANDARD 14)<br \/>\nset(CMAKE_CUDA_STANDARD_REQUIRED ON)<\/p>\n<p>add_executable(device_query_lite device_query_lite.cu)<br \/>\nadd_executable(thread_warp_mapping thread_warp_mapping.cu)<br \/>\nadd_executable(warp_vote_demo warp_vote_demo.cu)<\/p>\n<p>foreach(target IN ITEMS<br \/>\n        device_query_lite<br \/>\n        thread_warp_mapping<br \/>\n        warp_vote_demo)<br \/>\n    if(MSVC)<br \/>\n        target_compile_options(${target} PRIVATE<br \/>\n            $&lt;$&lt;COMPILE_LANGUAGE:CUDA&gt;:-Xcompiler&#061;\/utf-8&gt;<br \/>\n            $&lt;$&lt;COMPILE_LANGUAGE:CXX&gt;:\/utf-8&gt;)<br \/>\n    endif()<br \/>\nendforeach()<\/p>\n<p>Windows \u4e00\u6b21\u8fd0\u884c\u5168\u90e8\u7a0b\u5e8f&#xff1a;<\/p>\n<p>cd cuda-notes\\\\blogs\\\\code\\\\02<br \/>\ncmake <span class=\"token operator\">&#8211;<\/span>S <span class=\"token punctuation\">.<\/span> <span class=\"token operator\">&#8211;<\/span>B build <span class=\"token operator\">&#8211;<\/span>G <span class=\"token string\">&#034;Visual Studio 17 2022&#034;<\/span> <span class=\"token operator\">&#8211;<\/span>A x64 <span class=\"token operator\">&#8211;<\/span>DCMAKE_CUDA_ARCHITECTURES&#061;75<br \/>\ncmake <span class=\"token operator\">&#8212;<\/span>build build <span class=\"token operator\">&#8212;<\/span>config Release<br \/>\n<span class=\"token punctuation\">.<\/span>\\\\build\\\\Release\\\\device_query_lite<span class=\"token punctuation\">.<\/span>exe<br \/>\n<span class=\"token punctuation\">.<\/span>\\\\build\\\\Release\\\\thread_warp_mapping<span class=\"token punctuation\">.<\/span>exe<br \/>\n<span class=\"token punctuation\">.<\/span>\\\\build\\\\Release\\\\warp_vote_demo<span class=\"token punctuation\">.<\/span>exe<\/p>\n<p>Linux&#xff1a;<\/p>\n<p><span class=\"token builtin class-name\">cd<\/span> cuda-notes\/blogs\/code\/02<br \/>\ncmake <span class=\"token parameter variable\">-S<\/span> <span class=\"token builtin class-name\">.<\/span> <span class=\"token parameter variable\">-B<\/span> build <span class=\"token parameter variable\">-DCMAKE_BUILD_TYPE<\/span><span class=\"token operator\">&#061;<\/span>Release <span class=\"token parameter variable\">-DCMAKE_CUDA_ARCHITECTURES<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token number\">75<\/span><br \/>\ncmake <span class=\"token parameter variable\">&#8211;build<\/span> build <span class=\"token parameter variable\">-j<\/span><br \/>\n.\/build\/device_query_lite<br \/>\n.\/build\/thread_warp_mapping<br \/>\n.\/build\/warp_vote_demo<\/p>\n<h4>\u6210\u529f\u6807\u51c6<\/h4>\n<p>\u4e0d\u8981\u8981\u6c42 SM \u7f16\u53f7\u548c\u672c\u6587\u76f8\u540c\u3002\u53ea\u68c0\u67e5&#xff1a;<\/p>\n<ul>\n<li>\u4e09\u4e2a\u7a0b\u5e8f\u9000\u51fa\u7801\u4e3a 0&#xff1b;<\/li>\n<li>\u8bbe\u5907\u7a0b\u5e8f\u80fd\u663e\u793a\u6b63\u786e GPU \u540d\u79f0\u548c\u8ba1\u7b97\u80fd\u529b&#xff1b;<\/li>\n<li>\u6620\u5c04\u7a0b\u5e8f\u4e2d\u6bcf\u4e2a Block \u7684 Thread 0 \u90fd\u662f Warp 0\u3001Lane 0&#xff1b;<\/li>\n<li>Thread 31 \u662f Warp 0\u3001Lane 31&#xff1b;<\/li>\n<li>Thread 32 \u662f Warp 1\u3001Lane 0&#xff1b;<\/li>\n<li>Warp \u6295\u7968\u7a0b\u5e8f\u663e\u793a 32 \u4e2a\u6d3b\u52a8 Lane&#xff1b;<\/li>\n<li>\u5076\u6570\u4e0e\u5947\u6570\u63a9\u7801\u5404\u6709 16 \u4f4d&#xff1b;<\/li>\n<li>\u6700\u7ec8\u663e\u793a Verification: PASSED\u3002<\/li>\n<\/ul>\n<hr \/>\n<h3>\u4e8c\u5341\u4e8c\u3001\u672c\u7bc7\u771f\u6b63\u5e94\u8be5\u5e26\u8d70\u7684\u5341\u6761\u7ed3\u8bba<\/h3>\n<li>CUDA Thread \u662f\u903b\u8f91\u7ebf\u7a0b&#xff0c;\u4e0d\u7b49\u4e8e\u4e00\u9897\u56fa\u5b9a CUDA Core\u3002<\/li>\n<li>Grid \u548c Block \u662f\u8f6f\u4ef6\u5c42\u7ea7&#xff0c;SM \u662f\u786c\u4ef6\u6267\u884c\u8d44\u6e90\u3002<\/li>\n<li>\u4e00\u4e2a Block \u5728\u4e00\u4e2a SM \u4e0a\u6267\u884c&#xff0c;\u4e0d\u8de8\u591a\u4e2a SM\u3002<\/li>\n<li>\u4e00\u4e2a SM \u5728\u8d44\u6e90\u5141\u8bb8\u65f6\u53ef\u4ee5\u540c\u65f6\u9a7b\u7559\u591a\u4e2a Block\u3002<\/li>\n<li>\u4e0d\u540c Block \u7684\u8c03\u5ea6\u987a\u5e8f\u901a\u5e38\u4e0d\u4fdd\u8bc1&#xff0c;\u7a0b\u5e8f\u6b63\u786e\u6027\u4e0d\u80fd\u4f9d\u8d56\u5148\u540e\u3002<\/li>\n<li>Block \u5185\u7ebf\u7a0b\u6309\u7167\u7ebf\u6027\u7f16\u53f7\u6bcf 32 \u4e2a\u7ec4\u6210\u4e00\u4e2a Warp\u3002<\/li>\n<li>Warp \u7f16\u53f7\u5728\u6bcf\u4e2a Block \u5185\u91cd\u65b0\u5f00\u59cb&#xff0c;Warp \u4e0d\u8de8 Block\u3002<\/li>\n<li>\u540c\u4e00 Warp \u5185\u4e0d\u540c\u5206\u652f\u8def\u5f84\u4f1a\u5f62\u6210\u5206\u6b67&#xff0c;\u4f46\u5206\u652f\u672c\u8eab\u4e0d\u662f\u9519\u8bef\u3002<\/li>\n<li>Compute Capability \u662f\u786c\u4ef6\u67b6\u6784\u80fd\u529b&#xff0c;\u4e0d\u662f CUDA Toolkit \u7248\u672c&#xff0c;\u4e5f\u4e0d\u662f\u6027\u80fd\u767e\u5206\u6bd4\u3002<\/li>\n<li>Block \u5927\u5c0f\u53ef\u4ece 128 \u6216 256 \u8d77\u6b65&#xff0c;\u4f46\u6700\u7ec8\u7b54\u6848\u5fc5\u987b\u6765\u81ea\u6b63\u786e\u6027\u68c0\u67e5\u548c\u771f\u5b9e\u6d4b\u91cf\u3002<\/li>\n<p>\u5982\u679c\u53ea\u60f3\u8bb0\u4e00\u53e5\u8bdd&#xff0c;\u8bf7\u8bb0&#xff1a;<\/p>\n<p>\u7a0b\u5e8f\u5458\u521b\u5efa Grid \u548c Block&#xff0c;GPU \u628a Block \u8c03\u5ea6\u5230 SM&#xff0c;\u518d\u628a Block \u5185\u7ebf\u7a0b\u7ec4\u7ec7\u6210 Warp&#xff1b;\u6027\u80fd\u4f18\u5316\u7684\u7b2c\u4e00\u6b65&#xff0c;\u662f\u5c0a\u91cd\u8fd9\u4e2a\u5c42\u7ea7\u800c\u4e0d\u662f\u731c\u6d4b\u5e95\u5c42\u987a\u5e8f\u3002<\/p>\n<hr \/>\n<h3>\u4e8c\u5341\u4e09\u3001\u4f60\u5df2\u7ecf\u4e3a\u7b2c\u4e09\u7bc7\u51c6\u5907\u597d\u4e86\u4ec0\u4e48<\/h3>\n<p>\u7b2c\u4e00\u7bc7\u89e3\u51b3\u7684\u662f&#xff1a;<\/p>\n<p>\u5982\u4f55\u8ba9 CPU \u6210\u529f\u542f\u52a8\u7b2c\u4e00\u4e2a GPU Kernel\u3002<\/p>\n<p>\u7b2c\u4e8c\u7bc7\u89e3\u51b3\u7684\u662f&#xff1a;<\/p>\n<p>\u5927\u91cf CUDA \u7ebf\u7a0b\u5982\u4f55\u7ec4\u7ec7&#xff0c;\u5b83\u4eec\u4e0e SM\u3001Warp \u548c\u786c\u4ef6\u80fd\u529b\u6709\u4ec0\u4e48\u5173\u7cfb\u3002<\/p>\n<p>\u4f46\u76ee\u524d\u7684\u7a0b\u5e8f\u8fd8\u6ca1\u6709\u5b8c\u6210\u4e00\u4e2a\u771f\u6b63\u6709\u7528\u7684\u6570\u636e\u8ba1\u7b97\u95ed\u73af\u3002\u4e0b\u4e00\u7bc7\u5c06\u8fdb\u5165&#xff1a;<\/p>\n<h2>CUDA\u7f16\u7a0b\u5b9e\u621803&#xff1a;\u5411\u91cf\u52a0\u6cd5\u2014\u2014\u663e\u5b58\u5206\u914d\u3001\u6570\u636e\u4f20\u8f93\u4e0e\u7b2c\u4e00\u4e2a\u6709\u6548\u8ba1\u7b97<\/h2>\n<p>\u4e0b\u4e00\u7bc7\u4f1a\u89e3\u51b3\u8fd9\u4e9b\u73b0\u5b9e\u95ee\u9898&#xff1a;<\/p>\n<ul>\n<li>CPU \u6570\u7ec4\u5982\u4f55\u590d\u5236\u5230 GPU&#xff1b;<\/li>\n<li>cudaMalloc \u5230\u5e95\u5206\u914d\u5728\u54ea\u91cc&#xff1b;<\/li>\n<li>cudaMemcpyHostToDevice \u548c cudaMemcpyDeviceToHost \u6709\u4ec0\u4e48\u533a\u522b&#xff1b;<\/li>\n<li>\u4e00\u4e2a\u7ebf\u7a0b\u5982\u4f55\u8d1f\u8d23\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20&#xff1b;<\/li>\n<li>\u6570\u636e\u6570\u91cf\u4e0d\u80fd\u6574\u9664 Block \u5927\u5c0f\u65f6\u5982\u4f55\u5904\u7406&#xff1b;<\/li>\n<li>\u5982\u4f55\u9a8c\u8bc1 GPU \u7ed3\u679c\u4e0d\u662f\u201c\u770b\u8d77\u6765\u80fd\u8dd1\u201d&#xff1b;<\/li>\n<li>\u4e3a\u4ec0\u4e48\u8981\u68c0\u67e5\u6700\u5927\u8bef\u5dee&#xff1b;<\/li>\n<li>\u5982\u4f55\u533a\u5206\u8ba1\u7b97\u9519\u8bef\u3001\u8d8a\u754c\u548c\u6d6e\u70b9\u8bef\u5dee&#xff1b;<\/li>\n<li>\u5982\u4f55\u7528 CUDA Event \u8fdb\u884c\u7b2c\u4e00\u7248\u6b63\u786e\u8ba1\u65f6&#xff1b;<\/li>\n<li>\u4e3a\u4ec0\u4e48\u5c0f\u6570\u7ec4\u7528 GPU \u53cd\u800c\u53ef\u80fd\u66f4\u6162\u3002<\/li>\n<\/ul>\n<p>\u4eca\u5929\u4e09\u4e2a\u7a0b\u5e8f\u4e2d\u5df2\u7ecf\u77ed\u6682\u4f7f\u7528\u4e86 cudaMalloc\u3001cudaMemcpy \u548c cudaFree\u3002\u4e0b\u4e00\u7bc7\u4f1a\u628a\u5b83\u4eec\u62c6\u5f00\u8bb2\u6e05\u695a&#xff0c;\u5e76\u5b8c\u6210\u7b2c\u4e00\u6761\u771f\u6b63\u53ef\u590d\u7528\u7684 CUDA \u6570\u636e\u5904\u7406\u6d41\u6c34\u7ebf\u3002<\/p>\n<p>\u5982\u679c\u4f60\u5df2\u7ecf\u8fd0\u884c\u4e86\u672c\u6587\u7a0b\u5e8f&#xff0c;\u8bf7\u4fdd\u7559\u81ea\u5df1\u7684\u8bbe\u5907\u8eab\u4efd\u5361\u548c 40 \u7ebf\u7a0b\u6620\u5c04\u7ed3\u679c\u3002\u8fdb\u5165\u7b2c\u4e09\u7bc7\u65f6&#xff0c;\u4f60\u4f1a\u76f4\u63a5\u7528\u8fd9\u4e9b\u4fe1\u606f\u9009\u62e9 Block \u5927\u5c0f\u548c\u7f16\u8bd1\u76ee\u6807&#xff0c;\u4e0d\u518d\u76f2\u76ee\u590d\u5236\u6570\u5b57\u3002<\/p>\n<hr \/>\n<h3>\u4e8c\u5341\u56db\u3001\u516b\u4e2a\u771f\u5b9e\u573a\u666f&#xff1a;\u628a\u6982\u5ff5\u53d8\u6210\u5224\u65ad\u80fd\u529b<\/h3>\n<p>\u4e0b\u9762\u4e0d\u518d\u4ecb\u7ecd\u65b0\u540d\u8bcd&#xff0c;\u800c\u662f\u7528\u771f\u5b9e\u5f00\u53d1\u573a\u666f\u68c0\u9a8c\u4f60\u662f\u5426\u80fd\u591f\u5229\u7528\u5df2\u6709\u77e5\u8bc6\u4f5c\u51fa\u5224\u65ad\u3002\u6bcf\u4e2a\u573a\u666f\u90fd\u6309\u7167\u201c\u73b0\u8c61\u2014\u63a8\u7406\u2014\u884c\u52a8\u201d\u5c55\u5f00\u3002<\/p>\n<h4>\u573a\u666f 1&#xff1a;\u4e00\u767e\u4e07\u4e2a\u5143\u7d20\u5e94\u8be5\u542f\u52a8\u591a\u5c11\u7ebf\u7a0b<\/h4>\n<p>\u5047\u8bbe\u6570\u7ec4\u6709 1,000,000 \u4e2a\u5143\u7d20&#xff0c;\u6bcf\u4e2a Block \u4f7f\u7528 256 \u4e2a\u7ebf\u7a0b\u3002Block \u6570\u4f7f\u7528\u5411\u4e0a\u53d6\u6574&#xff1a;<\/p>\n<p><span class=\"token keyword\">const<\/span> <span class=\"token keyword\">int<\/span> threads <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">256<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">const<\/span> <span class=\"token keyword\">int<\/span> blocks <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>N <span class=\"token operator\">&#043;<\/span> threads <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/<\/span> threads<span class=\"token punctuation\">;<\/span><\/p>\n<p>\u8ba1\u7b97\u7ed3\u679c\u4e3a 3907 \u4e2a Block&#xff0c;\u603b\u5171\u521b\u5efa&#xff1a;<\/p>\n<p><span class=\"katex--display\"><span class=\"katex-display\"><span class=\"katex\"><span class=\"katex-mathml\"><\/p>\n<p>          N<\/p>\n<p>          l<\/p>\n<p>         &#061;<\/p>\n<p>         3907<\/p>\n<p>         \u00d7<\/p>\n<p>         256<\/p>\n<p>         &#061;<\/p>\n<p>         1000192<\/p>\n<p>         N_l &#061; 3907 \\\\times 256 &#061; 1000192 <\/p>\n<p>     <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.8333em;vertical-align: -0.15em\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.109em\">N<\/span><span class=\"msupsub\"><span class=\"vlist-t vlist-t2\"><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.3361em\"><span class=\"\" style=\"top: -2.55em;margin-left: -0.109em;margin-right: 0.05em\"><span class=\"pstrut\" style=\"height: 2.7em\"><\/span><span class=\"sizing reset-size6 size3 mtight\"><span class=\"mord mathnormal mtight\" style=\"margin-right: 0.0197em\">l<\/span><\/span><\/span><\/span><span class=\"vlist-s\">\u200b<\/span><\/span><span class=\"vlist-r\"><span class=\"vlist\" style=\"height: 0.15em\"><span class=\"\"><\/span><\/span><\/span><\/span><\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.7278em;vertical-align: -0.0833em\"><\/span><span class=\"mord\">3907<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><span class=\"mbin\">\u00d7<\/span><span class=\"mspace\" style=\"margin-right: 0.2222em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6444em\"><\/span><span class=\"mord\">256<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><span class=\"mrel\">&#061;<\/span><span class=\"mspace\" style=\"margin-right: 0.2778em\"><\/span><\/span><span class=\"base\"><span class=\"strut\" style=\"height: 0.6444em\"><\/span><span class=\"mord\">1000192<\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>\u6bd4\u771f\u5b9e\u6570\u636e\u591a 192 \u4e2a\u903b\u8f91\u7ebf\u7a0b\u3002\u6700\u540e\u4e00\u4e2a Block \u53ea\u6709 64 \u4e2a\u7ebf\u7a0b\u5bf9\u5e94\u6709\u6548\u5143\u7d20&#xff0c;\u6070\u597d\u662f\u4e24\u4e2a\u5b8c\u6574 Warp&#xff0c;\u5176\u4ed6\u7ebf\u7a0b\u4f1a\u88ab\u8fb9\u754c\u5224\u65ad\u6321\u4f4f\u3002<\/p>\n<p>\u884c\u52a8\u5efa\u8bae&#xff1a;<\/p>\n<ul>\n<li>\u4e0d\u8981\u4e3a\u4e86\u8ba9\u7ebf\u7a0b\u603b\u6570\u521a\u597d\u7b49\u4e8e\u6570\u636e\u91cf\u800c\u4f7f\u7528\u5947\u602a Block \u5927\u5c0f&#xff1b;<\/li>\n<li>\u9009\u62e9\u4fbf\u4e8e\u786c\u4ef6\u7ec4\u7ec7\u548c\u8c03\u4f18\u7684 Block \u5927\u5c0f&#xff1b;<\/li>\n<li>\u7528\u5411\u4e0a\u53d6\u6574\u8986\u76d6\u5168\u90e8\u6570\u636e&#xff1b;<\/li>\n<li>\u7528 if (i &lt; N) \u4fdd\u8bc1\u6700\u540e\u4e00\u6279\u7ebf\u7a0b\u4e0d\u4f1a\u8d8a\u754c&#xff1b;<\/li>\n<li>\u628a\u201c\u521b\u5efa\u4e86\u989d\u5916\u903b\u8f91\u7ebf\u7a0b\u201d\u548c\u201c\u8bbf\u95ee\u4e86\u989d\u5916\u6570\u7ec4\u5143\u7d20\u201d\u533a\u5206\u5f00&#xff0c;\u524d\u8005\u6b63\u5e38&#xff0c;\u540e\u8005\u662f\u9519\u8bef\u3002<\/li>\n<\/ul>\n<p>\u5982\u679c\u6570\u636e\u91cf\u6539\u4e3a 1,000,001&#xff0c;\u6700\u540e\u4e00\u4e2a Block \u6709 65 \u4e2a\u6709\u6548\u7ebf\u7a0b&#xff0c;\u9700\u8981\u4e09\u4e2a Warp&#xff0c;\u5176\u4e2d\u7b2c\u4e09\u4e2a Warp \u53ea\u6709\u4e00\u4e2a Lane \u627f\u62c5\u6709\u6548\u5de5\u4f5c\u3002\u8fd9\u53ef\u80fd\u7a0d\u6709\u5229\u7528\u7387\u635f\u5931&#xff0c;\u4f46\u8fb9\u754c\u5904\u53ea\u5360\u6574\u4e2a Grid \u7684\u6781\u5c0f\u90e8\u5206&#xff0c;\u901a\u5e38\u4e0d\u503c\u5f97\u4e3a\u6b64\u7834\u574f\u7b80\u5355\u3001\u901a\u7528\u7684\u7d22\u5f15\u65b9\u6848\u3002<\/p>\n<h4>\u573a\u666f 2&#xff1a;GPU \u6709 30 \u4e2a SM&#xff0c;\u7a0b\u5e8f\u5374\u53ea\u542f\u52a8 4 \u4e2a Block<\/h4>\n<p>\u5047\u8bbe\u8bbe\u5907\u62a5\u544a 30 \u4e2a SM&#xff0c;\u800c Kernel \u53ea\u6709&#xff1a;<\/p>\n<p>kernel<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token number\">4<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">256<\/span><span class=\"token operator\">&gt;&gt;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u6bcf\u4e2a Block \u53ea\u80fd\u843d\u5230\u4e00\u4e2a SM\u3002\u5373\u4f7f\u4e00\u4e2a Block \u5185\u6709 256 \u4e2a\u7ebf\u7a0b&#xff0c;\u4e5f\u6700\u591a\u53ea\u6709 4 \u4e2a SM \u5f97\u5230\u8fd9\u6279 Block&#xff0c;\u5176\u4ed6 SM \u6ca1\u6709\u6765\u81ea\u8be5 Grid \u7684 Block \u53ef\u6267\u884c\u3002\u6b64\u65f6\u9996\u5148\u5e94\u68c0\u67e5\u7684\u662f\u95ee\u9898\u89c4\u6a21\u4e0e Grid \u6570\u91cf&#xff0c;\u800c\u4e0d\u662f\u7acb\u523b\u6000\u7591\u663e\u5361\u635f\u574f\u3002<\/p>\n<p>\u884c\u52a8\u5efa\u8bae&#xff1a;<\/p>\n<ul>\n<li>\u67e5\u770b\u6570\u636e\u91cf\u662f\u5426\u672c\u6765\u5c31\u5f88\u5c0f&#xff1b;<\/li>\n<li>\u786e\u8ba4 Block \u6570\u8ba1\u7b97\u6ca1\u6709\u4f7f\u7528\u9519\u8bef\u7684\u6574\u6570\u9664\u6cd5&#xff1b;<\/li>\n<li>\u68c0\u67e5\u662f\u4e0d\u662f\u628a blocks \u548c threads \u5199\u53cd&#xff1b;<\/li>\n<li>\u51cf\u5c11\u4e0d\u5fc5\u8981\u7684\u9891\u7e41\u5c0f Kernel&#xff1b;<\/li>\n<li>\u5728\u7b97\u6cd5\u5141\u8bb8\u65f6\u5408\u5e76\u6279\u6b21\u6216\u63d0\u9ad8\u4e00\u6b21\u5904\u7406\u7684\u6570\u636e\u91cf&#xff1b;<\/li>\n<li>\u4f7f\u7528\u5206\u6790\u5de5\u5177\u786e\u8ba4\u771f\u6b63\u7684\u7a7a\u95f2\u539f\u56e0\u3002<\/li>\n<\/ul>\n<p>\u4f46\u4e0d\u8981\u53cd\u5411\u5f97\u51fa\u201cBlock \u6570\u5fc5\u987b\u7b49\u4e8e SM \u6570\u201d\u3002\u5b9e\u9645\u5e94\u7528\u901a\u5e38\u4f1a\u521b\u5efa\u8fdc\u591a\u4e8e SM \u6570\u91cf\u7684 Block&#xff0c;\u8ba9\u786c\u4ef6\u6709\u8db3\u591f\u5de5\u4f5c\u5206\u6279\u8c03\u5ea6\u3002<\/p>\n<h4>\u573a\u666f 3&#xff1a;\u628a\u6bcf\u4e2a Block \u4ece 256 \u6539\u6210 1024&#xff0c;\u4e3a\u4ec0\u4e48\u6ca1\u6709\u66f4\u5feb<\/h4>\n<p>1024 \u53ef\u80fd\u4ecd\u5728\u8bbe\u5907\u5141\u8bb8\u7684\u6bcf Block \u7ebf\u7a0b\u4e0a\u9650\u5185&#xff0c;\u4f46\u5408\u6cd5\u4e0d\u7b49\u4e8e\u6700\u4f73\u3002<\/p>\n<p>256 \u7ebf\u7a0b\u5bf9\u5e94 8 \u4e2a Warp&#xff0c;1024 \u7ebf\u7a0b\u5bf9\u5e94 32 \u4e2a Warp\u3002\u66f4\u5927\u7684 Block \u53ef\u80fd\u5bfc\u81f4&#xff1a;<\/p>\n<ul>\n<li>\u6bcf\u4e2a Block \u5360\u7528\u66f4\u591a\u7ebf\u7a0b\u548c Warp \u540d\u989d&#xff1b;<\/li>\n<li>\u6bcf\u4e2a\u7ebf\u7a0b\u7684\u5bc4\u5b58\u5668\u9700\u6c42\u7d2f\u79ef\u6210\u66f4\u5927\u7684 Block \u8d44\u6e90\u9700\u6c42&#xff1b;<\/li>\n<li>\u4e00\u4e2a SM \u540c\u65f6\u80fd\u9a7b\u7559\u7684 Block \u6570\u4e0b\u964d&#xff1b;<\/li>\n<li>Shared Memory \u7684\u7ec4\u7ec7\u65b9\u6848\u53d7\u5230\u9650\u5236&#xff1b;<\/li>\n<li>\u67d0\u4e9b Block \u5b8c\u6210\u8f83\u6162&#xff0c;\u5c3e\u90e8\u8c03\u5ea6\u7c92\u5ea6\u53d8\u7c97&#xff1b;<\/li>\n<li>\u5b9e\u9645\u74f6\u9888\u6839\u672c\u4e0d\u5728\u5e76\u884c\u7ebf\u7a0b\u6570\u91cf\u3002<\/li>\n<\/ul>\n<p>\u884c\u52a8\u5efa\u8bae&#xff1a;<\/p>\n<li>\u786e\u8ba4\u4e24\u79cd\u914d\u7f6e\u7ed3\u679c\u5b8c\u5168\u76f8\u540c&#xff1b;<\/li>\n<li>\u4f7f\u7528\u76f8\u540c\u6570\u636e\u548c\u9884\u70ed\u6761\u4ef6&#xff1b;<\/li>\n<li>\u7528 CUDA Event \u6d4b\u91cf Kernel&#xff1b;<\/li>\n<li>\u67e5\u770b\u7f16\u8bd1\u5668\u62a5\u544a\u7684\u5bc4\u5b58\u5668\u4f7f\u7528&#xff1b;<\/li>\n<li>\u7528 Occupancy API \u6216 Nsight Compute \u68c0\u67e5\u9a7b\u7559\u60c5\u51b5&#xff1b;<\/li>\n<li>\u540c\u65f6\u6bd4\u8f83 128\u3001256\u3001512&#xff0c;\u800c\u4e0d\u662f\u53ea\u6bd4\u8f83\u4e24\u4e2a\u6781\u7aef\u503c\u3002<\/li>\n<p>\u7ecf\u9a8c\u503c\u53ea\u80fd\u63d0\u4f9b\u5b9e\u9a8c\u8d77\u70b9&#xff0c;\u4e0d\u80fd\u66ff\u4ee3\u6d4b\u91cf\u3002<\/p>\n<h4>\u573a\u666f 4&#xff1a;\u4e24\u79cd\u5206\u652f\u5199\u6cd5&#xff0c;\u5206\u6b67\u7a0b\u5ea6\u4e3a\u4ec0\u4e48\u4e0d\u540c<\/h4>\n<p>\u6bd4\u8f83\u4e24\u4e2a\u6761\u4ef6\u3002<\/p>\n<p>\u6761\u4ef6 A&#xff1a;<\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">%<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ A<\/span><br \/>\n<span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ B<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u8fde\u7eed Lane \u7684\u5168\u5c40\u7f16\u53f7\u901a\u5e38\u8fde\u7eed&#xff0c;\u6240\u4ee5\u5947\u5076\u4ea4\u66ff\u3002\u540c\u4e00 Warp \u51e0\u4e4e\u6bcf\u6b21\u90fd\u4f1a\u4e00\u534a\u8d70 A\u3001\u4e00\u534a\u8d70 B&#xff0c;\u5f62\u6210\u660e\u663e\u5206\u6b67\u3002<\/p>\n<p>\u6761\u4ef6 B&#xff1a;<\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">&lt;<\/span> N <span class=\"token operator\">\/<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ A<\/span><br \/>\n<span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token comment\">\/\/ B<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u5982\u679c\u7ebf\u7a0b\u6309\u8fde\u7eed\u5168\u5c40\u7f16\u53f7\u6392\u5217&#xff0c;\u5927\u90e8\u5206 Warp \u4f1a\u6574\u4f53\u5904\u4e8e\u524d\u534a\u533a\u6216\u540e\u534a\u533a&#xff0c;Warp \u5185\u6761\u4ef6\u4e00\u81f4\u3002\u53ea\u6709\u8de8\u8d8a N\/2 \u8fb9\u754c\u7684\u5c11\u6570 Warp \u53ef\u80fd\u5206\u6b67\u3002<\/p>\n<p>\u4e24\u6bb5\u4ee3\u7801\u90fd\u6709 if\/else&#xff0c;\u4f46 Warp \u884c\u4e3a\u4e0d\u540c\u3002\u771f\u6b63\u5e94\u8be5\u5206\u6790\u7684\u662f\u201c\u76f8\u90bb Lane \u7684\u6761\u4ef6\u6a21\u5f0f\u201d&#xff0c;\u800c\u4e0d\u662f\u7edf\u8ba1\u6e90\u4ee3\u7801\u4e2d\u6709\u51e0\u4e2a if\u3002<\/p>\n<p>\u884c\u52a8\u5efa\u8bae&#xff1a;<\/p>\n<ul>\n<li>\u89c2\u5bdf\u6761\u4ef6\u4e0e\u7ebf\u7a0b\u7d22\u5f15\u7684\u5173\u7cfb&#xff1b;<\/li>\n<li>\u5c06\u76f8\u4f3c\u5de5\u4f5c\u5c3d\u53ef\u80fd\u6620\u5c04\u7ed9\u540c\u4e00 Warp&#xff1b;<\/li>\n<li>\u4e0d\u8981\u4e3a\u4e86\u6d88\u9664\u5206\u652f\u505a\u9ad8\u6210\u672c\u7684\u6570\u636e\u91cd\u6392&#xff0c;\u9664\u975e\u6d4b\u91cf\u8bc1\u660e\u503c\u5f97&#xff1b;<\/li>\n<li>\u5148\u4fdd\u8bc1\u8bed\u4e49\u548c\u8fb9\u754c\u6b63\u786e&#xff1b;<\/li>\n<li>\u4f7f\u7528 Warp Execution Efficiency \u7b49\u5206\u6790\u6307\u6807\u9a8c\u8bc1\u63a8\u6d4b\u3002<\/li>\n<\/ul>\n<h4>\u573a\u666f 5&#xff1a;\u4e8c\u7ef4\u56fe\u50cf\u4e3a\u4ec0\u4e48\u6709\u4eba\u4f7f\u7528 32\u00d78&#xff0c;\u6709\u4eba\u4f7f\u7528 16\u00d716<\/h4>\n<p>\u4e24\u79cd Block \u90fd\u6709 256 \u4e2a\u7ebf\u7a0b\u548c 8 \u4e2a Warp&#xff1a;<\/p>\n<p>dim3 <span class=\"token function\">block_a<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">16<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">16<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\ndim3 <span class=\"token function\">block_b<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">32<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u4f46\u662f Warp \u5185 Lane \u6620\u5c04\u4e0d\u540c\u3002<\/p>\n<p>\u5bf9\u4e8e 16\u00d716&#xff1a;<\/p>\n<ul>\n<li>x \u7ef4\u53ea\u6709 16&#xff1b;<\/li>\n<li>\u7b2c\u4e00\u4e2a Warp \u4f1a\u8986\u76d6\u4e24\u884c&#xff0c;\u6bcf\u884c 16 \u4e2a\u7ebf\u7a0b&#xff1b;<\/li>\n<li>\u5982\u679c\u56fe\u50cf\u5bbd\u5ea6\u8fdc\u5927\u4e8e 16&#xff0c;\u4e24\u6bb5\u5730\u5740\u4e4b\u95f4\u5b58\u5728\u8de8\u884c\u95f4\u9694\u3002<\/li>\n<\/ul>\n<p>\u5bf9\u4e8e 32\u00d78&#xff1a;<\/p>\n<ul>\n<li>x \u7ef4\u6b63\u597d 32&#xff1b;<\/li>\n<li>\u4e00\u4e2a Warp \u53ef\u4ee5\u5bf9\u5e94\u540c\u4e00\u884c\u4e2d\u8fde\u7eed\u7684 32 \u4e2a x \u5750\u6807&#xff1b;<\/li>\n<li>\u5bf9\u884c\u4f18\u5148\u8fde\u7eed\u6570\u7ec4&#xff0c;\u8fd9\u7ecf\u5e38\u6709\u5229\u4e8e\u5efa\u7acb\u76f4\u89c2\u7684\u8fde\u7eed\u8bbf\u95ee\u6a21\u5f0f\u3002<\/li>\n<\/ul>\n<p>\u8fd9\u4e0d\u8868\u793a 32\u00d78 \u6c38\u8fdc\u5feb\u4e8e 16\u00d716\u3002\u4e8c\u7ef4\u90bb\u57df\u3001Shared Memory Halo\u3001\u8fb9\u754c\u6bd4\u4f8b\u3001\u7f13\u5b58\u548c\u5bc4\u5b58\u5668\u538b\u529b\u90fd\u53ef\u80fd\u6539\u53d8\u7ed3\u679c\u3002\u9009\u62e9\u4e8c\u7ef4 Block \u65f6&#xff0c;\u8981\u540c\u65f6\u8003\u8651&#xff1a;<\/p>\n<ul>\n<li>\u6570\u636e\u5728\u5185\u5b58\u4e2d\u7684\u8fde\u7eed\u65b9\u5411&#xff1b;<\/li>\n<li>Warp \u7ebf\u6027\u5316\u89c4\u5219&#xff1b;<\/li>\n<li>\u7b97\u6cd5\u9700\u8981\u7684\u5c40\u90e8\u90bb\u57df&#xff1b;<\/li>\n<li>Shared Memory \u5e03\u5c40&#xff1b;<\/li>\n<li>\u56fe\u50cf\u5c3a\u5bf8\u4e0e\u8fb9\u754c&#xff1b;<\/li>\n<li>\u5b9e\u9645\u6027\u80fd\u6d4b\u91cf\u3002<\/li>\n<\/ul>\n<h4>\u573a\u666f 6&#xff1a;\u7a0b\u5e8f\u5728\u5f00\u53d1\u673a\u8fd0\u884c&#xff0c;\u590d\u5236\u5230\u53e6\u4e00\u5f20 GPU \u5374\u5931\u8d25<\/h4>\n<p>\u5f00\u53d1\u673a\u662f\u8ba1\u7b97\u80fd\u529b 8.6&#xff0c;\u6784\u5efa\u65f6\u53ea\u751f\u6210 sm_86 \u673a\u5668\u4ee3\u7801&#xff1b;\u76ee\u6807\u673a\u5668\u53ef\u80fd\u662f\u53e6\u4e00\u67b6\u6784\u3002\u5982\u679c\u4e8c\u8fdb\u5236\u6ca1\u6709\u5408\u9002\u76ee\u6807\u4ee3\u7801\u6216\u53ef JIT \u7684\u517c\u5bb9 PTX&#xff0c;\u5c31\u53ef\u80fd\u51fa\u73b0\u6ca1\u6709\u53ef\u7528 Kernel Image \u7b49\u9519\u8bef\u3002<\/p>\n<p>\u6b63\u786e\u7684\u53d1\u5e03\u601d\u8def\u4e0d\u662f\u968f\u4fbf\u628a\u6570\u5b57\u6539\u6210\u201c\u6700\u5927\u7684\u67b6\u6784\u201d&#xff0c;\u800c\u662f&#xff1a;<\/p>\n<li>\u5217\u51fa\u9700\u8981\u652f\u6301\u7684 GPU&#xff1b;<\/li>\n<li>\u67e5\u8be2\u5b83\u4eec\u7684\u8ba1\u7b97\u80fd\u529b&#xff1b;<\/li>\n<li>\u68c0\u67e5\u5f53\u524d Toolkit \u652f\u6301\u54ea\u4e9b\u7f16\u8bd1\u76ee\u6807&#xff1b;<\/li>\n<li>\u751f\u6210\u9700\u8981\u7684\u591a\u67b6\u6784\u4e8c\u8fdb\u5236\u6216\u5408\u9002 PTX&#xff1b;<\/li>\n<li>\u5728\u771f\u5b9e\u76ee\u6807\u673a\u5668\u505a\u542f\u52a8\u6d4b\u8bd5&#xff1b;<\/li>\n<li>\u8bb0\u5f55\u6700\u4f4e\u9a71\u52a8\u4e0e\u8fd0\u884c\u73af\u5883\u8981\u6c42\u3002<\/li>\n<p>CMake \u53ef\u4ee5\u914d\u7f6e\u591a\u4e2a\u76ee\u6807&#xff0c;\u4f8b\u5982\u5177\u4f53\u5199\u6cd5\u9700\u7ed3\u5408\u5f53\u524d CMake \u548c Toolkit&#xff1a;<\/p>\n<p>cmake <span class=\"token operator\">&#8211;<\/span>S <span class=\"token punctuation\">.<\/span> <span class=\"token operator\">&#8211;<\/span>B build <span class=\"token operator\">&#8211;<\/span>DCMAKE_CUDA_ARCHITECTURES&#061;<span class=\"token string\">&#034;75;86&#034;<\/span><\/p>\n<p>\u53d1\u5e03\u517c\u5bb9\u6027\u662f\u4e00\u4e2a\u660e\u786e\u7684\u4ea7\u54c1\u9700\u6c42&#xff0c;\u4e0d\u5e94\u5230\u90e8\u7f72\u5931\u8d25\u65f6\u624d\u4e34\u65f6\u731c\u6d4b\u3002<\/p>\n<h4>\u573a\u666f 7&#xff1a;\u4e3a\u4ec0\u4e48\u4e00\u6b21\u5b9e\u9a8c\u6ca1\u6709\u91c7\u6837\u5230\u6240\u6709 SM<\/h4>\n<p>\u5373\u4f7f GPU \u6709 30 \u4e2a SM&#xff0c;\u542f\u52a8 100 \u4e2a Block&#xff0c;\u4e5f\u4e0d\u4fdd\u8bc1\u4e00\u6b21 %smid \u8f93\u51fa\u5fc5\u7136\u8986\u76d6 0&#xff5e;29 \u7684\u6bcf\u4e2a\u7f16\u53f7\u3002\u539f\u56e0\u5305\u62ec&#xff1a;<\/p>\n<ul>\n<li>SM \u6807\u8bc6\u7f16\u53f7\u4e0d\u4e00\u5b9a\u9002\u5408\u4f5c\u4e3a\u8fde\u7eed\u7269\u7406\u6570\u91cf\u89e3\u91ca&#xff1b;<\/li>\n<li>Block \u6267\u884c\u65f6\u95f4\u592a\u77ed&#xff0c;\u8c03\u5ea6\u91c7\u6837\u5177\u6709\u5076\u7136\u6027&#xff1b;<\/li>\n<li>\u7cfb\u7edf\u540c\u65f6\u6709\u5176\u4ed6 GPU \u5de5\u4f5c&#xff1b;<\/li>\n<li>\u67d0\u4e9b SM \u5728\u91c7\u6837\u7a97\u53e3\u4e2d\u6ca1\u6709\u63a5\u5230\u8be5 Grid \u7684 Block&#xff1b;<\/li>\n<li>\u6253\u5370\u6216\u8bb0\u5f55\u65b9\u5f0f\u4f1a\u5f71\u54cd\u89c2\u5bdf&#xff1b;<\/li>\n<li>%smid \u672c\u6765\u5c31\u662f\u8bca\u65ad\u503c&#xff0c;\u4e0d\u662f\u5206\u5e03\u8bc1\u660e\u63a5\u53e3\u3002<\/li>\n<\/ul>\n<p>\u5982\u679c\u8981\u7814\u7a76\u8d1f\u8f7d\u5206\u5e03&#xff0c;\u5e94\u8bbe\u8ba1\u6301\u7eed\u65f6\u95f4\u8db3\u591f\u7684\u57fa\u51c6\u3001\u51cf\u5c11\u89c2\u5bdf\u6270\u52a8\u3001\u591a\u8f6e\u91c7\u6837&#xff0c;\u5e76\u4f7f\u7528 Nsight \u5de5\u5177\u3002\u672c\u6587\u7a0b\u5e8f\u53ea\u4e3a\u8bc1\u660e\u201cBlock \u6700\u7ec8\u5728\u67d0\u4e2a SM \u4e0a\u6267\u884c&#xff0c;\u4e14\u5206\u914d\u7531\u786c\u4ef6\u52a8\u6001\u5b8c\u6210\u201d\u3002<\/p>\n<h4>\u573a\u666f 8&#xff1a;\u8fb9\u754c\u5206\u652f\u6709\u5206\u6b67&#xff0c;\u8981\u4e0d\u8981\u5220\u9664<\/h4>\n<p>\u5178\u578b\u8fb9\u754c\u5224\u65ad&#xff1a;<\/p>\n<p><span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">&lt;<\/span> N<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    output<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> input<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">*<\/span> scale<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u6700\u540e\u4e00\u4e2a Warp \u53ef\u80fd\u90e8\u5206 Lane \u6709\u6548\u3001\u90e8\u5206 Lane \u65e0\u6548&#xff0c;\u786e\u5b9e\u53ef\u80fd\u5f62\u6210\u5206\u6b67\u3002\u4f46\u5220\u9664\u5224\u65ad\u4f1a\u5bfc\u81f4\u8d8a\u754c\u8bbf\u95ee&#xff0c;\u540e\u679c\u53ef\u80fd\u662f&#xff1a;<\/p>\n<ul>\n<li>\u7834\u574f\u5176\u4ed6\u6570\u636e&#xff1b;<\/li>\n<li>\u5f97\u5230\u5076\u53d1\u9519\u8bef\u7ed3\u679c&#xff1b;<\/li>\n<li>\u89e6\u53d1\u975e\u6cd5\u5185\u5b58\u8bbf\u95ee&#xff1b;<\/li>\n<li>\u9519\u8bef\u5728\u540e\u7eed\u540c\u6b65\u4f4d\u7f6e\u624d\u62a5\u544a&#xff1b;<\/li>\n<li>\u4e0d\u540c\u8fd0\u884c\u73af\u5883\u8868\u73b0\u4e0d\u540c&#xff0c;\u96be\u4ee5\u5b9a\u4f4d\u3002<\/li>\n<\/ul>\n<p>\u8fb9\u754c Warp \u901a\u5e38\u53ea\u5360\u6574\u4e2a Grid \u5f88\u5c0f\u6bd4\u4f8b\u3002\u9664\u975e\u6709\u5145\u5206\u6d4b\u91cf\u548c\u5b89\u5168\u586b\u5145\u7b56\u7565&#xff0c;\u5426\u5219\u4e0d\u5e94\u4e3a\u4e86\u8fd9\u70b9\u5c40\u90e8\u5206\u6b67\u727a\u7272\u6b63\u786e\u6027\u3002<\/p>\n<p>\u6210\u719f\u4f18\u5316\u987a\u5e8f\u662f&#xff1a;<\/p>\n<p>\u7ed3\u679c\u6b63\u786e \u2192 \u8fb9\u754c\u5b89\u5168 \u2192 \u8ba1\u65f6\u53ef\u9760 \u2192 \u627e\u5230\u74f6\u9888 \u2192 \u4fee\u6539 \u2192 \u518d\u6b21\u9a8c\u8bc1<\/p>\n<p>\u8fd9\u6bd4\u201c\u770b\u5230\u5206\u652f\u5c31\u5220\u201d\u66f4\u63a5\u8fd1\u771f\u5b9e CUDA \u5de5\u7a0b\u3002<\/p>\n<hr \/>\n<h3>\u4e8c\u5341\u4e94\u3001\u4e8c\u5341\u4e2a\u9ad8\u9891\u95ee\u7b54<\/h3>\n<h4>Q1&#xff1a;CUDA Thread \u548c Windows\/Linux \u7ebf\u7a0b\u662f\u540c\u4e00\u79cd\u4e1c\u897f\u5417&#xff1f;<\/h4>\n<p>\u4e0d\u662f\u3002\u64cd\u4f5c\u7cfb\u7edf\u7ebf\u7a0b\u7531 CPU \u4e0e\u64cd\u4f5c\u7cfb\u7edf\u8c03\u5ea6&#xff0c;\u521b\u5efa\u548c\u5207\u6362\u6210\u672c\u8f83\u9ad8&#xff1b;CUDA Thread \u662f GPU \u7f16\u7a0b\u6a21\u578b\u4e2d\u7684\u8f7b\u91cf\u903b\u8f91\u6267\u884c\u5b9e\u4f8b&#xff0c;\u901a\u5e38\u6210\u5343\u4e0a\u4e07\u751a\u81f3\u4e0a\u767e\u4e07\u5730\u521b\u5efa\u3002\u4e8c\u8005\u90fd\u53eb Thread&#xff0c;\u4f46\u6210\u672c\u6a21\u578b\u3001\u8c03\u5ea6\u4e3b\u4f53\u548c\u4f7f\u7528\u65b9\u5f0f\u4e0d\u540c\u3002<\/p>\n<h4>Q2&#xff1a;Kernel \u53ea\u542f\u52a8\u4e00\u4e2a\u7ebf\u7a0b\u6709\u6ca1\u6709\u610f\u4e49&#xff1f;<\/h4>\n<p>\u53ef\u4ee5\u8fd0\u884c&#xff0c;\u9002\u5408\u9a8c\u8bc1\u5de5\u5177\u94fe\u6216\u6267\u884c\u4e00\u6b21\u8bbe\u5907\u7aef\u64cd\u4f5c&#xff0c;\u4f46\u65e0\u6cd5\u4f53\u73b0 GPU \u7684\u5927\u89c4\u6a21\u5e76\u884c\u4f18\u52bf\u3002\u7b2c\u4e00\u7bc7 Hello CUDA \u662f\u8fde\u901a\u6027\u6d4b\u8bd5&#xff0c;\u4e0d\u662f\u6027\u80fd\u57fa\u51c6\u3002<\/p>\n<h4>Q3&#xff1a;Grid \u53ef\u4ee5\u6709\u96f6\u4e2a Block \u5417&#xff1f;<\/h4>\n<p>\u4e0d\u8981\u4f9d\u8d56\u96f6\u5c3a\u5bf8\u542f\u52a8\u3002\u5b9e\u9645\u4ee3\u7801\u5e94\u5728 Host \u7aef\u5904\u7406 N&#061;&#061;0 \u7b49\u7a7a\u8f93\u5165&#xff0c;\u907f\u514d\u6784\u9020\u65e0\u610f\u4e49\u6216\u975e\u6cd5\u542f\u52a8\u914d\u7f6e\u3002<\/p>\n<h4>Q4&#xff1a;\u4e00\u4e2a Block \u7684\u4e09\u4e2a\u7ef4\u5ea6\u90fd\u6ca1\u8d85\u8fc7\u4e0a\u9650&#xff0c;\u5c31\u4e00\u5b9a\u5408\u6cd5\u5417&#xff1f;<\/h4>\n<p>\u4e0d\u4e00\u5b9a\u3002\u8fd8\u8981\u68c0\u67e5\u4e09\u4e2a\u7ef4\u5ea6\u4e58\u79ef\u662f\u5426\u8d85\u8fc7 maxThreadsPerBlock&#xff0c;\u5e76\u8003\u8651 Kernel \u8d44\u6e90\u662f\u5426\u5141\u8bb8\u542f\u52a8\u3002<\/p>\n<h4>Q5&#xff1a;\u4e3a\u4ec0\u4e48 threadIdx \u548c blockIdx \u770b\u8d77\u6765\u4e0d\u662f\u666e\u901a\u6574\u6570&#xff1f;<\/h4>\n<p>\u5b83\u4eec\u662f\u5177\u6709 x\u3001y\u3001z \u5206\u91cf\u7684\u5185\u5efa\u4e09\u7ef4\u503c\u3002\u53c2\u4e0e\u7b97\u672f\u65f6\u8981\u660e\u786e\u53d6 .x\u3001.y \u6216 .z&#xff0c;\u5e76\u6ce8\u610f\u5176\u65e0\u7b26\u53f7\u7c7b\u578b\u4e0e\u76ee\u6807\u7d22\u5f15\u7c7b\u578b\u7684\u8f6c\u6362\u3002<\/p>\n<h4>Q6&#xff1a;Warp \u5927\u5c0f\u53ef\u4ee5\u5728 Host \u7aef\u8bfb\u53d6\u5417&#xff1f;<\/h4>\n<p>\u53ef\u4ee5&#xff0c;\u901a\u8fc7 cudaGetDeviceProperties \u5f97\u5230 prop.warpSize&#xff0c;\u4e5f\u53ef\u4ee5\u901a\u8fc7\u8bbe\u5907\u5c5e\u6027\u67e5\u8be2\u63a5\u53e3\u83b7\u5f97\u3002Kernel \u5185\u53ef\u4f7f\u7528 warpSize\u3002<\/p>\n<h4>Q7&#xff1a;\u4e3a\u4ec0\u4e48\u4e0d\u76f4\u63a5\u628a Warp \u5927\u5c0f\u6c38\u8fdc\u5199\u6210 32&#xff1f;<\/h4>\n<p>\u5f53\u524d CUDA \u6587\u6863\u660e\u786e\u4e3a 32&#xff0c;\u5f88\u591a Warp \u7ea7\u4f4d\u63a9\u7801\u4e5f\u76f4\u63a5\u4f53\u73b0 32 \u4f4d\u3002\u4f46\u4f7f\u7528 warpSize \u80fd\u8ba9\u610f\u56fe\u66f4\u6e05\u695a&#xff0c;\u8bbe\u5907\u62a5\u544a\u4e5f\u4e3a\u8bca\u65ad\u63d0\u4f9b\u4f9d\u636e\u3002\u67d0\u4e9b\u7b97\u6cd5\u548c\u4f4d\u63a9\u7801\u4ecd\u4f1a\u57fa\u4e8e\u5f53\u524d 32-Lane \u8bed\u4e49\u8bbe\u8ba1&#xff0c;\u5e94\u660e\u786e\u5199\u51fa\u5047\u8bbe\u3002<\/p>\n<h4>Q8&#xff1a;\u591a\u4e2a Block \u80fd\u5171\u4eab\u666e\u901a Shared Memory \u5417&#xff1f;<\/h4>\n<p>\u666e\u901a Block \u7ea7 Shared Memory \u5c5e\u4e8e Block \u7684\u534f\u4f5c\u8303\u56f4&#xff0c;\u4e0d\u540c Block \u4e0d\u80fd\u628a\u5b83\u5f53\u4f5c\u5171\u540c\u6570\u7ec4\u76f4\u63a5\u5171\u4eab\u3002\u66f4\u65b0\u67b6\u6784\u5b58\u5728 Cluster \u4e0e Distributed Shared Memory \u7b49\u9ad8\u7ea7\u80fd\u529b&#xff0c;\u4f46\u90a3\u662f\u6709\u989d\u5916\u542f\u52a8\u548c\u540c\u6b65\u8bed\u4e49\u7684\u529f\u80fd&#xff0c;\u4e0d\u80fd\u53cd\u5411\u6539\u53d8\u666e\u901a Kernel \u7684\u57fa\u672c\u89c4\u5219\u3002<\/p>\n<h4>Q9&#xff1a;\u540c\u4e00 Block \u7684\u7ebf\u7a0b\u4e00\u5b9a\u540c\u65f6\u5f00\u59cb\u5417&#xff1f;<\/h4>\n<p>\u4e0d\u8981\u5efa\u7acb\u8fd9\u79cd\u8981\u6c42\u3002\u5b83\u4eec\u88ab\u5212\u5206\u6210\u591a\u4e2a Warp&#xff0c;\u5177\u4f53\u63a8\u8fdb\u65f6\u673a\u7531\u786c\u4ef6\u8c03\u5ea6\u3002Block \u5185\u9700\u8981\u9636\u6bb5\u540c\u6b65\u65f6\u4f7f\u7528\u6b63\u786e\u7684\u540c\u6b65\u539f\u8bed&#xff0c;\u800c\u4e0d\u662f\u4f9d\u8d56\u201c\u5927\u5bb6\u5e94\u8be5\u5dee\u4e0d\u591a\u540c\u65f6\u5230\u8fbe\u201d\u3002<\/p>\n<h4>Q10&#xff1a;__syncthreads() \u80fd\u540c\u6b65\u6574\u4e2a Grid \u5417&#xff1f;<\/h4>\n<p>\u4e0d\u80fd\u3002\u5b83\u662f Block \u8303\u56f4\u7684\u5c4f\u969c\u3002\u4e0d\u540c Block \u7684\u666e\u901a Grid \u7ea7\u540c\u6b65\u901a\u5e38\u9700\u8981\u62c6\u6210\u591a\u4e2a Kernel\u3001\u4f7f\u7528\u7279\u5b9a Cooperative Groups \u80fd\u529b\u6216\u91cd\u65b0\u8bbe\u8ba1\u7b97\u6cd5\u3002<\/p>\n<h4>Q11&#xff1a;__activemask() \u53ef\u4ee5\u5728\u4efb\u610f\u5206\u652f\u91cc\u8c03\u7528\u518d\u62ff\u5230\u5b8c\u6574 Warp \u5417&#xff1f;<\/h4>\n<p>\u4e0d\u80fd\u8fd9\u6837\u5047\u8bbe\u3002\u5b83\u8fd4\u56de\u8c03\u7528\u4f4d\u7f6e\u5f53\u524d\u6d3b\u52a8 Lane \u7684\u63a9\u7801\u3002\u5982\u679c\u8c03\u7528\u5df2\u7ecf\u5904\u5728\u5206\u6b67\u8def\u5f84\u4e2d&#xff0c;\u5f97\u5230\u7684\u53ef\u80fd\u53ea\u662f\u5f53\u524d\u8def\u5f84\u7684\u6d3b\u52a8\u5b50\u96c6\u3002\u8bbe\u8ba1 _sync Warp \u539f\u8bed\u65f6\u5fc5\u987b\u4e25\u683c\u9075\u5b88\u53c2\u4e0e\u63a9\u7801\u8981\u6c42\u3002<\/p>\n<h4>Q12&#xff1a;\u5206\u652f\u5206\u6b67\u4f1a\u5bfc\u81f4\u8ba1\u7b97\u7ed3\u679c\u9519\u8bef\u5417&#xff1f;<\/h4>\n<p>\u6b63\u5e38\u5206\u652f\u5206\u6b67\u4e0d\u4f1a\u81ea\u52a8\u5bfc\u81f4\u9519\u8bef&#xff0c;\u786c\u4ef6\u4f1a\u7ef4\u62a4\u5404\u7ebf\u7a0b\u8bed\u4e49\u3002\u5b83\u4e3b\u8981\u53ef\u80fd\u5f71\u54cd\u6267\u884c\u6548\u7387\u3002\u9519\u8bef\u901a\u5e38\u6765\u81ea\u9519\u8bef\u540c\u6b65\u3001\u9519\u8bef\u53c2\u4e0e\u63a9\u7801\u3001\u6570\u636e\u7ade\u4e89\u6216\u8d8a\u754c&#xff0c;\u800c\u4e0d\u662f\u201cLane \u9009\u62e9\u4e86\u4e0d\u540c\u5408\u6cd5\u5206\u652f\u201d\u672c\u8eab\u3002<\/p>\n<h4>Q13&#xff1a;\u4e3a\u4ec0\u4e48 Kernel \u542f\u52a8\u540e\u8981\u540c\u65f6\u8c03\u7528 cudaGetLastError() \u548c cudaDeviceSynchronize()&#xff1f;<\/h4>\n<p>\u524d\u8005\u53ef\u4ee5\u5c3d\u65e9\u53d1\u73b0\u542f\u52a8\u914d\u7f6e\u7b49\u5373\u65f6\u9519\u8bef&#xff1b;Kernel \u542f\u52a8\u5bf9 Host \u901a\u5e38\u662f\u5f02\u6b65\u7684&#xff0c;\u6267\u884c\u9636\u6bb5\u9519\u8bef\u5f80\u5f80\u8981\u5728\u540c\u6b65\u6216\u540e\u7eed Runtime \u8c03\u7528\u65f6\u624d\u66b4\u9732\u3002\u6559\u5b66\u7a0b\u5e8f\u540c\u65f6\u68c0\u67e5\u4e24\u5904&#xff0c;\u80fd\u8ba9\u9519\u8bef\u66f4\u9760\u8fd1\u6e90\u5934\u3002<\/p>\n<h4>Q14&#xff1a;\u4e3a\u4ec0\u4e48\u8bbe\u5907\u5c5e\u6027\u4e2d\u7684\u9891\u7387\u4e0e\u76d1\u63a7\u8f6f\u4ef6\u4e0d\u4e00\u6837&#xff1f;<\/h4>\n<p>Runtime \u5c5e\u6027\u662f\u8bbe\u5907\u62a5\u544a\u503c&#xff0c;\u771f\u5b9e\u8fd0\u884c\u9891\u7387\u53d7\u52a8\u6001\u52a0\u901f\u3001\u6e29\u5ea6\u3001\u529f\u8017\u3001\u8d1f\u8f7d\u548c\u7cfb\u7edf\u7b56\u7565\u5f71\u54cd\u3002\u9700\u8981\u7814\u7a76\u9891\u7387\u65f6&#xff0c;\u5e94\u5728\u53d7\u63a7\u8d1f\u8f7d\u4e0b\u4f7f\u7528\u5408\u9002\u76d1\u63a7\u5de5\u5177&#xff0c;\u800c\u4e0d\u662f\u628a\u4e00\u4e2a\u9759\u6001\u5b57\u6bb5\u5f53\u4f5c\u5b9e\u65f6\u4f20\u611f\u5668\u3002<\/p>\n<h4>Q15&#xff1a;SM \u6570\u91cf\u80fd\u76f4\u63a5\u51b3\u5b9a\u5e94\u8be5\u542f\u52a8\u591a\u5c11 Block \u5417&#xff1f;<\/h4>\n<p>\u4e0d\u80fd\u76f4\u63a5\u51b3\u5b9a&#xff0c;\u4f46\u53ef\u4ee5\u5e2e\u52a9\u5224\u65ad Grid \u662f\u5426\u660e\u663e\u592a\u5c0f\u3002\u5b9e\u9645\u901a\u5e38\u542f\u52a8\u8db3\u591f\u591a\u7684 Block&#xff0c;\u8ba9\u6bcf\u4e2a SM \u83b7\u5f97\u591a\u6279\u5de5\u4f5c&#xff1b;\u5177\u4f53\u6570\u91cf\u8fd8\u4e0e\u6570\u636e\u89c4\u6a21\u3001Block \u8d44\u6e90\u548c\u8d1f\u8f7d\u5747\u8861\u6709\u5173\u3002<\/p>\n<h4>Q16&#xff1a;\u4e3a\u4ec0\u4e48\u4e00\u4e2a SM \u4f1a\u540c\u65f6\u9a7b\u7559\u591a\u4e2a Warp&#xff0c;\u800c\u4e0d\u662f\u53ea\u8fd0\u884c\u5f53\u524d Warp \u5230\u7ed3\u675f&#xff1f;<\/h4>\n<p>\u5927\u91cf\u9a7b\u7559 Warp \u4e3a\u9690\u85cf\u7b49\u5f85\u63d0\u4f9b\u673a\u4f1a\u3002\u5f53\u67d0 Warp \u56e0\u6570\u636e\u4f9d\u8d56\u6216\u8bbf\u5b58\u7b49\u539f\u56e0\u6682\u65f6\u4e0d\u80fd\u63a8\u8fdb\u65f6&#xff0c;\u8c03\u5ea6\u5668\u53ef\u4ee5\u9009\u62e9\u5176\u4ed6\u5c31\u7eea Warp&#xff0c;\u4ece\u800c\u63d0\u9ad8\u541e\u5410\u3002<\/p>\n<h4>Q17&#xff1a;Debug \u6784\u5efa\u548c Release \u6784\u5efa\u7684\u6027\u80fd\u80fd\u76f4\u63a5\u6bd4\u8f83\u5417&#xff1f;<\/h4>\n<p>\u4e0d\u5e94\u8be5\u3002\u8c03\u8bd5\u9009\u9879\u548c\u4f18\u5316\u7ea7\u522b\u4f1a\u6539\u53d8\u4ee3\u7801\u3001\u5bc4\u5b58\u5668\u4f7f\u7528\u548c\u6267\u884c\u884c\u4e3a\u3002\u6b63\u786e\u6027\u8c03\u8bd5\u53ef\u4ee5\u4f7f\u7528 Debug&#xff0c;\u6027\u80fd\u6bd4\u8f83\u5e94\u4f7f\u7528\u660e\u786e\u4e14\u4e00\u81f4\u7684\u4f18\u5316\u914d\u7f6e&#xff0c;\u5e76\u8bb0\u5f55\u7f16\u8bd1\u53c2\u6570\u3002<\/p>\n<h4>Q18&#xff1a;\u8ba1\u7b97\u80fd\u529b\u66f4\u9ad8\u7684 GPU \u4e00\u5b9a\u66f4\u5feb\u5417&#xff1f;<\/h4>\n<p>\u4e0d\u4e00\u5b9a\u3002\u8ba1\u7b97\u80fd\u529b\u8868\u793a\u67b6\u6784\u529f\u80fd\u7248\u672c&#xff0c;\u4e0d\u662f\u5b8c\u6574\u6027\u80fd\u5206\u6570\u3002\u4f4e\u4e00\u7ea7\u67b6\u6784\u7684\u5927\u578b\u6570\u636e\u4e2d\u5fc3 GPU \u53ef\u80fd\u5728\u67d0\u4e9b\u4efb\u52a1\u4e0a\u8fdc\u5feb\u4e8e\u66f4\u65b0\u67b6\u6784\u7684\u5165\u95e8\u4ea7\u54c1&#xff0c;\u53cd\u4e4b\u4e5f\u53ef\u80fd\u56e0\u7279\u5b9a\u65b0\u529f\u80fd\u800c\u6539\u53d8\u3002<\/p>\n<h4>Q19&#xff1a;\u53ef\u4ee5\u5728\u4e00\u4efd\u7a0b\u5e8f\u4e2d\u652f\u6301\u591a\u79cd\u8ba1\u7b97\u80fd\u529b\u5417&#xff1f;<\/h4>\n<p>\u53ef\u4ee5\u3002CUDA \u5de5\u5177\u94fe\u80fd\u591f\u5728\u4e8c\u8fdb\u5236\u4e2d\u5305\u542b\u591a\u4e2a\u67b6\u6784\u76ee\u6807\u548c PTX\u3002\u5177\u4f53\u7ec4\u5408\u8981\u6839\u636e\u76ee\u6807\u7528\u6237\u3001\u4e8c\u8fdb\u5236\u5927\u5c0f\u3001Toolkit \u652f\u6301\u548c\u517c\u5bb9\u7b56\u7565\u8bbe\u8ba1\u3002<\/p>\n<h4>Q20&#xff1a;\u5b8c\u6210\u672c\u7bc7\u540e&#xff0c;\u6700\u503c\u5f97\u4fdd\u7559\u7684\u6587\u4ef6\u662f\u4ec0\u4e48&#xff1f;<\/h4>\n<p>\u4fdd\u7559\u8bbe\u5907\u8eab\u4efd\u5361\u3001\u4e09\u4e2a\u53ef\u6267\u884c\u793a\u4f8b\u3001\u6784\u5efa\u547d\u4ee4\u548c\u4f60\u4fee\u6539\u5b9e\u9a8c\u540e\u7684\u8f93\u51fa\u3002\u5b83\u4eec\u662f\u540e\u7eed\u6392\u67e5\u201c\u67b6\u6784\u4e0d\u5339\u914d\u3001Block \u8d85\u9650\u3001Warp \u8ba1\u7b97\u9519\u8bef\u201d\u7684\u6700\u5c0f\u5de5\u5177\u7bb1&#xff0c;\u6bd4\u53ea\u6536\u85cf\u7f51\u9875\u66f4\u6709\u7528\u3002<\/p>\n<hr \/>\n<h3>\u4e8c\u5341\u516d\u3001\u5b98\u65b9\u53c2\u8003\u8d44\u6599<\/h3>\n<p>\u672c\u6587\u6982\u5ff5\u4e0e\u63a5\u53e3\u4f18\u5148\u4f9d\u636e NVIDIA \u5b98\u65b9\u6587\u6863&#xff1a;<\/p>\n<ul>\n<li>CUDA Programming Guide<\/li>\n<li>Programming Model&#xff1a;Grid\u3001Block\u3001Warp \u4e0e SM<\/li>\n<li>Writing SIMT Kernels<\/li>\n<li>CUDA Runtime API Device Attributes<\/li>\n<li>CUDA GPU Compute Capability \u67e5\u8be2\u8868<\/li>\n<li>PTX ISA Special Registers<\/li>\n<\/ul>\n<p>\u5b98\u65b9\u6587\u6863\u5185\u5bb9\u4f1a\u968f CUDA \u7248\u672c\u66f4\u65b0\u3002\u6587\u7ae0\u4e2d\u7684\u6570\u5b57\u793a\u4f8b\u7528\u4e8e\u5efa\u7acb\u65b9\u6cd5&#xff0c;\u5b9e\u9645\u5de5\u7a0b\u5e94\u4f18\u5148\u67e5\u8be2\u5f53\u524d\u8bbe\u5907\u5c5e\u6027&#xff0c;\u5e76\u67e5\u770b\u4e0e\u4f60\u4f7f\u7528\u7684 Toolkit \u5bf9\u5e94\u7684\u5b98\u65b9\u6587\u6863\u3002<\/p>\n<hr \/>\n<h3>\u7ed3\u8bed&#xff1a;\u4ece\u201c\u77e5\u9053 GPU \u5f88\u5e76\u884c\u201d\u8d70\u5230\u201c\u80fd\u89e3\u91ca\u5e76\u884c\u5982\u4f55\u53d1\u751f\u201d<\/h3>\n<p>\u5f88\u591a\u4eba\u5b66 CUDA \u7684\u7b2c\u4e00\u9053\u574e\u662f\u73af\u5883&#xff0c;\u7b2c\u4e8c\u9053\u574e\u5c31\u662f\u672c\u7bc7\u8fd9\u4e9b\u770b\u4f3c\u76f8\u4f3c\u7684\u540d\u8bcd\u3002\u53ea\u8981\u628a\u8f6f\u4ef6\u5c42\u548c\u786c\u4ef6\u5c42\u5206\u5f00&#xff0c;\u5173\u7cfb\u5c31\u4f1a\u6e05\u695a&#xff1a;<\/p>\n<p>\u7a0b\u5e8f\u5458&#xff1a;Grid \u2192 Block \u2192 Thread<br \/>\n\u786c\u4ef6\u6267\u884c&#xff1a;GPU \u2192 SM \u2192 Warp \/ Lane<br \/>\n\u8fde\u63a5\u89c4\u5219&#xff1a;Block \u8c03\u5ea6\u5230 SM&#xff0c;Block \u5185\u7ebf\u7a0b\u5212\u5206\u4e3a Warp<br \/>\n\u517c\u5bb9\u4f9d\u636e&#xff1a;Compute Capability \u4e0e\u7f16\u8bd1\u76ee\u6807<\/p>\n<p>\u4f60\u4e0d\u9700\u8981\u5728\u7b2c\u4e8c\u7bc7\u5c31\u80cc\u4e0b\u6bcf\u4e00\u4ee3 GPU \u7684\u529f\u80fd\u5355\u5143\u6570\u91cf&#xff0c;\u4e5f\u4e0d\u9700\u8981\u9a6c\u4e0a\u624b\u7b97\u590d\u6742 Occupancy\u3002\u66f4\u91cd\u8981\u7684\u662f\u83b7\u5f97\u4e00\u79cd\u53ef\u6301\u7eed\u7684\u5b66\u4e60\u65b9\u6cd5&#xff1a;<\/p>\n<li>\u5148\u5efa\u7acb\u80fd\u591f\u89e3\u91ca\u7684\u6a21\u578b&#xff1b;<\/li>\n<li>\u518d\u5199\u6700\u5c0f\u7a0b\u5e8f\u89c2\u5bdf&#xff1b;<\/li>\n<li>\u533a\u5206\u54ea\u4e9b\u73b0\u8c61\u662f CUDA \u4fdd\u8bc1&#xff0c;\u54ea\u4e9b\u53ea\u662f\u4e00\u6b21\u8fd0\u884c\u7ed3\u679c&#xff1b;<\/li>\n<li>\u7528\u9519\u8bef\u68c0\u67e5\u4fdd\u62a4\u5b9e\u9a8c&#xff1b;<\/li>\n<li>\u6700\u540e\u7528\u6d4b\u91cf\u800c\u4e0d\u662f\u611f\u89c9\u505a\u6027\u80fd\u5224\u65ad\u3002<\/li>\n<p>\u5f53\u4f60\u80fd\u770b\u5230 0x55555555 \u5e76\u89e3\u91ca\u6bcf\u4e00\u4e2a 1 \u4e3a\u4ec0\u4e48\u5bf9\u5e94\u5076\u6570 Lane \u65f6&#xff0c;Warp \u5c31\u4e0d\u518d\u662f\u4e66\u4e0a\u7684\u4e00\u53e5\u5b9a\u4e49&#xff1b;\u5f53\u4f60\u80fd\u770b\u5230\u4e24\u4e2a Block \u91c7\u6837\u5230\u4e0d\u540c SM&#xff0c;\u53c8\u77e5\u9053\u7a0b\u5e8f\u4e0d\u80fd\u4f9d\u8d56\u8be5\u7f16\u53f7\u65f6&#xff0c;\u4f60\u5df2\u7ecf\u5f00\u59cb\u4ee5 CUDA \u5de5\u7a0b\u5e08\u7684\u65b9\u5f0f\u601d\u8003\u3002<\/p>\n<p>\u5b8c\u6210\u672c\u6587\u7684\u4e09\u4e2a\u7a0b\u5e8f\u3001\u516b\u4e2a\u5b9e\u9a8c\u548c\u5341\u9053\u81ea\u6d4b\u9898\u540e&#xff0c;\u518d\u8fdb\u5165\u7b2c\u4e09\u7bc7\u3002\u90a3\u65f6&#xff0c;\u5411\u91cf\u52a0\u6cd5\u4e0d\u4f1a\u53ea\u662f\u201c\u590d\u5236\u4e00\u6bb5\u7ecf\u5178\u4ee3\u7801\u201d&#xff0c;\u800c\u4f1a\u6210\u4e3a\u4f60\u7b2c\u4e00\u6b21\u72ec\u7acb\u8bbe\u8ba1\u7ebf\u7a0b\u6570\u91cf\u3001\u7d22\u5f15\u3001\u8fb9\u754c\u3001\u6570\u636e\u6d41\u548c\u9a8c\u8bc1\u65b9\u6cd5\u7684 GPU \u7a0b\u5e8f\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>CUDA\u7f16\u7a0b\u5b9e\u621802&#xff1a;\u8ba4\u8bc6 GPU\u3001SM\u3001\u7ebf\u7a0b\u675f\u4e0e\u8ba1\u7b97\u80fd\u529b \u7cfb\u5217\u5b9a\u4f4d&#xff1a;\u4ece\u96f6\u5f00\u59cb&#xff0c;\u7528\u80fd\u591f\u8fd0\u884c\u3001\u80fd\u591f\u89c2\u5bdf\u3001\u80fd\u591f\u9a8c\u8bc1\u7684\u7a0b\u5e8f\u5b66\u4e60 CUDA\u3002 \u672c\u7bc7\u9002\u5408&#xff1a;\u5df2\u7ecf\u5b8c\u6210\u7b2c\u4e00\u7bc7\u73af\u5883\u642d\u5efa&#xff0c;\u80fd\u8fd0\u884c\u4e00\u4e2a\u7b80\u5355 Kernel&#xff0c;\u4f46\u4ecd\u7136\u5206\u4e0d\u6e05 GPU\u3001SM\u3001Block\u3001Thread\u3001Warp \u548c\u8ba1\u7b97\u80fd\u529b\u7684\u8bfb\u8005\u3002 \u9605\u8bfb\u540e\u7684\u5b9e\u9645\u6210\u679c&#xff1a;\u4f60\u5c06\u5f97\u5230\u4e00\u4efd\u81ea\u5df1\u7535\u8111\u7684 GPU \u80fd\u529b\u62a5\u544a&#xff0c;\u80fd\u591f\u7b97\u51fa\u7ebf\u7a0b\u7684\u5168\u5c40\u7f16\u53f7\u4e0e <\/p>\n","protected":false},"author":2,"featured_media":87743,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[9099,55],"topic":[],"class_list":["post-87748","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server","tag-9099","tag-c"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>CUDA\u7f16\u7a0b\u5b9e\u621802\uff1a\u8ba4\u8bc6 GPU\u3001SM\u3001\u7ebf\u7a0b\u675f\u4e0e\u8ba1\u7b97\u80fd\u529b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/87748.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CUDA\u7f16\u7a0b\u5b9e\u621802\uff1a\u8ba4\u8bc6 GPU\u3001SM\u3001\u7ebf\u7a0b\u675f\u4e0e\u8ba1\u7b97\u80fd\u529b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"CUDA\u7f16\u7a0b\u5b9e\u621802&#xff1a;\u8ba4\u8bc6 GPU\u3001SM\u3001\u7ebf\u7a0b\u675f\u4e0e\u8ba1\u7b97\u80fd\u529b \u7cfb\u5217\u5b9a\u4f4d&#xff1a;\u4ece\u96f6\u5f00\u59cb&#xff0c;\u7528\u80fd\u591f\u8fd0\u884c\u3001\u80fd\u591f\u89c2\u5bdf\u3001\u80fd\u591f\u9a8c\u8bc1\u7684\u7a0b\u5e8f\u5b66\u4e60 CUDA\u3002 \u672c\u7bc7\u9002\u5408&#xff1a;\u5df2\u7ecf\u5b8c\u6210\u7b2c\u4e00\u7bc7\u73af\u5883\u642d\u5efa&#xff0c;\u80fd\u8fd0\u884c\u4e00\u4e2a\u7b80\u5355 Kernel&#xff0c;\u4f46\u4ecd\u7136\u5206\u4e0d\u6e05 GPU\u3001SM\u3001Block\u3001Thread\u3001Warp \u548c\u8ba1\u7b97\u80fd\u529b\u7684\u8bfb\u8005\u3002 \u9605\u8bfb\u540e\u7684\u5b9e\u9645\u6210\u679c&#xff1a;\u4f60\u5c06\u5f97\u5230\u4e00\u4efd\u81ea\u5df1\u7535\u8111\u7684 GPU \u80fd\u529b\u62a5\u544a&#xff0c;\u80fd\u591f\u7b97\u51fa\u7ebf\u7a0b\u7684\u5168\u5c40\u7f16\u53f7\u4e0e\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/87748.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-30T12:49:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/07\/20260730124939-6a6b48631e509.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"33 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/87748.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/87748.html\",\"name\":\"CUDA\u7f16\u7a0b\u5b9e\u621802\uff1a\u8ba4\u8bc6 GPU\u3001SM\u3001\u7ebf\u7a0b\u675f\u4e0e\u8ba1\u7b97\u80fd\u529b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-07-30T12:49:47+00:00\",\"dateModified\":\"2026-07-30T12:49:47+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/87748.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/87748.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/87748.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CUDA\u7f16\u7a0b\u5b9e\u621802\uff1a\u8ba4\u8bc6 GPU\u3001SM\u3001\u7ebf\u7a0b\u675f\u4e0e\u8ba1\u7b97\u80fd\u529b\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"CUDA\u7f16\u7a0b\u5b9e\u621802\uff1a\u8ba4\u8bc6 GPU\u3001SM\u3001\u7ebf\u7a0b\u675f\u4e0e\u8ba1\u7b97\u80fd\u529b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/87748.html","og_locale":"zh_CN","og_type":"article","og_title":"CUDA\u7f16\u7a0b\u5b9e\u621802\uff1a\u8ba4\u8bc6 GPU\u3001SM\u3001\u7ebf\u7a0b\u675f\u4e0e\u8ba1\u7b97\u80fd\u529b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"CUDA\u7f16\u7a0b\u5b9e\u621802&#xff1a;\u8ba4\u8bc6 GPU\u3001SM\u3001\u7ebf\u7a0b\u675f\u4e0e\u8ba1\u7b97\u80fd\u529b \u7cfb\u5217\u5b9a\u4f4d&#xff1a;\u4ece\u96f6\u5f00\u59cb&#xff0c;\u7528\u80fd\u591f\u8fd0\u884c\u3001\u80fd\u591f\u89c2\u5bdf\u3001\u80fd\u591f\u9a8c\u8bc1\u7684\u7a0b\u5e8f\u5b66\u4e60 CUDA\u3002 \u672c\u7bc7\u9002\u5408&#xff1a;\u5df2\u7ecf\u5b8c\u6210\u7b2c\u4e00\u7bc7\u73af\u5883\u642d\u5efa&#xff0c;\u80fd\u8fd0\u884c\u4e00\u4e2a\u7b80\u5355 Kernel&#xff0c;\u4f46\u4ecd\u7136\u5206\u4e0d\u6e05 GPU\u3001SM\u3001Block\u3001Thread\u3001Warp \u548c\u8ba1\u7b97\u80fd\u529b\u7684\u8bfb\u8005\u3002 \u9605\u8bfb\u540e\u7684\u5b9e\u9645\u6210\u679c&#xff1a;\u4f60\u5c06\u5f97\u5230\u4e00\u4efd\u81ea\u5df1\u7535\u8111\u7684 GPU \u80fd\u529b\u62a5\u544a&#xff0c;\u80fd\u591f\u7b97\u51fa\u7ebf\u7a0b\u7684\u5168\u5c40\u7f16\u53f7\u4e0e","og_url":"https:\/\/www.wsisp.com\/helps\/87748.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-07-30T12:49:47+00:00","og_image":[{"url":"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/07\/20260730124939-6a6b48631e509.png"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"33 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/87748.html","url":"https:\/\/www.wsisp.com\/helps\/87748.html","name":"CUDA\u7f16\u7a0b\u5b9e\u621802\uff1a\u8ba4\u8bc6 GPU\u3001SM\u3001\u7ebf\u7a0b\u675f\u4e0e\u8ba1\u7b97\u80fd\u529b - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-07-30T12:49:47+00:00","dateModified":"2026-07-30T12:49:47+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/87748.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/87748.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/87748.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"CUDA\u7f16\u7a0b\u5b9e\u621802\uff1a\u8ba4\u8bc6 GPU\u3001SM\u3001\u7ebf\u7a0b\u675f\u4e0e\u8ba1\u7b97\u80fd\u529b"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/87748","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=87748"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/87748\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media\/87743"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=87748"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=87748"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=87748"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=87748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}