¥Ø¿ý²Ä¤@½g²z½×½g
²Ä1³¹°ª©Ê¯àpºâ·§z3
1.1°ª©Ê¯àpºâ·§©À¿ëªR3
1.1.1¦}¦æpºâ¡B°ª©Ê¯àpºâ©M¶W¯Åpºâ3
1.1.2¶W¯Åpºâ¾÷»P¶W¯Åpºâ¤¤¤ß4
1.2pºâ¬ì¾Ç5
1.3°ª©Ê¯àpºâµo®i¥v5
1.4°ª©Ê¯àpºâ²¤¶6
1.5¦V¶q¾÷»P°}¦C¾÷8
1.6¥»³¹¤pµ²9
²Ä2³¹GPU·§z10
2.1GPU¬O¤°¤\10
2.2¨ó³B²z¾¹10
2.3GPU»PÅã¥dªºÃö¨t11
2.4GPU/Åã¥dÁʶRª`·N¨Æ¶µ11
2.5¬°¤°¤\n¾ÇGPU½sµ{12
2.6GPU»PCPU¿ëªR13
2.7GPUµo®i²¥v14
2.8GPU½sµ{¤èªk14
2.9CPU/GPU²§ºc¨t²Î16
²Ä3³¹GPUµw¥ó¬[ºc17
3.1GPU¬[ºc17
3.1.1Tesla¬[ºc18
3.1.2Fermi¬[ºc20
3.1.3Kepler¬[ºc21
3.1.4Maxwell¬[ºc23
3.1.5Pascal¬[ºc243.2Kernelªºµw¥ó¬M®g28
3.3GPU¦sÀxÅé¨t29
3.4GPUpºâ¯à¤O30
GPU½sµ{»PÀu¤Æ¡X¡X¤j²³°ª©Ê¯àpºâ¥Ø¿ý²Ä4³¹GPU³n¥óÅé¨t33
4.1GPU³n¥ó¥ÍºA¨t²Î33
4.2CUDAToolkit34
4.2.1NVCC½sĶ¾¹34
4.2.2cuobjdump35
4.3CUDAÀô¹Ò¦w¸Ë36
4.3.1Windows7¦w¸ËCUDA4.236
4.3.2Linux¤U¦w¸ËCUDA38
²Ä5³¹CUDAC½sµ{41
5.1CUDA½sµ{¼Ò«¬41
5.2CUDA½sµ{¤C¨B¦±42
5.3ÅX°ÊAPI»P¹B¦æ®ÉAPI42
5.4CUDA¹B¦æ®É¨ç¼Æ43
5.4.1³]³ÆºÞ²z¨ç¼Æ43
5.4.2¦sÀxºÞ²z¨ç¼Æ45
5.4.3¼Æ¾Ú¶Ç¿é¨ç¼Æ48
5.4.4½uµ{ºÞ²z¨ç¼Æ51
5.4.5¬yºÞ²z¨ç¼Æ52
5.4.6¨Æ¥óºÞ²z¨ç¼Æ52
5.4.7¯¾²zºÞ²z¨ç¼Æ53
5.4.8°õ¦æ±±¨î¨ç¼Æ55
5.4.9¿ù»~³B²z¨ç¼Æ55
5.4.10¹Ï§Î¾Ç¤¬¾Þ§@¨ç¼Æ57
5.4.11OpenGL¤¬¾Þ§@¨ç¼Æ58
5.4.12Direct3D¤¬¾Þ§@¨ç¼Æ59
5.5CUDAC»y¨¥ÂX®i60
5.6gridúQblockúQthread¤Tºû¼Ò«¬61
²Ä¤G½g¤Jªù½g
²Ä6³¹¦V¶q¥[ªk67
6.1¦V¶q¥[ªk¤Î¨ä¦ê¦æ¥N½X67
6.2³æblock³æthread¦V¶q¥[68
6.3³æblock¦hthread¦V¶q¥[68
6.4¦hblock¦hthread¦V¶q¥[69
6.5CUBLAS®w¦V¶q¥[ªk70
6.6¹êÅçµ²ªG¤ÀªR»Pµ²½×71
6.6.1¥»®Ñ¹êÅ祻O71
6.6.2¹êÅçµ²ªG71
6.6.3µ²½×71
6.7ª¾ÃÑÂIÁ`µ²72
6.8ÂX®i½m²ß75
²Ä7³¹Âk¬ù:¦V¶q¤º¿n76
7.1¦V¶q¤º¿n¤Î¨ä¦ê¦æ¥N½X76
7.2³æblock¤À´²Âk¬ù¦V¶q¤º¿n77
7.3³æblock§C½uµ{Âk¬ù¦V¶q¤º¿n78
7.4¦hblock¦V¶q¤º¿n(CPU¤G¦¸Âk¬ù)79
7.5¦hblock¦V¶q¤º¿n(GPU¤G¦¸Âk¬ù)81
7.6°ò¤_ì¤l¾Þ§@ªº¦hblock¦V¶q¤º¿n81
7.7p¼Æªk¹ê²{¦hblock¦V¶q¤º¿n84
7.8CUBLAS®w¦V¶q¤º¿n85
7.9¹êÅçµ²ªG»Pµ²½×86
7.9.1¹êÅçµ²ªG86
7.9.2µ²½×86
7.10Âk¬ùªº²`¤JÀu¤Æ±´°Q87
7.10.1block¼Æ¶q©Mthread¼Æ¶q¹ïÂk¬ù©Ê¯àªº¼vÅT87
7.10.2ºâ³N¹BºâÀu¤Æ88
7.10.3´î¤Ö¦P¨B¶}¾P89
7.10.4´`Àô®i¶}90
7.10.5Á`µ²91
7.11ª¾ÃÑÂIÁ`µ²91
7.12ÂX®i½m²ß94
²Ä8³¹¯x°}¼ªk95
8.1¯x°}¼ªk¤Î¨ä3ºØ¦ê¦æ¥N½X95
8.1.1¤@¯ë¯x°}¼ªk95
8.1.2´`Àô¥æ´«¯x°}¼ªk97
8.1.3Âà¸m¯x°}¼ªk98
8.1.4¹êÅçµ²ªG»P³ÌÀu¦ê¦æ¯x°}¼99
8.2grid½uµ{´`Àô¯x°}¼ªk100
8.3block½uµ{´`Àô¯x°}¼ªk101
8.4¦æ¦@¨É¦sÀx¯x°}¼ªk101
8.5´Ñ½L°}¦C¯x°}¼ªk103
8.6§PÂ_²¾°£105
8.7CUBLAS¯x°}¼ªk106
8.8¹êÅçµ²ªG¤ÀªR»Pµ²½×108
8.8.1¯x°}¼ºë«×¤ÀªR108
8.8.2¹êÅçµ²ªG¤ÀªR110
8.8.3¯BÂI¹Bºâ¯à¤O¤ÀªR111
8.9¦æ¦@¨É¦sÀx¯x°}¼ªk§ï¶i111
8.10ª¾ÃÑÂIÁ`µ²113
8.11ÂX®i½m²ß115
²Ä9³¹¯x°}Âà¸m116
9.1¯x°}Âà¸m¤Î¨ä¦ê¦æ¥N½X116
9.21D¯x°}Âà¸m117
9.32D¯x°}Âà¸m118
9.4¦@¨É¦sÀx2D¯x°}Âà¸m119
9.5¦@¨É¦sÀx2D¯x°}Âà¸mdiagonalÀu¤Æ120
9.6¹êÅçµ²ªG¤ÀªR»Pµ²½×121
9.7¦@¨É¦sÀx2D¯x°}Âà¸mªº²`¤JÀu¤Æ122
9.8ª¾ÃÑÂIÁ`µ²124
9.9ÂX®i½m²ß125
²Ä¤T½g´£°ª½g
²Ä10³¹¨÷¿n129
10.1¨÷¿n¤Î¨ä¦ê¦æ¹ê²{129
10.1.1¤@ºû¨÷¿n129
10.1.2¤Gºû¨÷¿n131
10.2GPU¤W1D¨÷¿n134
10.3M±`¶q1D¨÷¿n135
10.4M¦@¨É1D¨÷¿n136
10.5N¦@¨É1D¨÷¿n137
10.6¹êÅçµ²ªG¤ÀªR139
10.6.1ÂX®iªk1D¨÷¿n¹êÅçµ²ªG¤ÀªR139
10.6.2§PÂ_ªk»PÂX®iªk1D¨÷¿n¹ï¤ñ140
10.6.3¥[³t¤ñ¤ÀªR141
10.6.4½uµ{ºû«×¹ï©Ê¯àªº¼vÅT141
10.72D¨÷¿nªºGPU²¾´Ó»PÀu¤Æ142
10.7.1GPU¤W2D¨÷¿n142
10.7.2M±`¶q2D¨÷¿n143
10.7.3M±`¶qN¦@¨É2D¨÷¿n143
10.7.42D¨÷¿n¹êÅçµ²ªG¤ÀªR145
10.8ª¾ÃÑÂIÁ`µ²145
10.9ÂX®i½m²ß147
²Ä11³¹°Ò¼w³Õù¯S¶°148
11.1°Ò¼w³Õù¯S¶°¤Î¨ä¦ê¦æ¹ê²{148
11.2°Ò¼w³Õù¯S¶°ªºGPU¬M®g150
11.3¤@¨ÇÀu¤Æ¹Á¸Õ¤Î®ÄªG152
11.3.1³X¦s³sÄò152
11.3.2uchar4³X¦s¦X¦}153
11.3.34ºØ¹s«þ¨©153
11.3.4Á`µ²¤ÀªR155
11.4pºâ³q«H«Å|Àu¤Æ156
11.5¬ð¯}kernel°õ¦æ®É¶¡¨î159
11.6ª¾ÃÑÂIÁ`µ²160
11.7ÂX®i½m²ß162
²Ä12³¹±½´y:«eºó¨D©M163
12.1«eºó¨D©M¤Î¨ä¦ê¦æ¥N½X163
12.2KoggeúQStone¦}¦æ«eºó©M164
12.2.1ª½±µKoggeúQStone¤À¬q«eºó©M164
12.2.2¥æ¿ùKoggeúQStone¤À¬q«eºó©M165
12.2.3§¹¾ãKoggeúQStone«eºó©M166
12.3BrentúQKung¦}¦æ«eºó©M168
12.3.1BrentúQKung¤À¬q«eºó©M169
12.3.2¨â¿¼Æ¾ÚªºBrentúQKung¤À¬q«eºó©M170
12.3.3ÁקKbankconflictªº¨â¿¼Æ¾ÚBrentúQKung¤À¬q«eºó©M171
12.3.4§¹¾ãBrentúQKung«eºó©M173
12.4warp¤À¬qªºKoggeúQStone«eºó¨D©M174
12.5¹êÅçµ²ªG¤ÀªR»Pµ²½×177
12.6ª¾ÃÑÂIÁ`µ²179
12.7ÂX®i½m²ß180²Ä13³¹±Æ§Ç181
13.1¦ê¦æ±Æ§Ç¤Î¨ä©Ê¯à181
13.1.1¿ï¾Ü±Æ§Ç181
13.1.2«_ªw±Æ§Ç182
13.1.3§Ö³t±Æ§Ç182
13.1.4°ò¼Æ±Æ§Ç183
13.1.5Âù½Õ±Æ§Çºôµ¸185
13.1.6¦X¦}±Æ§Ç186
13.1.7¦ê¦æ±Æ§Ç©Ê¯à¹ï¤ñ187
13.2°ò¼Æ±Æ§Ç188
13.2.1°ò¼Æ±Æ§Ç·§z188
13.2.2³æblock°ò¼Æ±Æ§Ç189
13.2.3°ò¤_thrust®wªº°ò¼Æ±Æ§Ç196
13.3Âù½Õ±Æ§Çºôµ¸197
13.3.1Âù½Õ±Æ§Çºôµ¸·§z197
13.3.2³æblockÂù½Õ±Æ§Çºôµ¸199
13.3.3¦hblockÂù½Õ±Æ§Çºôµ¸202
13.4§Ö³t±Æ§Ç206
13.5¦X¦}±Æ§Ç207
13.6¹êÅçµ²ªG¤ÀªR»Pµ²½×208
13.7ª¾ÃÑÂIÁ`µ²209
13.8ÂX®i½m²ß210
²Ä14³¹´XºØ²³æ¹Ï¹³³B²z211
14.1¹Ï¹³ª½¤è¹Ï²Îp211
14.1.1¦ê¦æª½¤è¹Ï²Îp211
14.1.2¦}¦æª½¤è¹Ï²Îp211
14.1.3¹êÅçµ²ªG»P¤ÀªR212
14.2¤¤ÈÂoªi213
14.2.1¦ê¦æ¤¤ÈÂoªi214
14.2.21D¦}¦æ¤¤ÈÂoªi215
14.2.3¦@¨É1D¤¤ÈÂoªi216
14.2.4Âù«¦@¨É1D¤¤ÈÂoªi218
14.2.52D¦}¦æ¤¤ÈÂoªi221
14.2.6¦@¨É2D¤¤ÈÂoªi222
14.2.7¦@¨É2D¤¤ÈÂoªiªº§ï¶i227
14.2.8¹êÅçµ²ªG»P¤ÀªR229
14.3§¡ÈÂoªi231
14.3.1¦ê¦æ§¡ÈÂoªi231
14.3.2¦}¦æ§¡ÈÂoªi232
14.3.3¹êÅçµ²ªG»P¤ÀªR233
²Ä¥|½g®Ö¤ß½g
²Ä15³¹GPU°õ¦æ®Ö¤ß237
15.1·§z237
15.2ºâ³N¹Bºâ¤ä«ù238
15.2.1¾ã¼Æ¹Bºâ238
15.2.2¯BÂI¹Bºâ239
15.3ºâ³N¹Bºâ©Ê¯à240
15.4¤À¤ä³B²z242
15.5¦P¨B»P´ú®É246
15.5.1¦P¨B246
15.5.2´ú®É247
15.6¼Æ¾Ç¨ç¼Æ247
15.7warp»Pblockì»y249
15.7.1warpì»y249
15.7.2blockì»y250
15.8kernel±Ò°Ê¡B½uµ{¤Á´«©M´`Àô³B²z251
²Ä16³¹GPU¦sÀxÅé¨t254
16.1·§z254
16.2±H¦s¾¹259
16.3§½³¡¦sÀx261
16.4¦@¨É¦sÀx¾¹264
16.4.1¦@¨É¦sÀx¨Ï¥Î264
16.4.2bankconflict265
16.4.3volatileÃöÁä¦r266
16.4.4¦@¨É¦sÀxì¤l¾Þ§@267
16.5±`¶q¦sÀx268
16.6¥þ§½¦sÀx269
16.6.1¥þ§½¦sÀxªº¨Ï¥Î269
16.6.2¥þ§½¦sÀxªº¦X¦}³X°Ý271
16.6.3§Q¥Î¯¾²z½w¦s³q¹D³X°Ý¥þ§½¦sÀx271
16.7¯¾²z¦sÀx273
16.7.1CUDA¼Æ²Õ273
16.7.2¯¾²z¦sÀxªº¾Þ§@©M¨î274
16.7.3Ū¨ú¼Ò¦¡¡B¯¾²z§¤¼Ð¡BÂoªi¼Ò¦¡©M´M§}¼Ò¦¡276
16.7.4ªí±¦sÀx278
16.8¥D¾÷ºÝ¤º¦s281
16.9¹s«þ¨©¾Þ§@283
²Ä17³¹GPUÃöÁä©Ê¯à´úµû284
17.1GPU©Ê¯à´úµû·§z284
17.2GPU°Ñ¼ÆÀò¨ú286
17.2.1GPU¿ï¾Ü286
17.2.2¸Ô²Ó³]³Æ°Ñ¼ÆÀò¨ú287
17.3ºë½T´ú®É¤èªk¶×Á`288
17.3.1clock´ú®É289
17.3.2gettimeofday´ú®É289
17.3.3CUDA¨Æ¥ó´ú®É289
17.3.4cutil®w¨ç¼Æ´ú®É290
17.4GPU¹w¼ö»P±Ò°Ê¶}¾P290
17.5GPU¯BÂI¹Bºâ¯à¤O291
17.6GPU³X¦s±a¼e293
17.7GPU³q«H±a¼e295
17.8NVIDIAVisualProfiler296
17.9µ{§Ç©Ê¯à¹ï¤ñ¬ù©w298
²Ä18³¹CPUs©MGPUs¨ó¦P299
18.1¨ó¦PÀu¤Æ°òÂI299
18.1.1CPU¦}¦æ¯x°}¼°òÂI299
18.1.2GPU¦}¦æ¯x°}¼°òÂI300
18.2CPU/GPU¨ó¦P300
18.3¦hGPU¨ó¦P305
18.3.1CUDAª©¥»306
18.3.2OpenMP+CUDA308
18.3.3MPI+CUDA311
18.4CPUs/GPUs¨ó¦P314
18.4.1CUDAª©¥»314
18.4.2OpenMP+CUDA319
18.4.3MPI+OpenMP+CUDA324
18.5¥»³¹¤pµ²329
ªþ¿ý
ªþ¿ýA§PÂ_ªk1D¨÷¿n¥N½X333
ªþ¿ýA.1§PÂ_ªk1D¨÷¿nbasicª©333
ªþ¿ýA.2§PÂ_ªk1D¨÷¿nconstantª©334
ªþ¿ýA.3§PÂ_ªk1D¨÷¿nsharedª©336
ªþ¿ýA.4§PÂ_ªk1D¨÷¿ncacheª©337
ªþ¿ýB°Ò¼w³Õù¯S¶°ªº¨t¦CÀu¤Æ¥N½X340
ªþ¿ýB.1§¹¾ãª©¦ê¦æC¥N½X340
ªþ¿ýB.2cuda_1_0343
ªþ¿ýB.3cuda_0_2345
ªþ¿ýB.4cuda_zerocopy346
ªþ¿ýB.5cuda_1_0_zerocopy348
ªþ¿ýB.6cuda_0_0_zerocopy349
ªþ¿ýB.7cuda_0_2_zerocopy351
ªþ¿ýB.8cuda_2352
ªþ¿ýB.9cuda_1_2354
ªþ¿ýC´XºØ¹Ï¹³³B²z§¹¾ã·½½X357
ªþ¿ýC.1BMP¹Ï¹³Åª¼gÀY¤å¥ó357
ªþ¿ýC.2¹Ï¹³ª½¤è¹Ï¦ê¦æ¥N½X373
ªþ¿ýC.3¦ê¦æ¤¤ÈÂoªi¥N½X374
ªþ¿ýC.4¦}¦æ§¡ÈÂoªi¬ÛÃö¥N½X376
ªþ¿ýDnvprofÀ°§Uµæ³æ383
ªþ¿ýENVCCÀ°§Uµæ³æ388
ªþ¿ýF´XºØ±Æ§Çºâªk·½¥N½X399
ªþ¿ýF.1bitonic_sort_block¨ç¼Æ399
ªþ¿ýF.2GPU§Ö³t±Æ§Ç§¹¾ã¥N½X400
ªþ¿ýF.3GPU¦X¦}±Æ§Ç§¹¾ã¥N½X408
°Ñ¦Ò¤åÄm417