Vous êtes sur la page 1sur 22



$ 


 2    :57 /    


 / 1 
   34!
  
  ' 5672
 /

  
 8 2 /9

, 1 000+)+

 
 :, ' 2 
AA   ) L  * AA' $
3 7& AA $
3J. P++++
 AA'    
    5672    
!
 *)'  /   . 8 09
 AA      '
  $  
   
8 $
'



AA
 
 
   
 $    

   

 & & 
   

 ;
  1   < 7
 
' 1   




$
)'
 = 0 $   

 
   ,


 ( 
(  1
 << 

0  
 >    

  <    
     7
1
 2) 
 $ 
  
  5672
 ,


 
  $
  
  

 ; 
 
   
 $


  '  

 (  ( 
  

0  
 ?   
) (
 * ++ :57(  .
  
  
 
  
 5672
 =
  
   5672
 
5.) í 7J[& í 2F^ .SYWTIZHYNTSYT4UJS(1–5WTLWFRRNSL

Chapter 6
The OpenCL C Language
7KH2SHQ&/&SURJUDPPLQJODQJXDJHLVEDVHGRQWKH,62&VSHFLILFDWLRQZLWKVRPH
PRGLILFDWLRQVDQGUHVWULFWLRQV7KLVFKDSWHUKLJKOLJKWVLPSRUWDQWDVSHFWVRIWKH
2SHQ&/&ODQJXDJHWKDWDUHXVHGWRFUHDWHGNHUQHOVIRUH[HFXWLRQRQ 2SHQ&/GHYLFHV
)RUFRPSOHWHGHWDLOVRQWKHODQJXDJHVHHWKH2SHQ&/VSHFLILFDWLRQ

6.1 Restrictions
.H\UHVWULFWLRQVLQWKH2SHQ&/&ODQJXDJHDUH

… )XQFWLRQSRLQWHUVDUHQRWVXSSRUWHG
… %LWILHOGVDUHQRWVXSSRUWHG
… 9DULDEOHOHQJWKDUUD\VDUHQRWVXSSRUWHG
… 5HFXUVLRQLVQRWVXSSRUWHG
… 1R&VWDQGDUGKHDGHUVVXFKDVFW\SHVKHUUQRKVWGOLEKHWFFDQEHLQFOXGHG

6.2 Data Types


2SHQ&/&ODQJXDJHKDVPDQ\EXLOWLQVFDODUW\SHVWKDWVKRXOGEHIDPLOLDUWR&
SURJUDPPHUV$VHWRIYHFWRUGDWDW\SHVDQGYHFWRURSHUDWLRQVZHUHDOVRDGGHGIRU
HDVLHUPDQLSXODWLRQRIGDWDVHWVXFKDVPDWULFHV7KH 2SHQ&/LPSOHPHQWHQVXUHVWKDW
GDWDLVSRUWDEOHVRZKHQGDWDPXVWEHPRYHGIURPRQHGHYLFHWRDQRWKHUPVXFKDV
IURPD*38WRD&382SHQ&/HQVXUHVWKDWWKHGDWDDOZD\VHQGLDQVDIHDQGSURSHUO\
DOLJQHG7KLVVHFWLRQGHVFULEHVWKHYDULRXVGDWDW\SHVVXSSRUWHGE\2SHQ&/&

6.2.1 Scalar Data Types


7KHWDEOHEHORZVKRZVWKHFRPPRQEXLOWLQVFDODUGDWDW\SHVVXSSRUWHGE\2SHQ&/
&DVZHOODVWKHPDWFKLQJW\SHVGHFODUHGLQWKH2SHQ&/$3,WKDWFDQEHXVHGLQWKH
KRVWDSSOLFDWLRQ5HIHUWRWKH2SHQ&/VSHFLILFDWLRQIRUFRPSOHWHOLVWRIVXSSRUWHG
VFDODUGDWDW\SHV

7KH2SHQ&/&/DQJXDJH 
.SYWTIZHYNTSYT4UJS(1–5WTLWFRRNSL 5.) í 7J[& í 2F^

Table 6–1 Supported Scalar Data Types


2SHQ&/&7\SH 2SHQ&/$3,7\SHIRUKRVWDSS 'HVFULSWLRQ

ERRO QD FRQGLWLRQDOGDWDW\SHFDQEHHLWKHUWUXH


H[SDQGLQJWRFRQVWDQWRUIDOVHH[SDQGLQJWR
FRQVWDQW
FKDU FOBFKDU VLJQHGWZR
VFRPSOHPHQWELWLQWHJHU
XQVLJQHGFKDUXFKDU FOBXFKDU XQVLJQHGELWLQWHJHU
VKRUW FOBVKRUW VLJQHGWZR
VFRPSOHPHQWELWLQWHJHU
XQVLJQHGVKRUWXVKRUW FOBXVKRUW XQVLJQHGELWLQWHJHU
LQW FOBLQW VLJQHGWZR
VFRPSOHPHQWELWLQWHJHU
XQVLJQHGLQWXQLW FOBXLQW XQVLJQHGELWLQWHJHU
ORQJ FOBORQJ VLJQHGWZR
VFRPSOHPHQWELWLQWHJHU
XQVLJQHGORQJXORQJ FOBXORQJ XQVLJQHGELWLQWHJHU
IORDW FOBIORDW ,(((VLQJOHSUHFLVLRQIORDWLQJSRLQW

6.2.2 Vector Data Types


2QHDGGLWLRQWRWKH2SHQ&/&ODQJXDJHLVVXSSRUWRIYDULRXVYHFWRUGDWDW\SHV7KH
YHFWRUGDWDLVGHILQHGZLWKWKHW\SHQDPHIROORZE\DYDOXHQWKDWVSHFLILHVWKHQXPEHU
RIHOHPHQWVLQWKHYHFWRU)RUH[DPSOHDFRPSRQHQWIORDWLQJSRLQWYHFWRUZRXOGEH
IORDW7KHVXSSRUWHGFRPSRQHQWVDUHDQG7KHWDEOHEHORZVKRZVWKHEXLOW
LQYHFWRUGDWDW\SHVVXSSRUWHGE\2SHQ&/&DVZHOODVWKHPDWFKLQJW\SHVGHFODUHGLQ
WKH2SHQ&/$3,WKDWFDQEHXVHGLQWKHKRVWDSSOLFDWLRQ
Table 6–2 Supported Vector Data Types
2SHQ&/&7\SH 2SHQ&/$3,7\SHIRUKRVWDSS 'HVFULSWLRQ

FKDUQ FOBFKDUQ VLJQHGWZR


VFRPSOHPHQWELWLQWHJHUYHFWRU
XFKDUQ FOBXFKDUQ XQVLJQHGELWLQWHJHUYHFWRU
VKRUWQ FOBVKRUWQ VLJQHGWZR
VFRPSOHPHQWELWLQWHJHUYHFWRU
XVKRUWQ FOBXVKRUWQ XQVLJQHGELWLQWHJHUYHFWRU
LQWQ FOBLQWQ VLJQHGWZR
VFRPSOHPHQWELWLQWHJHUYHFWRU
XLQWQ FOBXLQWQ XQVLJQHGELWLQWHJHUYHFWRU
ORQJQ FOBORQJQ VLJQHGWZR
VFRPSOHPHQWELWLQWHJHUYHFWRU
XORQJQ FOBXORQJQ XQVLJQHGELWLQWHJHUYHFWRU
IORDWQ FOBIORDWQ IORDWLQJSRLQWYHFWRU

1RWH (YHQLIWKH2SHQ&/GHYLFHGRHVQRWVXSSRUWDQ\RIDOORIWKHDERYHYHFWRUGDWD
W\SHVWKH2SHQ&/FRPSLOHUZLOOFRQYHUWWKHYHFWRUW\SHVWRWKHDSSURSULDWHW\SHV
VXSSRUWHGEXLOWLQW\SHVVXSSRUWHGE\WKH2SHQ&/GHYLFH

7KHUHDUHVHYHUDOZD\VWRDFFHVVWKHFRPSRQHQWVRIDYHFWRUGDWDW\SHGHSHQGLQJRQ
WKHKRZPDQ\FRPSRQHQWVDUHLQWKHYHFWRU9HFWRUVW\SHVZLWKFRPSRQHQWVVXFK
DVFKDUXQLQWHWFFDQDFFHVVWKHGLIIHUHQWFRPSRQHQWVXVLQJYHFWRU![\9HFWRU

 7KH2SHQ&/&/DQJXDJH
 
 
  
 $ '  
 
  
   '   

 2# 
 


 

           

   
 $ 
 $0 )  
    # 

 
5.) í 7J[& í 2F^ .SYWTIZHYNTSYT4UJS(1–5WTLWFRRNSL

7KHIXQFWLRQEDUULHU PHPBIHQFHBIODJ FUHDWHVDEDUULHUWKDWEORFNVWKHFXUUHQW


ZRUNLWHPXQWLODOORWKHUZRUNLWHPVLQWKHVDPHJURXSKDVH[HFXWHGWKHEDUULHU
EHIRUHDOORZLQJWKHZRUNLWHPWRSURFHHGEH\RQGWKHEDUULHU,WLVLPSRUWDQWWRQRWH
WKDWZKHQXVLQJEDUULHUDOOZRUNLWHPVLQWKHZRUNJURXSPXVWH[HFXWHWKHEDUULHU
IXQFWLRQ,IWKHEDUULHUIXQFWLRQLVFDOOHGZLWKLQDFRQGLWLRQDOVWDWHPHQWLWLVLPSRUWDQW
WRHQVXUHWKDWDOOZRUNLWHPVLQWKHZRUNJURXSHQWHUWKHFRQGLWLRQDOVWDWHPHQWWR
H[HFXWHWKHEDUULHU
)RUH[DPSOHWKHIROORZLQJIXQFWLRQLVDQLOOHJDOXVHRIEDUULHUEHFDXVHWKHEDUULHUZLOO
QRWEHHQFRXQWHUHGIRUPRUHWKDQILYHZRUNLWHPV

BBNHUQHOYRLGUHDG BBJOREDOIORDW LQSXWBBJOREDOIORDW RXWSXW


^
VL]HBWLG JHWBJOREDOBLG  
LI LG
EDUULHU &/.B*/2%$/B0(0B)(1&( 
HOVH

`


7KHPHPBIHQFHBIODJFDQEHHLWKHU&/.B/2&$/B0(0B)(1&(RU
&/.B*/2%$/B0(0B)(1&(LVXVHE\WKHEDUULHUIXQFWLRQWRHLWKHUIOXVKDQ\YDULDEOH
LQORFDORUJOREDOPHPRU\RUVHWXSDPHPRU\IHQFHWRHQVXUHWKDWFRUUHFWRUGHULQJRI
PHPRU\RSHUDWLRQVWRHLWKHUORFDORUJOREDOPHPRU\
2SHQ&/&ODQJXDJHLPSOHPHQWVPHPRU\IHQFHIXQFWLRQVWRSURYLGHRUGHULQJ
EHWZHHQPHPRU\RSHUDWLRQVRIDZRUNLWHP0HPRU\IHQFHFDQEHXVHIXOZKHQZRUN
LWHPVQHHGVWRZULWHGDWDWRDEXIIHUDQGWKHQUHDGEDFNWKHXSGDWHGGDWD8VLQJ
PHPRU\IHQFHHQVXUHVWKDWUHDGVRUZULWHVEHIRUHWKHPHPRU\IHQFHKDYHEHHQ
FRPPLWWHGWRPHPRU\2SHQ&/DOORZVH[SOLFLWVHWXSRIPHPRU\IHQFHE\XVLQJRQH
RIWKHIROORZLQJIXQFWLRQV

HQVXUHVDOOUHDGVDQGZULWHVEHIRUHWKHPHPRU\IHQFHKDYHFRPPLWWHGWRPHPRU\
YRLGPHPBIHQFH PHPBIHQFHBIODJ

HQVXUHVDOOUHDGVEHIRUHPHPRU\IHQFHKDYHFRPSOHWHG
YRLGUHDGBPHPBIHQFH PHPBIHQFHBIODJ

HQVXUHVDOOZULWHVEHIRUHPHPRU\IHQFHKDYHFRPSOHWHG
YRLGZULWHBPHPBIHQFH PHPBIHQFHBIODJ


7KH2SHQ&/&/DQJXDJH 
5.) í 7J[& í 2F^ .SYWTIZHYNTSYT4UJS(1–5WTLWFRRNSL

Chapter 7
Application Optimization and Porting
7KLVFKDSWHUGHVFULEHV2SHQ&/NHUQHOGHEXJJLQJDQGSURYLGHVSHUIRUPDQFHDQG
RSWLPL]DWLRQWLSVIRUNHUQHOH[HFXWLRQRQ$0'*38DQG&38GHYLFHV$OVRLQFOXGHG
DUHODQJXDJHHTXLYDOHQWVIRUXVHLQSRUWLQJDSSOLFDWLRQVIURP19,',$
V&IRU&8'$
ODQJXDJHWR2SHQ&/

7.1 Debugging OpenCL


7KH$7,6WUHDP6'.YSURYLGHVGHEXJJLQJIHDWXUHVWKDWDOORZWKHGHEXJJLQJRI
2SHQ&/NHUQHOVRQ/LQX[XVLQJ*'%7KLVVHFWLRQFRYHUVRQO\VRPHRIWKHEDVLF*'%
FRPPDQGVIRUFRPSOHWH*'%GRFXPHQWDWLRQVHH *'%7KH*183URMHFW'HEXJJHU

7.1.1 Setting Up for Debugging


7RHQDEOHGHEXJJLQJDQ2SHQ&/SURJUDPSDVVHVWKH JRSWLRQWRWKHEXLOG
FO%XLOG3URJUDP IXQFWLRQ

HUU FO%XLOG3URJUDP SURJUDPGHYLFHVJ18//18// 




7RDYRLGFKDQJHVWRWKHVRXUFHFRGHWKHIROORZLQJHQYLURQPHQWYDULDEOHFDQEHXVHG
WRIRUFHGHEXJJLQJZKHQFRPSLOLQJIRUD&38GHYLFH

H[SRUW&38B&203,/(5B237,216 J


:KHQGHEXJJLQJWKHNHUQHOSURJUDPPXVWEHVHWWRH[HFXWHRQD&38GHYLFH,WLVDOVR
LPSRUWDQWWRVHWWKHHQYLURQPHQWYDULDEOHVRWKHNHUQHOSURJUDPLVH[HFXWHG
GHWHUPLQLVWLFDOO\

H[SRUW&38B0$;B&20387(B81,76 


7.1.2 Setting Breakpoints


,IQREUHDNSRLQWLVVHWGXULQJD*'%VHVVLRQWKHSURJUDPGRHVQRWVWRSXQWLOH[HFXWLRQ
KDVFRPSOHWHG7RVHWDEUHDNSRLQWXVLQJ*'%

$SSOLFDWLRQ2SWLPL]DWLRQDQG3RUWLQJ 
5.) í 7J[& í 2F^ .SYWTIZHYNTSYT4UJS(1–5WTLWFRRNSL

)RUDGGLWLRQDOLQIRUPDWLRQUHJDUGLQJWKH$7,6WUHDPSURILOHUFRQVXOWWKH $7,6WUHDP
3URILOHU.QRZOHGJH%DVH

7.3 General Optimization Tips


7KLVVHFWLRQRIIHUVJHQHUDOWLSVIRURSWLPL]LQJNHUQHOH[HFXWLRQRQ$0'*38VDQG
&38V)RUPRUHLQIRUPDWLRQVXFKDVKRZWKH$0'*38DUFKLWHFWXUHPDSVWRWKH
2SHQ&/LPSOHPHQWDWLRQVHHWKH $7,6WUHDP6'.2SHQ&/3URJUDPPLQJ*XLGH 

7.3.1 Use Local Memory


8VLQJORFDOPHPRU\LVW\SLFDOO\DQRUGHURIPDJQLWXGHIDVWHUWKDQXVLQJJOREDO
PHPRU\$0'*38LQFOXGHVDIDVWKLJKEDQGZLGWKORFDOPHPRU\IRUHDFKZRUN
JURXS$OOZRUNLWHPVLQWKHZRUNJURXSFDQHIILFLHQWO\VKDUHGDWDXVLQJWKHKLJK
EDQGZLGWKORFDOPHPRU\&ROODERUDWLYHUHDGZULWHWRWKHORFDOPHPRU\FDQOHDGWR
KLJKO\HIILFLHQWPHPRU\DFFHVVLQJ&ROODERUDWLYHZULWHZRUNVE\KDYLQJHDFKZRUN
LWHPZULWHDVXEVHFWLRQRIDQDUUD\DQGDVWKHZRUNLWHPH[HFXWHLQSDUDOOHOWKHHQWLUH
DUUD\LVZULWWHQ%HIRUHUHDGLQJWKHYDOXHVZULWWHQFROODERUDWLYHO\WKHNHUQHOPXVW
LVVXHDEDUULHU FDOOWRHQVXUHWKDWPHPRU\LVFRQVLVWHQWDFURVVDOOZRUNLWHPV
7KHIROORZLQJH[DPSOHFDOFXODWHVWKHWUDQVSRVHRIDPDWUL[XVLQJFROODERUDWLYHZULWHV
WKHQUHDGVIURPORFDOPHPRU\7KLVLPSOHPHQWDWLRQLVWZLFHDVIDVWDVWKHHTXLYDOHQW
LPSOHPHQWDWLRQWKDWXVHVRQO\JOREDOPHPRU\

$SSOLFDWLRQ2SWLPL]DWLRQDQG3RUWLQJ 

Vous aimerez peut-être aussi