




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
并行算法在電阻抗斷層成像中的應(yīng)用研究目錄TOC\o"1-3"\f\h\z\u5897400引言 、簡要介紹了電阻抗層析成像技術(shù)的背景,國內(nèi)外研究的重要性以及當(dāng)前的研究現(xiàn)狀,并簡要介紹了當(dāng)前的EIT算法.對EIT場域進(jìn)行了數(shù)學(xué)描述并推導(dǎo)了邊界微分方程,并且描述了EIT正問題常規(guī)的求解方法,有限元方法(FEM)、有限體元法(FVM)、邊界元法(BEM),并著重介紹了有限元法,推導(dǎo)了其求解正問題的方程的過程.同時也介紹了EIT的逆問題.逆問題是一個高度病態(tài)的非線性問題,直接求解難度較大,本文介紹了一些常見的求解算法,并著重介紹了牛頓-拉夫遜算法,但是由于推導(dǎo)過程中對高階導(dǎo)變量的舍棄,使得最終解會影響最終成像質(zhì)量,于是就介紹了正則化技術(shù)對牛頓-拉夫遜算法的修正,著重介紹并推導(dǎo)了Tikhonov正則化算法對其的優(yōu)化.在有限元法求解EIT的基礎(chǔ)上,由于其程序的核心算法是對矩陣迭代計算,傳統(tǒng)的算法模型時間長,冗余度高,于是提出了熱門的并行計算模型,并且介紹了基于并行計算,以及一些先進(jìn)的數(shù)學(xué)問題求解的編程庫以及工具,如DUMEC++庫,PETSC工具等實現(xiàn)的并行機器和集群上運行的求解器(PEIT),PEIT在CPU上的執(zhí)行效率已經(jīng)大大優(yōu)于了傳統(tǒng)EIT求解程序,然而這個求解器雖然已經(jīng)優(yōu)化了大部分的計算模型,但是Jacobian矩陣的計算還是基于預(yù)處理,計算速度不是很理想.于是著重介紹了NVIDIA公司的GPU架構(gòu)體系,對最新架構(gòu)進(jìn)行了介紹和分析,并介紹以及搭建了基于GPU的CUDA編程模型.對基于DUNE-FEM,PETSC的Jacobian矩陣求解算法,使用基于GPU的架構(gòu),以及多個GPU架構(gòu)的對Jacobian矩陣求解進(jìn)行加速.
參考文獻(xiàn)王雅娟.腔內(nèi)電阻抗成像正問題邊界元法求解的并行計算研究[D].天津:河北工業(yè)大學(xué),2014.代月霞.基于深度學(xué)習(xí)的EIT圖像重建算法研究[D].天津:天津工業(yè)大學(xué),2017.丁紅軍,邢克禮.醫(yī)學(xué)成像技術(shù)的進(jìn)展[J].醫(yī)療衛(wèi)生裝備,2006(11):22-23.常曉敏.提高電阻抗重建圖像質(zhì)量的方法研究[D].天津:天津科技大學(xué),2018.向勝昭.基于三維磁場聚焦技術(shù)的磁感應(yīng)成像系統(tǒng)中激勵線圈的設(shè)計[D].成都:四川大學(xué),2005.張夏婉.多頻電阻抗成像算法研究[D].南京:南京郵電大學(xué),2018.唐磊.電阻抗斷層成像算法研究及系統(tǒng)軟件設(shè)計[D].天津:天津大學(xué),2006.田明武.帶裂縫水泥漿體阻抗特性研究[D].成都:四川大學(xué),2006.周舟.差分電阻抗斷層成像算法研究[D].長沙:國防科學(xué)技術(shù)大學(xué),2015.楊尚琴.多層次并行算法與MPI-2新特性的研究及應(yīng)用[D].成都:成都理工大學(xué),2009.李克臣.波動方程的速度估計和疊前深度偏移辛算法的并行實現(xiàn)[D].合肥:中國科學(xué)技術(shù)大學(xué),2002.王宏斌.模擬胸腔斷層的二維橢圓域阻抗成像研究[D].天津:河北工業(yè)大學(xué),2007.付峰,秦明新.電阻抗斷層圖像重構(gòu)算法[J].國外醫(yī)學(xué).生物醫(yī)學(xué)工程分冊,1995(05):255-262.曹海燕,王化祥.電容層析成像系統(tǒng)傳感器仿真研究[J].計算機工程與應(yīng)用,2012,48(15):207-211.徐桂芝,王明時,李有余,等.醫(yī)用電阻抗成像系統(tǒng)的模塊化設(shè)計[J].天津:天津大學(xué)學(xué)報,2006(06):133-137.任燕芝.改進(jìn)的粒子群算法及其工程應(yīng)用研究[D].西安:西安電子科技大學(xué),2018.戎立鋒.電阻抗成像技術(shù)的研究與系統(tǒng)設(shè)計[D].南京:南京理工大學(xué),2006.張建國.基于阻抗層析成像的冰—水兩相流檢測技術(shù)與系統(tǒng)研究[D].太原:太原理工大學(xué),2013.邵興龍.基于FPGA的圖像輪廓提取系統(tǒng)設(shè)計與實現(xiàn)[D].無錫:江南大學(xué),2014.蘇麗麗.基于CPU-GPU集群的分子動力學(xué)并行計算研究[D].大連:大連理工大學(xué),2009.王貞東.增強現(xiàn)實中虛實融合光照一致性研究[D].蘇州:蘇州大學(xué),2010.趙芳斌.基于FPGA和GPU的外輻射源雷達(dá)信號處理平臺的研究[D].成都:電子科技大學(xué),2013.陸開誠.LAPW基組第一性原理計算的GPU加速方法及其應(yīng)用[D].杭州:浙江大學(xué),2019.高躍清,張焱,劉偉光.基于CUDA的SAR成像CS算法研究[J].計算機與網(wǎng)絡(luò),2012,38(07):55-57.JehlMarkus,DednerAndreas,BetckeTimo,etal.Afastparallelsolverfortheforwardprobleminelectricalimpedancetomography[J].IEEEtransactionsonbio-medicalengineering,2015,62(1):1-14.吳玫華.在GPU上實現(xiàn)Jacobi迭代法的分析與設(shè)計[J].電子設(shè)計工程,2012,20(10):28-30.董秀珍,秦明新,湯孟興,等.電阻抗斷層成像系統(tǒng)及重構(gòu)算法[J].第四軍醫(yī)大學(xué)學(xué)報,1999(03):218-219.ABorsic,EAAttardo,RJHalter.Multi-GPUJacobianacceleratedcomputingforsoft-fieldtomography[J].PhysiologicalMeasurement,2012,33(10):1703-1715.
附錄intmain(intargc,char**argv)
{if(argc>1){printf("Thisprogramacceptsnoarguments\n");exit(EXIT_FAILURE);}matrix_t
A;
matrix_t
B;
matrix_treference_x;
matrix_tgpu_naive_solution_x;
matrix_tgpu_opt_solution_x;
srand(time(NULL));
printf("\nGenerating%dx%dsystem\n",MATRIX_SIZE,MATRIX_SIZE);A=create_diagonally_dominant_matrix(MATRIX_SIZE,MATRIX_SIZE);if(A.elements==NULL){
printf("Errorcreatingmatrix\n");
exit(EXIT_FAILURE);}
B=allocate_matrix_on_host(MATRIX_SIZE,1,1);reference_x=allocate_matrix_on_host(MATRIX_SIZE,1,0);gpu_naive_solution_x=allocate_matrix_on_host(MATRIX_SIZE,1,0);
gpu_opt_solution_x=allocate_matrix_on_host(MATRIX_SIZE,1,0);#ifdefDEBUGprint_matrix(A);print_matrix(B);print_matrix(reference_x);#endif
printf("\nPerformingJacobiiterationontheCPU\n");
structtimevalstart,stop;
gettimeofday(&start,NULL);
compute_gold(A,reference_x,B);
gettimeofday(&stop,NULL);
fprintf(stderr,"CPUruntime=%fs\n",(float)(stop.tv_sec-start.tv_sec+(stop.tv_usec-start.tv_usec)/(float)1000000));
display_jacobi_solution(A,reference_x,B);/*Displaystatistics*/
printf("\nPerformingJacobiiterationondevice\n");
compute_on_device(A,gpu_naive_solution_x,gpu_opt_solution_x,B);
display_jacobi_solution(A,gpu_naive_solution_x,B);/*Displaystatistics*/
display_jacobi_solution(A,gpu_opt_solution_x,B);
free(A.elements);
free(B.elements);
free(reference_x.elements);
free(gpu_naive_solution_x.elements);
free(gpu_opt_solution_x.elements);
exit(EXIT_SUCCESS);}voidcompute_on_device(constmatrix_tA,matrix_tgpu_naive_sol_x,
matrix_tgpu_opt_sol_x,constmatrix_tB){
structtimevalstart,stop;
matrix_tAd=allocate_matrix_on_device(A);
copy_matrix_to_device(Ad,A);
matrix_tBd=allocate_matrix_on_device(B);
copy_matrix_to_device(Bd,B);
matrix_tXd=allocate_matrix_on_device(B);
copy_matrix_to_device(Xd,B);
gettimeofday(&start,NULL);
jacobi_iteration_naive(Ad,Bd,Xd);
copy_matrix_from_device(gpu_naive_sol_x,Xd);
gettimeofday(&stop,NULL);
fprintf(stderr,"GPUruntimefornaive=%fs\n",(float)(stop.tv_sec-start.tv_sec+(stop.tv_usec-start.tv_usec)/(float)1000000));
copy_matrix_to_device(Xd,B);
constmatrix_tnewA=transpose_matrix(A);
copy_matrix_to_device(Ad,newA);
gettimeofday(&start,NULL);
jacobi_iteration_optimized(Ad,Bd,Xd);
copy_matrix_from_device(gpu_opt_sol_x,Xd);
gettimeofday(&stop,NULL);
fprintf(stderr,"CPUruntimeforoptimized=%fs\n",(float)(stop.tv_sec-start.tv_sec+(stop.tv_usec-start.tv_usec)/(float)1000000));
free((void*)newA.elements);
free_matrix_on_device(&Ad);
free_matrix_on_device(&Bd);
free_matrix_on_device(&Xd);
return;}voidjacobi_iteration_naive(matrix_tAd,matrix_tBd,matrix_tXd){
dim3threads(THREAD_BLOCK_SIZE,1,1);
dim3grid((Xd.num_rows+THREAD_BLOCK_SIZE-1)/THREAD_BLOCK_SIZE,1);
double*ssdDevice;
cudaMalloc((void**)&ssdDevice,sizeof(double));
unsignedintdone=0;
doublessd,mse;
unsignedintnum_iter=0;
while(!done){
cudaMemset((void*)ssdDevice,0,sizeof(double));
jacobi_iteration_kernel_naive<<<grid,threads>>>(Ad,Bd,Xd,ssdDevice);
cudaDeviceSynchronize();/*ForceCPUtowaitforGPUtocomplete*/
cudaMemcpy((void*)&ssd,(void*)ssdDevice,sizeof(double),cudaMemcpyDeviceToHost);
num_iter++;
mse=sqrt(ssd);/*Meansquarederror.*/
if(mse<=THRESHOLD)
done=1;
}
printf("\nConvergenceachievedafter%diterations\n",num_iter);
cudaFree(ssdDevice);}voidjacobi_iteration_optimized(matrix_tAd,matrix_tBd,matrix_tXd){
dim3threads(THREAD_BLOCK_SIZE,1,1);
dim3grid((Xd.num_rows+THREAD_BLOCK_SIZE-1)/THREAD_BLOCK_SIZE,1);
double*ssdDevice;
cudaMalloc((void**)&ssdDevice,sizeof(double));
unsignedintdone=0;
doublessd,mse;
unsignedintnum_iter=0;
while(!done){
cudaMemset((void*)ssdDevice,0,sizeof(double));
jacobi_iteration_kernel_optimized<<<grid,threads>>>(Ad,Bd,Xd,ssdDevice);
cudaDeviceSynchronize();/*ForceCPUtowaitforGPUtocomplete*/
cudaMemcpy((void*)&ssd,(void*)ssdDevice,sizeof(double),cudaMemcpyDeviceToHost);
num_iter++;
mse=sqrt(ssd);/*Meansquarederror.*/
if(mse<=THRESHOLD)
done=1;
}
printf("\nConvergenceachievedafter%diterations\n",num_iter);
cudaFree(ssdDevice);}voidfree_matrix_on_device(matrix_t
*M)
{cudaFree(M->elements);M->elements=NULL;}voidfree_matrix_on_host(matrix_t*M){free(M->elements);M->elements=NULL;}matrix_tallocate_matrix_on_device(constmatrix_tM){
matrix_tMdevice=M;
intsize=M.num_rows*M.num_columns*sizeof(float);
cudaMalloc((void**)&Mdevice.elements,size);
returnMdevice;}matrix_ttranspose_matrix(constmatrix_tM){
matrix_tnewM;
newM.num_columns=M.num_columns;
newM.num_rows=M.num_rows;
intsize=M.num_rows*M.num_columns;
newM.elements=(float*)malloc(size*sizeof(float));
introw,cols;
for(inti=0;i<size;i++){
row=i/M.num_rows;
cols=i%M.num_rows;
newM.elements[cols*M.num_rows+row]=M.elements[i];
}
returnnewM;}matrix_tallocate_matrix_on_host(intnum_rows,intnum_columns,intinit){
matrix_tM;
M.num_columns=num_columns;
M.num_rows=num_rows;
intsize=M.num_rows*M.num_columns;M.elements=(float*)malloc(size*sizeof(float));for(unsignedinti=0;i<size;i++){if(init==0)
M.elements[i]=0;
else
M.elements[i]=get_random_number(MIN_NUMBER,MAX_NUMBER);}
returnM;}voidcopy_matrix_to_device(matrix_tMdevice,constmatrix_tMhost){
intsize=Mhost.num_rows*Mhost.num_columns*sizeof(float);
Mdevice.num_rows=Mhost.num_rows;
Mdevice.num_columns=Mhost.num_columns;
cudaMemcpy(Mdevice.elements,Mhost.elements,size,cudaMemcpyHostToDevice);
return;}voidcopy_matrix_from_device(matrix_tMhost,constmatrix_tMdevice){
intsize=Mdevice.num_rows*Mdevice.num_columns*sizeof(float);
cudaMemcpy(Mhost.elements,Mdevice.elements,size,cudaMemcpyDeviceToHost);
return;}voidprint_matrix(constmatrix_tM){for(unsignedinti=0;i<M.num_rows;i++){
for(unsignedintj=0;j<M.num_columns;j++){printf("%f",M.elements[i*M.num_rows+j]);
}
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度盆栽養(yǎng)護管理及售后服務(wù)合同
- 二零二五年度解聘勞動合同補償標(biāo)準(zhǔn)及社會保險銜接協(xié)議
- 二零二五年度民事糾紛和解協(xié)議書(附爭議解決專家評審)
- 2025年度砸墻工程安全施工人員健康管理協(xié)議合同
- 2025年度綠色建筑合伙公司股權(quán)合作協(xié)議書
- 2025年度跨境電商市場調(diào)研商務(wù)合作協(xié)議書
- 2025年度液化氣價格調(diào)整與結(jié)算合作協(xié)議
- 二零二五年度綠色建筑項目融資合同
- 二零二五農(nóng)村宅基地買賣與農(nóng)村土地整治與生態(tài)保護合同
- 二零二五年度生活垃圾清運與廢棄物處理設(shè)施建設(shè)協(xié)議
- 二級精神病醫(yī)院評審標(biāo)準(zhǔn)實施細(xì)則
- 數(shù)據(jù)管理(培訓(xùn)課件)
- 唇腺活檢的疾病查房課件
- 全套ISO45001職業(yè)健康安全管理體系文件(手冊及程序文件)
- tdp燙傷處理應(yīng)急預(yù)案
- ICD-9-CM-3手術(shù)與操作國家臨床版亞目表
- MQL4命令中文詳解手冊
- 辦公耗材采購 投標(biāo)方案(技術(shù)方案)
- 水利工程危險源辨識清單全
- 家長會課件:六年級數(shù)學(xué)家長會老師課件
- ISO20000:2018版標(biāo)準(zhǔn)培訓(xùn)教材
評論
0/150
提交評論