2.1
 
 OpenACC
 example
 :
 Pi
 2.2
 CUDA
 Example
 :
 MatrixMul
 
 
 
 step1
 :
 CPU
 code
 
 
 
 step2
 :
 CPU
 launcher
 
 
 
 step3
 :
 GPU
Upcoming SlideShare
Loading in …5
×

[D1]deview 2012 nvidia

2,487 views

Published on

Published in: Technology, Art & Photos
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,487
On SlideShare
0
From Embeds
0
Number of Embeds
1,327
Actions
Shares
0
Downloads
53
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

[D1]deview 2012 nvidia

  1. 1. 2.1
  2. 2.  
  3. 3.  OpenACC
  4. 4.  example
  5. 5.  :
  6. 6.  Pi
  7. 7.  2.2
  8. 8.  CUDA
  9. 9.  Example
  10. 10.  :
  11. 11.  MatrixMul
  12. 12.  
  13. 13.  
  14. 14.  
  15. 15.  step1
  16. 16.  :
  17. 17.  CPU
  18. 18.  code
  19. 19.  
  20. 20.  
  21. 21.  
  22. 22.  step2
  23. 23.  :
  24. 24.  CPU
  25. 25.  launcher
  26. 26.  
  27. 27.  
  28. 28.  
  29. 29.  step3
  30. 30.  :
  31. 31.  GPU
  32. 32.  launcher
  33. 33.  
  34. 34.  
  35. 35.  
  36. 36.  step4
  37. 37.  :
  38. 38.  Memory
  39. 39.  Map
  40. 40.  
  41. 41.  
  42. 42.  
  43. 43.  step5
  44. 44.  :
  45. 45.  GPU
  46. 46.  kernel
  47. 47.  
  48. 48.  
  49. 49.  
  50. 50.  step6
  51. 51.  :
  52. 52.  Optimization
  53. 53.  
  54. 54. 1.
  55. 55.  CUDA
  56. 56.  Architecture
  57. 57.  
  58. 58. MultiCore
  59. 59.  Era
  60. 60.   singleCore
  61. 61.   multiCore
  62. 62.   singleCore
  63. 63.  
  64. 64.  Era:
  65. 65.  
  66. 66.   매년
  67. 67.  CPU
  68. 68.  업그레이드만으로
  69. 69.  S/W
  70. 70.  성능
  71. 71.  향상.
  72. 72.  
  73. 73.   multiCore
  74. 74.  Era
  75. 75.  :
  76. 76.  
  77. 77.   이제
  78. 78.  CPU를
  79. 79.  바꿔도
  80. 80.  
  81. 81.  성능
  82. 82.  향상이
  83. 83.  전혀
  84. 84.  없음
  85. 85.  
  86. 86.     일반
  87. 87.  앱
  88. 88.  개발자도
  89. 89.  성능
  90. 90.  향상을
  91. 91.  위해서는
  92. 92.  병렬
  93. 93.  프로그래밍
  94. 94.  고려
  95. 95.  
  96. 96. CPU(multiCore)
  97. 97.  vs
  98. 98.  GPU(maniCore)
  99. 99.   Intel
  100. 100.  “Sandy
  101. 101.  Bridge”
  102. 102.  CPU
  103. 103.   NVIDIA
  104. 104.  “Kepler
  105. 105.  GK104”
  106. 106.  GPU
  107. 107.   GDDR5
  108. 108.  메모리
  109. 109.  I/O
  110. 110.   Core
  111. 111.   Core
  112. 112.   Core
  113. 113.   Core
  114. 114.   SMX
  115. 115.   GPC
  116. 116.   I/O
  117. 117.   System
  118. 118.  
  119. 119.   PCI-E
  120. 120.  I/O
  121. 121.   내장
  122. 122.   I/O
  123. 123.   GPU
  124. 124.   GDDR5
  125. 125.  메모리
  126. 126.  I/O
  127. 127.   NVENC
  128. 128.   Raster
  129. 129.   Sch
  130. 130.   L3
  131. 131.  Cache
  132. 132.   DDR3
  133. 133.  메모리
  134. 134.  I/O
  135. 135.   I/O
  136. 136.   GDDR5
  137. 137.  메모리
  138. 138.  I/O
  139. 139.   Core
  140. 140.   SMX
  141. 141.  FP
  142. 142.  Perf.
  143. 143.  
  144. 144.  per
  145. 145.  chip
  146. 146.  CPU
  147. 147.  
  148. 148.  
  149. 149.  
  150. 150.  
  151. 151.  
  152. 152.  Sandy
  153. 153.  Bridge
  154. 154.  :
  155. 155.  
  156. 156.  
  157. 157.  
  158. 158.  
  159. 159.  
  160. 160.  
  161. 161.  32FP
  162. 162.  =
  163. 163.  
  164. 164.  
  165. 165.  
  166. 166.  
  167. 167.  
  168. 168.  
  169. 169.  
  170. 170.  4
  171. 171.  Core
  172. 172.  (w/
  173. 173.  2
  174. 174.  HT,
  175. 175.  4
  176. 176.  AVE)
  177. 177.  GPU
  178. 178.  
  179. 179.  
  180. 180.  
  181. 181.  
  182. 182.  
  183. 183.  
  184. 184.  
  185. 185.  
  186. 186.  
  187. 187.  
  188. 188.  
  189. 189.  
  190. 190.  
  191. 191.  
  192. 192.  GK104
  193. 193.  :
  194. 194.  
  195. 195.  1536
  196. 196.  FP
  197. 197.  =
  198. 198.  1536
  199. 199.  Core
  200. 200.  
  201. 201.  
  202. 202.  
  203. 203.  
  204. 204.  
  205. 205.  
  206. 206.  
  207. 207.  
  208. 208.  
  209. 209.  
  210. 210.  
  211. 211.  
  212. 212.  
  213. 213.  
  214. 214.  
  215. 215.  
  216. 216.  
  217. 217.  
  218. 218.  
  219. 219.  
  220. 220.  
  221. 221.  
  222. 222.  GK110
  223. 223.  :
  224. 224.  
  225. 225.  3072
  226. 226.  FP
  227. 227.  =
  228. 228.  3072
  229. 229.  Core
  230. 230.  
  231. 231. CUDA
  232. 232.  enable
  233. 233.  GPUs
  234. 234.   Tegra
  235. 235.   Geforce
  236. 236.   Quadro
  237. 237.  K5000
  238. 238.  
  239. 239.   Tesla
  240. 240.  K10/20
  241. 241.  
  242. 242.  (for
  243. 243.  moble
  244. 244.  :
  245. 245.  not
  246. 246.  yet,
  247. 247.  so (for
  248. 248.  gaming
  249. 249.  PC)
  250. 250.   (for
  251. 251.  workstation)
  252. 252.   (for
  253. 253.  server)
  254. 254.   on)
  255. 255.  you
  256. 256.  can
  257. 257.  find
  258. 258.  CUDA
  259. 259.  enabled
  260. 260.  GPUs
  261. 261.  everywhere
  262. 262.  !!!
  263. 263.  
  264. 264. GPGPU
  265. 265.  Programming
  266. 266.  Model
  267. 267.  History
  268. 268.   1985
  269. 269.  :
  270. 270.  Amiga
  271. 271.  -
  272. 272.  (2D)
  273. 273.  graphics
  274. 274.  accelerator
  275. 275.   1980s
  276. 276.  
  277. 277.   1990
  278. 278.  :
  279. 279.  SGI,
  280. 280.  IRIS
  281. 281.  GL
  282. 282.  for
  283. 283.  Onyx
  284. 284.  system
  285. 285.  
  286. 286.   1992
  287. 287.  :
  288. 288.  OpenGL:
  289. 289.  
  290. 290.  OpenGL
  291. 291.  ARB
  292. 292.  founded
  293. 293.   1990s
  294. 294.   1996
  295. 295.  :
  296. 296.  3dfx,
  297. 297.  
  298. 298.  Voodoo
  299. 299.  -
  300. 300.  3D
  301. 301.  accelerator
  302. 302.  ,
  303. 303.  acquired
  304. 304.  by
  305. 305.  NVIDIA(2000)
  306. 306.   1996
  307. 307.  :
  308. 308.  Microsoft,
  309. 309.  DirectX
  310. 310.  accelerate
  311. 311.  3D
  312. 312.  
  313. 313.   1997
  314. 314.  :
  315. 315.  OpenGL,
  316. 316.  OpenGL
  317. 317.  1.1
  318. 318.   2000s
  319. 319.   2002
  320. 320.  :
  321. 321.  NVIDIA,
  322. 322.  first
  323. 323.  GPUs
  324. 324.  with
  325. 325.  programmable
  326. 326.  vertex,
  327. 327.  fragment
  328. 328.  shaders
  329. 329.  
  330. 330.   2002
  331. 331.  :
  332. 332.  Mark
  333. 333.  Harris,
  334. 334.  GPGPU
  335. 335.  
  336. 336.   2003
  337. 337.  :
  338. 338.  Lib
  339. 339.  Sh
  340. 340.  
  341. 341.   2003
  342. 342.  :
  343. 343.  Ian
  344. 344.  Buck,
  345. 345.  BrookGPU
  346. 346.  language
  347. 347.  
  348. 348.   2006
  349. 349.  :
  350. 350.  NVIDIA,
  351. 351.  G80
  352. 352.  -
  353. 353.  Unified
  354. 354.  shader
  355. 355.  architecture:
  356. 356.  fully
  357. 357.  programmable
  358. 358.  units
  359. 359.  
  360. 360.   2006
  361. 361.  :
  362. 362.  NVIDIA,
  363. 363.  CUDA
  364. 364.  
  365. 365.   2006
  366. 366.  :
  367. 367.  PeakStream,
  368. 368.  PeakStream
  369. 369.  support
  370. 370.  GPU,
  371. 371.  acquired
  372. 372.  by
  373. 373.  Google(2007)
  374. 374.  
  375. 375.   2007
  376. 376.  :
  377. 377.  AMD,
  378. 378.  Stream
  379. 379.  SDK(Close-to-Metal,
  380. 380.  Brook++)
  381. 381.  
  382. 382.   2008
  383. 383.  :
  384. 384.  RapidMind,
  385. 385.  sh-like
  386. 386.  language,
  387. 387.  acquired
  388. 388.  by
  389. 389.  Intel(2009)
  390. 390.  
  391. 391.   2008
  392. 392.  :
  393. 393.  Khronos,
  394. 394.  Apple,
  395. 395.  OpenCL
  396. 396.  
  397. 397.  
  398. 398.   2009
  399. 399.  :
  400. 400.  Microsoft,
  401. 401.  DirectCompute
  402. 402.   2010s
  403. 403.   2010
  404. 404.  :
  405. 405.  NVIDIA,
  406. 406.  Parallel
  407. 407.  NSight
  408. 408.  Debugger
  409. 409.  for
  410. 410.  Visual
  411. 411.  Studio
  412. 412.  1.0
  413. 413.  
  414. 414.   2010
  415. 415.  :
  416. 416.  PGI,
  417. 417.  PGI
  418. 418.  Accelerator
  419. 419.  
  420. 420.   2011
  421. 421.  :
  422. 422.  Microsoft,
  423. 423.  C++
  424. 424.  AMP
  425. 425.   2012
  426. 426.  :
  427. 427.  NVIDIA,
  428. 428.  NSight
  429. 429.  for
  430. 430.  Eclipse
  431. 431.  Edition
  432. 432.   2012
  433. 433.  :
  434. 434.  OpenACC,
  435. 435.  PGI,
  436. 436.  CAPS,
  437. 437.  CRAY,
  438. 438.  NVIDIA
  439. 439.  support
  440. 440.  OpenACC
  441. 441.  
  442. 442. CUDA
  443. 443.  Parallel
  444. 444.  Model
  445. 445.  OpenMP
  446. 446.  Parallel
  447. 447.   CUDA
  448. 448.  Parallel
  449. 449.  CPU
  450. 450.   CPU
  451. 451.   CPU
  452. 452.   GPU
  453. 453.   Core3000
  454. 454.   core02
  455. 455.   core04
  456. 456.   Core01
  457. 457.  
  458. 458. CUDA
  459. 459.  Work
  460. 460.  Model
  461. 461.   Step1.
  462. 462.   upload
  463. 463.  input
  464. 464.  data
  465. 465.   *ptr_cpu
  466. 466.   *ptr_gpu
  467. 467.   Step2.
  468. 468.   FOR
  469. 469.  LOOP
  470. 470.   launch
  471. 471.  GPU
  472. 472.  Kernel
  473. 473.   Step3.
  474. 474.   download
  475. 475.  result
  476. 476.  data
  477. 477.  
  478. 478.   *ptr_cpu
  479. 479.   *ptr_gpu
  480. 480.  
  481. 481. CUDA
  482. 482.  Acceleration
  483. 483.  Approach
  484. 484.   C/C++,
  485. 485.  Fortran,
  486. 486.  python
  487. 487.  5.
  488. 488.  CUDA
  489. 489.  
  490. 490.  development
  491. 491.   Matlab,
  492. 492.  Mathematica,
  493. 493.  Octave
  494. 494.   4.
  495. 495.  CUDA
  496. 496.  tools
  497. 497.   3.
  498. 498.  OpenACC
  499. 499.  Directives
  500. 500.   PGI,
  501. 501.  CAPS,
  502. 502.  Cray
  503. 503.  Compiler
  504. 504.   2.
  505. 505.  CUDA
  506. 506.  Libraries
  507. 507.   cuFFT,
  508. 508.  cuBLAS,
  509. 509.  CULA
  510. 510.   Ansys
  511. 511.  Mech,
  512. 512.  Fluent,
  513. 513.  
  514. 514.  
  515. 515.   1.
  516. 516.  CUDA
  517. 517.  ISV
  518. 518.  Apps
  519. 519.  
  520. 520. CUDA
  521. 521.  ISV
  522. 522.  Apps
  523. 523.  http://www.nvidia.com/object/gpu-applications.html
  524. 524.  
  525. 525.   ANSYS
  526. 526.  Mech.
  527. 527.  14
  528. 528.  
  529. 529.   Adobe
  530. 530.  CS6
  531. 531.  
  532. 532. Library
  533. 533.  :
  534. 534.  cuFFT/cuBLAS
  535. 535.  •  cuFFT
  536. 536.  
  537. 537.  
  538. 538.  
  539. 539.  :
  540. 540.  CUDA
  541. 541.  version
  542. 542.  FFT
  543. 543.   –  신호처리,
  544. 544.  영상처리
  545. 545.  분야
  546. 546.  활용
  547. 547.   –  FFTW와
  548. 548.  함수구조
  549. 549.  동일
  550. 550.  •  cuBLAS
  551. 551.  
  552. 552.  :
  553. 553.  CUDA
  554. 554.  version
  555. 555.  BLAS
  556. 556.   –  수치해석
  557. 557.  분야
  558. 558.  활용
  559. 559.   –  MKL와
  560. 560.  함수구조
  561. 561.  동일
  562. 562.  •  cuSpMV
  563. 563.  :
  564. 564.  CUDA
  565. 565.  version
  566. 566.  SpMV
  567. 567.   –  수치해석
  568. 568.  분야
  569. 569.  활용
  570. 570.  
  571. 571. Library
  572. 572.  :
  573. 573.  SAXPY
  574. 574.  with
  575. 575.  cuBLAS
  576. 576.   *cpu_ptr
  577. 577.   *gpu_ptr
  578. 578.  cublasInit();
  579. 579.  
  580. 580.  
  581. 581.  cublasSetVector(N,
  582. 582.  sizeof(x[0]),
  583. 583.  x,
  584. 584.  1,
  585. 585.  d_x,
  586. 586.  1);
  587. 587.  
  588. 588.  cublasSetVector(N,
  589. 589.  sizeof(y[0]),
  590. 590.  y,
  591. 591.  1,
  592. 592.  d_y,
  593. 593.  1);
  594. 594.  
  595. 595.  
  596. 596.  cublasSaxpy
  597. 597.  (N,
  598. 598.  2.0,
  599. 599.  d_x,
  600. 600.  1,
  601. 601.  d_y,
  602. 602.  1);
  603. 603.  
  604. 604.  
  605. 605.  cublasGetVector(N,
  606. 606.  sizeof(y[0]),
  607. 607.  d_y,
  608. 608.  1,
  609. 609.  y,
  610. 610.  1);
  611. 611.  
  612. 612.  
  613. 613.  
  614. 614. OpenACC
  615. 615.  :
  616. 616.  website
  617. 617.  http://www.openacc.org
  618. 618.  
  619. 619.   PGI
  620. 620.  Compiler
  621. 621.   pgcc
  622. 622.  ­–acc
  623. 623.  saxpy.c
  624. 624.   CAPS
  625. 625.  HMPP
  626. 626.  Compiler
  627. 627.   hmpp
  628. 628.  gcc
  629. 629.  saxpy.c
  630. 630.   CRAY
  631. 631.  Compiler
  632. 632.  
  633. 633. OpenACC
  634. 634.  :
  635. 635.  SAXPY
  636. 636.  example
  637. 637.  •  openMP
  638. 638.  level
  639. 639.  GPU
  640. 640.  Acceleration
  641. 641.   OpenMP
  642. 642.  Parallel
  643. 643.  
  644. 644.  with
  645. 645.  4
  646. 646.  Core
  647. 647.  CPU
  648. 648.   OpenMP
  649. 649.  Parallel
  650. 650.  
  651. 651.  with
  652. 652.  3000
  653. 653.  Core
  654. 654.  GPU
  655. 655.   void
  656. 656.  
  657. 657.   void
  658. 658.  
  659. 659.   saxpy(int
  660. 660.  n,
  661. 661.  float
  662. 662.  a,
  663. 663.  float
  664. 664.  *x,
  665. 665.  float
  666. 666.  *y)
  667. 667.  {
  668. 668.  
  669. 669.   saxpy(int
  670. 670.  n,
  671. 671.  float
  672. 672.  a,
  673. 673.  float
  674. 674.  *x,
  675. 675.  float
  676. 676.  *y)
  677. 677.  {
  678. 678.  
  679. 679.  
  680. 680.  
  681. 681.  #pragma
  682. 682.  omp
  683. 683.  parallel
  684. 684.  
  685. 685.  
  686. 686.  #pragma
  687. 687.  acc
  688. 688.  kernels
  689. 689.  
  690. 690.  
  691. 691.  
  692. 692.  {
  693. 693.  
  694. 694.  
  695. 695.  {
  696. 696.  
  697. 697.  
  698. 698.  
  699. 699.  
  700. 700.  
  701. 701.  
  702. 702.  for
  703. 703.  (int
  704. 704.  i
  705. 705.  =
  706. 706.  0;
  707. 707.  i
  708. 708.  
  709. 709.  n;
  710. 710.  ++i)
  711. 711.  {
  712. 712.  
  713. 713.  
  714. 714.  
  715. 715.  
  716. 716.  
  717. 717.  
  718. 718.  for
  719. 719.  (int
  720. 720.  i
  721. 721.  =
  722. 722.  0;
  723. 723.  i
  724. 724.  
  725. 725.  n;
  726. 726.  ++i)
  727. 727.  {
  728. 728.  
  729. 729.  
  730. 730.  
  731. 731.  
  732. 732.  
  733. 733.  
  734. 734.  
  735. 735.  
  736. 736.  y[i]
  737. 737.  =
  738. 738.  a*x[i]
  739. 739.  +
  740. 740.  y[i];
  741. 741.  
  742. 742.  
  743. 743.  
  744. 744.  
  745. 745.  
  746. 746.  
  747. 747.  
  748. 748.  
  749. 749.  
  750. 750.  
  751. 751.  
  752. 752.  y[i]
  753. 753.  =
  754. 754.  a*x[i]
  755. 755.  +
  756. 756.  y[i];
  757. 757.  
  758. 758.  
  759. 759.  
  760. 760.  
  761. 761.  
  762. 762.  
  763. 763.  
  764. 764.  }
  765. 765.  
  766. 766.  
  767. 767.  
  768. 768.  
  769. 769.  
  770. 770.  
  771. 771.  }
  772. 772.  
  773. 773.  
  774. 774.  }
  775. 775.  
  776. 776.  
  777. 777.  
  778. 778.  }
  779. 779.  
  780. 780.   }
  781. 781.   }
  782. 782.  
  783. 783. CUDA
  784. 784.  :
  785. 785.  SAXPY
  786. 786.  example
  787. 787.  __global__
  788. 788.  void
  789. 789.  
  790. 790.  saxpy(int
  791. 791.  n,
  792. 792.  float
  793. 793.  a,
  794. 794.  float
  795. 795.  *x,
  796. 796.  float
  797. 797.  *y)
  798. 798.  {
  799. 799.  
  800. 800.  
  801. 801.  
  802. 802.  
  803. 803.  
  804. 804.  
  805. 805.  int
  806. 806.  i
  807. 807.  =
  808. 808.  blockIdx.x*blockDim.x
  809. 809.  +
  810. 810.  threadIdx.x;
  811. 811.  
  812. 812.  
  813. 813.  
  814. 814.  
  815. 815.  
  816. 816.  
  817. 817.  if
  818. 818.  (i
  819. 819.  
  820. 820.  n)
  821. 821.  y[i]
  822. 822.  =
  823. 823.  a*x[i]
  824. 824.  +
  825. 825.  y[i];
  826. 826.  
  827. 827.  }
  828. 828.  
  829. 829.  
  830. 830.  cudaMemcpy(x,
  831. 831.  d_x,
  832. 832.  N,
  833. 833.  cudaMemcpyHostToDevice);
  834. 834.  
  835. 835.  cudaMemcpy(y,
  836. 836.  d_y,
  837. 837.  N,
  838. 838.  cudaMemcpyHostToDevice);
  839. 839.  
  840. 840.   upload
  841. 841.  
  842. 842.  saxpy
  843. 843.  4096,256
  844. 844.  (N,
  845. 845.  2.0,
  846. 846.  x,
  847. 847.  y);
  848. 848.  
  849. 849.   CUDA
  850. 850.  kernel
  851. 851.  Launch
  852. 852.  
  853. 853.  cudaMemcpy(d_y,
  854. 854.  y,
  855. 855.  N,
  856. 856.  cudaMemcpyDeviceToHost);
  857. 857.  
  858. 858.   download
  859. 859.  
  860. 860. 2.
  861. 861.  CUDA
  862. 862.  Converting
  863. 863.  Example
  864. 864.  
  865. 865. Example
  866. 866.  :
  867. 867.  PI
  868. 868.  
  869. 869.  #include
  870. 870.  stdio.h
  871. 871.  #include
  872. 872.  stdlib.h
  873. 873.  int
  874. 874.  main
  875. 875.  (int
  876. 876.  argc,
  877. 877.  char
  878. 878.  *argv[])
  879. 879.  {
  880. 880.  
  881. 881.  
  882. 882.  
  883. 883.  
  884. 884.  int
  885. 885.  nthreads,
  886. 886.  tid;
  887. 887.  
  888. 888.  
  889. 889.  
  890. 890.  
  891. 891.  int
  892. 892.  i,
  893. 893.  INTER;
  894. 894.  
  895. 895.  
  896. 896.  
  897. 897.  
  898. 898.  
  899. 899.  double
  900. 900.  n_1,
  901. 901.  x,
  902. 902.  pi
  903. 903.  =
  904. 904.  0.0;
  905. 905.  
  906. 906.  
  907. 907.  
  908. 908.  
  909. 909.  INTER=100;
  910. 910.  
  911. 911.  
  912. 912.  
  913. 913.  
  914. 914.  n_1
  915. 915.  =
  916. 916.  1.0
  917. 917.  /
  918. 918.  (double)INTER
  919. 919.  ;
  920. 920.  
  921. 921.  
  922. 922.  
  923. 923.  
  924. 924.  
  925. 925.  
  926. 926.  
  927. 927.  
  928. 928.  
  929. 929.  
  930. 930.  
  931. 931.  for
  932. 932.  (i
  933. 933.  =
  934. 934.  0;
  935. 935.  i
  936. 936.  
  937. 937.  INTER;
  938. 938.  i++)
  939. 939.  
  940. 940.  
  941. 941.  
  942. 942.  
  943. 943.  
  944. 944.  
  945. 945.  
  946. 946.  
  947. 947.  {

×