線程在執行指令時,需訪問處于不同存儲器的數據,而對各類存儲器的訪問速度差異很大[13]。CUDA存儲器分為3層:(1)私有本地存儲器(private local memory),容量小,訪問速度快;(2)全局存儲器(global memory),所有線程都可訪問,訪問速度慢;(3)共享存儲器(shared memory),屬于片上存儲器,訪問速度與寄存器相當,定義共享類型變量時需使用限定符__shared__。
3.3 CUDA C
CUDA C是對C的擴展,為程序員提供了一種用C語言在設備上編寫代碼的編程方式。主要擴展[14-15]:(1)引入__device__,__host__和__global__3個限定符,限定函數調用和執行的位置;(2)引入4個內置變量,blockIdx,threadIdx,gridDim和blockDim;(3)引入<<<>>>運算符,內含4個參數,主要用于設置線程格和線程塊的尺寸;(4)擴展了一些數學函數庫,如CURAND[16]。
4 基于CUDA的PSO算法
4.1 PSO算法的并行編程
群體中各粒子只在更新全局時互相交換信息,其他步驟均相互獨立。獲取歷史時,一個線程對應一個粒子,各線程同時調用適應函數;更新位置和速度時,一個線程對應粒子的每一維;均按線程索引來讀取數據并處理。
主機端初始化粒子的位置和速度,將數據從CPU復制到GPU上,在設備上迭代尋優,最后將解復制到CPU輸出。表1列出了實現各部分功能的函數,獲取全局值時,星形結構可以通過線程歸約比較獲取全局,環形結構由于多鄰域而相對復雜,在后續部分詳述。
4.2 環形PSO算法尋優過程
星形PSO算法獲取全局較為簡單,不作分析,環形PSO算法在獲取局部時,文中設定每個粒子只有左右兩個鄰居。在編寫該部分程序時,設置讓相鄰線程訪問索引間隔為3的共享內存中的數據,這種方法避開了bank沖突,但以時間消耗作為代價。各線程具體負責找出粒子的歷史值.
找出歷史值的方式有以下兩種情形(其中N為粒子規模):
(1)N%3=0時,各線程按圖5所示處理相應的數據,3次并行運行即可得到每個粒子在其鄰域內的局部。
(2)N%3≠0時,將圖5中N令為N-N%3,按情形(1)可以得到0~N-N%3-1號粒子在其鄰域內的局部,再對余下的1或2個粒子依次找出其鄰域內局部。
由于環型PSO算法有N個局部值,設備上尋優結束后,需將N個局部從GPU復制到CPU進行比較,最后輸出全局解。
4.3 CUDA程序性能優化
GPU性能雖然出色,但很大程度上受限于算法本身[15]。在CUDA的使用中,數據結構和對內存的訪問對GPU性能有極大地影響,有時甚至起決定性作用。文中實驗程序對CUDA性能優化,主要考慮了以下4個方面:(1)化并行性;(2)優化內存訪問以獲得的帶寬;(3)優化指令使用以獲得指令的吞吐量;(4)線程塊和線程數的設置,實驗表明當設置線程塊數為32,每個塊中線程數為256時獲得效率。
SIEMENS RWX62.5030 IC3600STFB1 METER TAP SWITCH
IC3600STKA1 TEMPERATURE CONTROL
IC3600STKD1 TEMP CONTROL IC3600STKD
IC3600STKF1 IC3600STKF
IC3600STKG1 TEMPERATURE CONTROL
IC3600STKH1 CARD TEMP CONTROL IC3600STKH
IC3600STKJ1 AMPLIFIER BOARD IC3600STKJ
IC3600STKK1 TEMP CONTROL BD IC3600STKK
IC3600STKL1 TEMP MTR AMP BD
IC3600STKP1 PEAKING OPERATION IC3600STKP
IC3600STKS1 TEMP CONTROL
IC3600STML1 THERMOCOUPLE AVERAGING MOD
IC3600STSA1 PCD PWR SUPPLY IC3600STSA
IC3600STXD1 CIRCUIT BOARD
IC3600SVA1 GE SPEEDTRONIC / GE DRIVE SYSTEMS
IC3600SVDA1 VIBR DET BOARD IC3600SVDA
IC3600SVDB1 VIBRATION CALIBRATOR IC3600SVDB
IC3600SVDC1 VIBR DET BOARD IC3600SVDC
IC3600SVDD1 VIBRATION-CALIBRATOR
IC3600SVDE1 VIBR ALARM BD IC3600SVDE
IC3600SVFA1 VOLTAGE TO FREQ CONV IC3600SVFA
IC3600SVSA1 HP SPEED SENSORS
IC3600SVSC1 SPEED RELAY BD IC3600SVSC
IC3600SVSD1 SPEED-SENSOR
IC3600SVSE1 SPEED SENSOR IC3600SVSE
IC3600SVSF1 SPEED-SENSOR
IC3600SVSG1 SPEEDTRONIC
IC3600SVZA1 12-28V REG BD IC3600SVZA
IC3600SVZB1 50V REG BOARD IC3600SVZB
IC3600SVZC1 5.3V REG BOARD
IC3600SVZD1 50V REGULATOR
IC3600SWIE1 SPEEDTRONIC
IC3600TAIA1 ANALOG-INTERFACE
IC3600TBAA1 BUFFER-AMPLIFIER
IC3600TCBA1 COMP BD/SFE BD
IC3600TCFB1 GE SPEEDTRONIC
IC3600TCSA1 CURRENT-SENSOR
IC3600TCSB1 CARD CURRENT SENSOR
IC3600TCUC1 GE SPEEDTRONIC / GE DRIVE SYSTEMS
IC3600TDIA1 DIGITAL-INTERFACE
IC3600TDTA1 DIFF TRIP BOARD
IC3600TDUA1 DIFFERENTIAL-TRIP
IC3600TFCA1 AMPLISTAT-FIRING-CIR
IC3600TFCU1 FIRING CIRCUIT IC3600TFCU
IC3600TFCV1 FIRING CIRCUIT
IC3600TFMA1 FAULT MON BOARD
IC3600TGDD1 GATE DRIVER
IC3600TGDE1 PULSE AMPL TRAN
IC3600TILA1 INV LIMIT BOARD
IC3600TILB1 INVERTER LIMIT CARD
IC3600TLFA1 GE SPEEDTRONIC
IC3600TLFC1 PHASE SHIFT BD
IC3600TLFD1 PHASE SHIFT LINE FIL
IC3600TLFE1 CARD PHASE SHIFT LINE
IC3600TLOA1 LOCKOUT
IC3600TPAA1 GATE PULSE AMP IC3600TPAA
IC3600TPAB1 GATE PULSE AMP
IC3600TPAE1 GATE PULSE AMPLIFIER
IC3600TPAH1 GATE PULSE AMP
IC3600TPAM1 GATE-PULSE-AMPL
IC3600TPGA1 GATE PLS GEN BD
IC3600TPGB1 GATE PLS GEN BD
IC3600TPGD1 GATE PULSE GENERATOR
IC3600TPGE1 PULSE-GENERATOR
IC3600TPSA1 POWER SUPPLY BD IC3600TPSA
IC3600TPSB1 3-PH-POWER-SUPPLY
IC3600TPSC1 POWER-SUPPLY-CARD
IC3600TPSD1 UNREG-PWR-SUPPLY-CRD
IC3600TPSE1 67/9V 2AMP CONVERTER
IC3600TPSF1 9/5.3V-2A REGULATOR
IC3600TPSJ1 50V POWER SUPPLYCARD
IC3600TPSR1 +-15 VOLT P SUPPLY
IC3600TRAA1 AMPLIFIER BOARD
IC3600TRLA1 REV LOGIC BOARD
IC3600TRLB1 REV LOGIC BOARD
IC3600TRLC1 REV LOGIC BOARD
IC3600TRLD1 REV LOGIC BOARD
IC3600TRLE1 REV LOGIC BOARD
IC3600TRLH1 REV LOGIC BOARD IC3600TRLH
IC3600TRLJ1 REVERSING-LOGIC
IC3600TRLM1 REVERSING LOGIC
IC3600TSKA1 SPEEDTRONIC GE CARD
IC3600TSKB1 STARTUP CONTROL & SU
IC3600TSUA1 GE SPEEDTRONIC
IC3600TSUC1 GATE AMP BOARD
IC3600TSUD1 SUPPRESSION AND BIAS
IC3600TSUE1 BIAS-AND-SUPPRESSION
IC3600TSUJ1 SUPP/BIAS BOARD IC3600TSUJ
IC3600TUAA1 UNI-AMP
IC3600TVSE1 VOLTAGE-SENSOR
IC3600VANA1 ANNUNCIATOR BD IC3600VANA
IC3600VANB1 ANNUNCIATOR BD IC3600VANB
IC3600VANC1 ANNUNCIATOR BD
IC3600VBCA1 GE SPEEDTRONIC / GE DRIVE SYSTEMS
IC3600VBCD1 DOWN COUNTER BD
IC3600VBCG1 CIRCUIT BOARD
IC3600VBCU1 BINARY COUNTER IC3600VBCU
IC3600VBEA1 BIT EQUATOR
IC3600VCDA1 CLOCK DRIVER
IC3600VCUA1 PCB
IC3600VCUB1 PCB
IC3600VCUD1 PCB
IC3600VCUE1 PCB
IC3600VCUF1 PCB
IC3600VCUG1 PCB
IC3600VCUH1 PCB
IC3600VCUJ1 PCB
IC3600VCUK1 PCB
IC3600VDAA1 DIG SERVO BOARD
IC3600VDAB1 D/A CONVERTER
IC3600VDAC1 D/A CONVERTER IC3600VDAC
IC3600VDAD1 D/A CONVERTER IC3600VDAD
IC3600VDFC1 PCB
IC3600VDOA1 CIRCUIT BOARD
IC3600VFAB1 PCB
IC3600VFAB2 PCB
IC3600VFFA1 GATE FLIP-FLOP
IC3600VFFB1 GATE FLIP FLOP
IC3600VFFC1 STATUS MONITOR
IC3600VFMC1 PCB
IC3600VLEA1 LOGIC ELEMENT IC3600VLEA
IC3600VLEB1 LOGIC ELEMENT IC3600VLEB
IC3600VMIA1 INVERTING MULTIPLEX
IC3600VMPA1 MECH PROTECTIVE IC3600VMPA
IC3600VORA1 OR LOGIC IC3600VORA
IC3600VPCA1 PCB
IC3600VPCB1 PROG CONTROL BD
IC3600VPGA1 PULSE GENERATOR
IC3600VPSA06 POWER SUPPLY CARD
IC3600VPSA1 POWER SUPPLY CARD
IC3600VRCA1 REV COUNTER BD
IC3600VRCB1 ERROR-REGISTER
IC3600VRCC1 REVERSIBLE COUNTER
IC3600VSLA1 GE SPEEDTRONIC
IC3600VSLB1 CIRCUIT BOARD
IC3600VSRA1 SHIFT REGISTER
IC3600VSRB1 SHIFT REGISTER
IC3600VSRD1 SHIFT REGISTER
IC3600VSSA1 SINGLE-SHOT
IC3600VTDA1 TIME DELAY
IC3600VTSB1 PCB
IC3600VTSC1 PCB
IC3600XJBA1 CIRCUIT BOARD
IC3600YSQA2 GE CARD
IC3601 214A POWER SUPPLY
IC3601 238A POWER SUPPLY
IC3601 290A SUBCOMPONENT OF IC3601214A
IC3601 A105A POWER SUPPLY BD
IC3601 A115A POWER SUPPLY 150 MA
IC3601 A115B POWER SUPPLY
IC3601 A133B POWER SUPPLY 67V
IC3601 A136A POWER SUPPLY 67V
IC3601 A148A PWR SUPPLY:120VAC-10
IC3601 A148B PWR SUP-120VAC TO 10
IC3601 A14A POWER SUPPLY
IC3601 A191 POWER SUPPLY 15V
IC3601 A208B MODULE
IC3601 A214A DC-DC CONVERTER - 50 V
IC3601 A228A POWER SUPPLY BD
IC3601 A238A DC-DC CONVERTER - 12 V
IC3601 A249A POWER SUPPLY
IC3601 A250A INVERTOR MODULE
IC3601 A250B INVERTOR MODULE
IC3601 A250C SUBCOMPONENT OF 232A51913
IC3601 A251 GE POWER SUPPLY
IC3601 A252A INVERTER MODULE
IC3601 A254A POWER SUPPLY
IC3601 A254B GE SPEEDTRONIC / GE DRIVE SYSTEMS
IC3601 A254C POWER SUPPLY
IC3601 A277A THERMOCOUPLE AVERAGING MOD
IC3601 A282A POWER INVERTERS PANEL
IC3601 BOSH3E SUBCOMPONENT OF IC4484B103
IC3601105A POWER SUPPLY BD
IC3601115A POWER SUPPLY 150 MA
IC3601115B POWER SUPPLY
IC3601133B POWER SUPPLY 67V
IC3601136A POWER SUPPLY 67V
IC3601148A PWR SUPPLY:120VAC-10
IC3601148B PWR SUP-120VAC TO 10
IC360114A POWER SUPPLY
IC3601191 POWER SUPPLY 15V
IC3601208B MODULE
IC3601214A POWER SUPPLY
IC3601228A POWER SUPPLY BD
IC3601238A POWER SUPPLY
IC3601249A POWER SUPPLY
IC3601250A INVERTER MODULE
IC3601250B INVERTER MODULE
IC3601250C INVERTER MODULE
IC3601251 GE POWER SUPPLY
IC3601252A INVERTER MODULE
IC3601254A POWER SUPPLY
IC3601254B BULK-POWER-SUPP
IC3601254C PWR SUPPLY INV RG
IC3601277A THERMOCOUPLE AVERAGING MOD
IC3601282A POWER INVERTERS PANEL
IC3601290A SUBCOMPONENT OF IC3601214A
IC3601H3E SUBCOMPONENT OF IC4484B103
IC3602 478A GE MICROSYNCHRONIZER
IC3602 A122 ZERO SPEED RELAY
IC3602 A124A CARD MODULES
IC3602 A161 RTD REG/AMP BD
IC3602 A178A MICROSYNCH
IC3602 A178A1 MICRO. ISOL MODULE IC3602A 178A 1
IC3602 A179A GE LOGIC TEST AID MODULE CALIBRATOR
IC3602478A GE MICROSYNCHRONIZER
IC3602A122 ZERO SPEED RELAY
IC3602A124A CARD MODULE
IC3602A161 RTD REG/AMP BD
IC3602A178A MICROSYNCH
IC3602A178A1 MICRO. ISOL MODULE IC3602A 178A 1
IC3602A179A GE LOGIC TEST AID MODULE CALIBRATOR
IC3603271 SCRAP IC3603271
IC3603A111 POWER SUPPLY
IC3603A130C REACTOR ASM
IC3603A132A MODULE ASM
IC3603A143F HEAT-SINK-ASSEMBLY
IC3603A161 HEAT SINK ASSEMBLY
IC3603A162A HEAT SINK ASM
IC3603A163A HEAT SINK ASM
IC3603A163B HEAT SINK ASM
IC3603A165D ANNUNCIATOR PART
IC3603A166A AC-&-DC-SOURCE
IC3603A166B POWER SUPPLY
IC3603A166C POWER SUPPLY
IC3603A17 GE COIL DIODE
IC3603A177 GE SPEEDTRONIC / GE DRIVE SYSTEMS
IC3603A177AA2 HER-SEAL-MED-DUT-REL
IC3603A177AA5 POTTED RELAY
IC3603A177AA6 POTTED-RELAY
IC3603A177AA9 HER-SEAL-MED-DUT-REL
IC3603A177AB2 POTTED RELAY
IC3603A177AB6 HER-SEAL-MED-DUT-REL
IC3603A177AB9 POTTED-RELAY
IC3603A177AC2 POTTED RELAY IC3603A177A C2
IC3603A177AC6 RELAY
IC3603A177AC9 POTTED RELAY
IC3603A177AD2 POTTED RELAY
IC3603A177AD5 POTTED RELAY
IC3603A177AD9 POTTED-RELAY
IC3603A177AE2 MEDIUM DUTY RELAY-28
IC3603A177AE5 POTTED RELAY
IC3603A177AE9 POTTED RELAY
IC3603A177AF2 POTTED RELAY IC3603A177A F2
IC3603A177AF6 POTTED-RELAY
IC3603A177AF9 POTTED RELAY
IC3603A177AFZ MODULE CONTROL/ POTTED RELAY
IC3603A177AG2 POTTED RELAY
IC3603A177AG9 POTTED-RELAY
IC3603A177AH1 RELAY
IC3603A177AH2 POTTED RELAY
IC3603A177AH5 POTTED RELAY
IC3603A177AH6 MEDIUM DUTY RELAY-12
IC3603A177AH9 POTTED-RELAY COIL 1
IC3603A177BB2 POTTED RELAY
IC3603A177BB6 POTTED RELAY
IC3603A177BB9 POTTED RELAY
IC3603A177CA6 POTTED-RELAY
IC3603A177CB2 POTTED-RELAY
IC3603A177CB6 POTTED-RELAY
IC3603A177CC2 POTTED-RELAY
IC3603A177CC5 POTTED RELAY
IC3603A177CC6 POTTED RELAY ASM
IC3603A177CD2 POTTED-RELAY
IC3603A177CD5 POTTED RELAY
IC3603A177CE2 POTTED-RELAY
IC3603A177CE5 POTTED RELAY
IC3603A177CE6 POTTED-RELAY
IC3603A177CF2 POTTED-RELAY IC3603A177C F2
IC3603A177CG2 POTTED-RELAY
IC3603A177CG5 POTTED-RELAY
IC3603A177CG6 POTTED RELAY
IC3603A177CH2 POTTED-RELAY
IC3603A177CH5 POTTED-RELAY
IC3603A177CH6 POTTED-RELAY
IC3603A177CJ3 RELAY MED-DUTY POTTED W/DIODE
IC3603A177CJ6 POTTED-RELAY
IC3603A200A TIRASTAT-MODULE
IC3603A200B TIRASTAT-MODULE
IC3603A200C TIRASTAT-MODULE
IC3603A201 SCR ASSEMBLY
IC3603A229A FIELD EXCITER
IC3603A229B FIELD RECTIFIER
IC3603A250A FULL WAVE-BR-SIN
IC3603A250B FULL WAVE-BR-SIN-PH
IC3603A251 HSINK ASM
IC3603A253A SINGLE PHASE BRIDGE ASM
IC3603A253B SINGLE PHASE BRIDGE
IC3603A271 THERMOCOUPLE AVGING MOD
IC3603A274B THERMOCOUPLE AVERAGING MOD
IC3603A277A THERMOCOUPLE AVERAGING MOD IC3603A277
IC3603A277C THERMOCOUPLE AVERAGING MOD
IC3603A278A THERMOCOUPLE AVERAGING MOD
IC3603A278B THERM PROCESS MOD
IC3603A278E THERMOCOUPLE PROCESSOR ASM
IC3603A279A THERMOCOUPLE MO
IC3603A280A HEAT SINK ASSY
IC3603A280B SUBCOMPONENT OF IC3603A282C
IC3603A281 HEAT SINK ASM
IC3603A281-1 SUBCOMPONENT OF IC3601282A
IC3603A282A POWER SUPPLY
IC3603A282B INVERTER
IC3603A282C GE BLACK START INVERTER
IC3603A282D POWER SUPPLY
IC3603A285 POWER SUPPLY
IC3603A285A POWER SUPPLY
IC3603A285B POWER SUPPLY
IC3603A285E POWER SUPPLY
IC3603A290A RECTIFIER MODULE
IC3603A291 RECTIFIER
IC3603A310A SUBCOMPONENT OF IC3607D108A
IC3603A328A HEAT SINK ASM
IC3605 C022CP250FGAY FIELD EXCITER
IC3605 C040FP090FGBY FIELD EXCITER
IC3605 C080FP360FGBY RECTIFIER ASSEMBLY
IC3605 C120FP360FGBY RECTIFIER ASSEMBLY
IC3605 C150FP560FGDY RECTIFIER ASSEMBLY
IC3605 D018FP090FGBY FIELD EXCITER
IC3605 D018NP180FGAN RECTIFIER ASSEMBLY
IC3605 D080FP360FGBY RECTIFIER ASSEMBLY
IC3605 E018FP180FGBY FIELD EXCITER
IC3605 E080NP090FGAN CELL STACK ASM
IC3605 G080FP360FGBN FIELD EXCITER
IC3605 G080FP360FGBY RECTIFIER CONTROL ASM
IC3605 G080NP360FGAN SILCON RECTIFIER PAC
IC3605 G120FP360FGBN RECTIFIER CONTROL ASM
IC3605 G120NP360FGAN RECTIFER CONTROL ASM
IC3605 G150NP280FGAN CONTACT SALEM REN PT
IC3605C022CP250FGAY FIELD EXCITER
IC3605C040FP090FGBY FIELD EXCITER
IC3605C080FP360FGBY RECTIFIER ASSEMBLY
IC3605C120FP360FGBY RECTIFIER ASSEMBLY
IC3605C150FP560FGDY RECTIFIER ASSEMBLY
IC3605D018FP090FGBY FIELD EXCITER
IC3605D018NP180FGAN RECTIFIER ASSEMBLY
IC3605D080FP090FGBY FIELD EXCITER
IC3605D080FP360FGBY RECTIFIER ASSEMBLY
IC3605E018FP180FGBY FIELD EXCITER
IC3605E080NP090FGAN CELL STACK ASM
IC3605G080FP360FGBN FIELD EXCITER
IC3605G080FP360FGBY RECTIFIER CONTROL ASM
IC3605G080NP360FGAN SILCON RECTIFIER PAC
IC3605G120FP360FGBN RECTIFIER CONTROL ASM
IC3605G120NP360FGAN RECTIFER CONTROL ASM
IC3605G150NP280FGAN CONTACT SALEM REN PT
IC36065119A GE SPEEDTRONIC / GE DRIVE SYSTEMS
IC3606AMIL1 PCB CIRCUIT BOARD
IC3606ATCA1 IC3606ATCA
IC3606ATCB1 THERMO CONDT.PASSIVE IC3606ATCB
IC3606DEXB1 CARD-EXTENDER-BOARD
IC3606DEXC1 MODULE
IC3606SANB1 ANNUNCIATOR MASTER
IC3606SASB1 AUTO-SYNCH-MOD-PWB
IC3606SFCK1 SNUBBER CARD
IC3606SIFA9 FILTER CARD IC3606SIFA
IC3606SIIA9 ISOLATOR CARD
IC3606SIIE9 ISOLATED INPUT CARD
IC3606SPCA1 6-PULSE-NR-CONT-CRD
IC3606SPCB1 CARD
IC3606SPCC1 6-PULSE-NR-SPEED-CUR
IC3606SPCD1 CARD
IC3606SPCE1 SNUBBER-CARD
IC3606SPCF1 SNUBBER CARD
IC3606SPCG1 SILTROL+CORE-REG-CBD
IC3606STMF1 THERMOCOUPLE AVERAGING MOD
IC3606STMG1 SW CD-THERMOCOUP AVG
IC3606STMJ1 THERMO AVERAGING MODULE IC3606STMJ
IC3606STML1 THERMOCOUPLE AVERAGING MODULE
IC3606TPAN1 PCB IC3606TPAN
IC3606TPAS1 PULSE XFMR BD
IC3606TPAV1 PULSE AMPLIFIER
IC3606YABA1 GE CARD
IC3606YAUA1 DLC BOARD
IC3606YDBA2 DIG BUS CONTROL
IC3606YMID1 RAM/ROM CARD 8K
IC3606YSMA1 MAINTENANCE MODULE FUNCTION
IC3606YSMID1 SPEEDTRONIC
IC3606YSQA2A GE SPEEDTRONIC
IC3606YSQB1 GE CARD
IC3606YSQC1 GE CARD
IC3607D104A H.S.A.
IC3607D105A GENERAL ELECTRIC SPEEDTRONIC
IC3607D107A POWER SUPPLY
IC3607D109A POWER SUPPLY
IC3607D11 POWER SUPPLY
IC3625DE4U34A POWER SUPPLY
IC3655A105A3D030D POWER SUPPLY
IC3800TLFA1 GE SPEEDTRONIC / GE DRIVE SYSTEMS
IC4501101 GE SPEEDTRONIC / GE DRIVE SYSTEMS
IC4501108A POWER SUPPLY
IC4988A100AA GE CALIBRATOR
IC600CB524M GE SPEEDTRONIC / GE DRIVE SYSTEMS
IC600FP500K GE SPEEDTRONIC / GE DRIVE SYSTEMS
IC660ELB912J SPEEDTRONIC