修复因为 分块错误的 GPU计算错误
parent
696a3e5004
commit
44e485381b
|
@ -11,7 +11,7 @@
|
|||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Custom Dialog</string>
|
||||
<string>RTPC回波仿真</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
|
@ -90,7 +90,7 @@
|
|||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>D:/Programme/vs2022/RasterMergeTest/TestData/landcover_aligned.tiff</string>
|
||||
<string>D:/Programme/vs2022/RasterMergeTest/TestData/landcover_aligned2</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
|
@ -202,6 +202,7 @@ ErrorCode RTPCProcessCls::DEMPreprocess()
|
|||
|
||||
double rowidx = 0;
|
||||
double colidx = 0;
|
||||
|
||||
for (int max_rows_ids = 0; max_rows_ids < demds.height; max_rows_ids = max_rows_ids + line_invert) {
|
||||
Eigen::MatrixXd demdata = demds.getData(max_rows_ids, 0, line_invert, demds.width, 1);
|
||||
Eigen::MatrixXd xyzdata_x = demdata.array() * 0;
|
||||
|
@ -239,7 +240,7 @@ ErrorCode RTPCProcessCls::DEMPreprocess()
|
|||
line_invert = 1000;
|
||||
long start_ids = 0;
|
||||
long dem_rows = 0, dem_cols = 0;
|
||||
|
||||
|
||||
for (start_ids = 1; start_ids < demds.height; start_ids = start_ids + line_invert) {
|
||||
Eigen::MatrixXd demdata = demds.getData(start_ids - 1, 0, line_invert + 2, demxyz.width, 1);
|
||||
long startlineid = start_ids;
|
||||
|
@ -437,6 +438,7 @@ ErrorCode RTPCProcessCls::RTPCMainProcess(long num_thread)
|
|||
|
||||
float* h_TantPattern = (float*)mallocCUDAHost(sizeof(float) * Tthetanum * Tphinum);
|
||||
float* d_TantPattern = (float*)mallocCUDADevice(sizeof(float) * Tthetanum * Tphinum);
|
||||
|
||||
for (long i = 0; i < Tthetanum; i++) {
|
||||
for (long j = 0; j < Tphinum; j++) {
|
||||
h_TantPattern[i*Tphinum+j] = TransformPattern->getGainLearThetaPhi(TstartTheta + i * Tdtheta, TstartPhi + j * Tdphi);
|
||||
|
@ -461,6 +463,7 @@ ErrorCode RTPCProcessCls::RTPCMainProcess(long num_thread)
|
|||
|
||||
float* h_RantPattern = (float*)mallocCUDAHost(sizeof(float) * Rthetanum * Rphinum);
|
||||
float* d_RantPattern = (float*)mallocCUDADevice(sizeof(float) * Rthetanum * Rphinum);
|
||||
|
||||
for (long i = 0; i < Rthetanum; i++) {
|
||||
for (long j = 0; j < Rphinum; j++) {
|
||||
h_RantPattern[i * Rphinum + j] = ReceivePattern->getGainLearThetaPhi(RstartTheta + i * Rdtheta, RstartPhi + j * Rdphi);
|
||||
|
@ -540,8 +543,8 @@ ErrorCode RTPCProcessCls::RTPCMainProcess(long num_thread)
|
|||
cuComplex* h_echoAmp = (cuComplex*)mallocCUDAHost(sizeof(cuComplex) * blokline * tempDemCols);
|
||||
cuComplex* d_echoAmp = (cuComplex*)mallocCUDADevice(sizeof(cuComplex) * blokline * tempDemCols);
|
||||
|
||||
long* h_echoAmpFID = (long*)mallocCUDAHost(sizeof(long) * blokline * tempDemCols);
|
||||
long* d_echoAmpFID = (long*)mallocCUDADevice(sizeof(long) * blokline * tempDemCols);
|
||||
int* h_echoAmpFID = (int*)mallocCUDAHost(sizeof(int) * blokline * tempDemCols);
|
||||
int* d_echoAmpFID = (int*)mallocCUDADevice(sizeof(int) * blokline * tempDemCols);
|
||||
|
||||
Eigen::MatrixXd landcover= Eigen::MatrixXd::Zero(blokline, tempDemCols);// 地面覆盖类型
|
||||
|
||||
|
@ -595,8 +598,8 @@ ErrorCode RTPCProcessCls::RTPCMainProcess(long num_thread)
|
|||
h_echoAmp = (cuComplex*)mallocCUDAHost(sizeof(cuComplex) * newblokline * tempDemCols);;
|
||||
d_echoAmp = (cuComplex*)mallocCUDADevice(sizeof(cuComplex) * newblokline * tempDemCols);;
|
||||
|
||||
h_echoAmpFID = (long*)mallocCUDAHost(sizeof(long) * newblokline * tempDemCols);
|
||||
d_echoAmpFID = (long*)mallocCUDADevice(sizeof(long) * newblokline * tempDemCols);
|
||||
h_echoAmpFID = (int*)mallocCUDAHost(sizeof(int) * newblokline * tempDemCols);
|
||||
d_echoAmpFID = (int*)mallocCUDADevice(sizeof(int) * newblokline * tempDemCols);
|
||||
}
|
||||
|
||||
{ // 处理 dem -> 数量
|
||||
|
@ -641,58 +644,84 @@ ErrorCode RTPCProcessCls::RTPCMainProcess(long num_thread)
|
|||
HostToDevice((void*)h_demsloper_angle, (void*)d_demsloper_angle, sizeof(float) * newblokline * tempDemCols);
|
||||
HostToDevice((void*)h_demcls, (void*)d_demcls, sizeof(float) * newblokline * tempDemCols);//地表覆盖
|
||||
|
||||
long pixelcount = newblokline * tempDemCols;
|
||||
// 临时文件声明
|
||||
float antpx =0;
|
||||
float antpy =0;
|
||||
float antpz =0;
|
||||
float antvx =0;
|
||||
float antvy =0;
|
||||
float antvz =0;
|
||||
float antdirectx =0;
|
||||
float antdirecty =0;
|
||||
float antdirectz =0;
|
||||
float antXaxisX =0;
|
||||
float antXaxisY =0;
|
||||
float antXaxisZ =0;
|
||||
float antYaxisX =0;
|
||||
float antYaxisY =0;
|
||||
float antYaxisZ =0;
|
||||
float antZaxisX =0;
|
||||
float antZaxisY =0;
|
||||
float antZaxisZ = 0;
|
||||
|
||||
|
||||
|
||||
|
||||
int pixelcount = newblokline * tempDemCols;
|
||||
std::cout << " GPU Memory init finished!!!!" << std::endl;
|
||||
for (long prfid = 0; prfid < pluseCount; prfid++) {
|
||||
{// 计算
|
||||
std::cout << "\r[" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString() << "] dem:\t" << startline << "\t-\t" << startline + newblokline << "\t:\t pluse :\t" << prfid << " / " << pluseCount << std::endl;
|
||||
// 天线位置
|
||||
float antpx = sateOirbtNodes[prfid].Px;
|
||||
float antpy = sateOirbtNodes[prfid].Py;
|
||||
float antpz = sateOirbtNodes[prfid].Pz;
|
||||
float antvx = sateOirbtNodes[prfid].Vx;
|
||||
float antvy = sateOirbtNodes[prfid].Vy;
|
||||
float antvz = sateOirbtNodes[prfid].Vz; //6
|
||||
float antdirectx = sateOirbtNodes[prfid].AntDirecX;
|
||||
float antdirecty = sateOirbtNodes[prfid].AntDirecY;
|
||||
float antdirectz = sateOirbtNodes[prfid].AntDirecZ; // 9 天线指向
|
||||
float antXaxisX = sateOirbtNodes[prfid].AntXaxisX;
|
||||
float antXaxisY = sateOirbtNodes[prfid].AntXaxisY;
|
||||
float antXaxisZ = sateOirbtNodes[prfid].AntXaxisZ;//12 天线坐标系
|
||||
float antYaxisX = sateOirbtNodes[prfid].AntYaxisX;
|
||||
float antYaxisY = sateOirbtNodes[prfid].AntYaxisY;
|
||||
float antYaxisZ = sateOirbtNodes[prfid].AntYaxisZ;//15
|
||||
float antZaxisX = sateOirbtNodes[prfid].AntZaxisX;
|
||||
float antZaxisY = sateOirbtNodes[prfid].AntZaxisY;
|
||||
float antZaxisZ = sateOirbtNodes[prfid].AntZaxisZ;//18
|
||||
|
||||
antpx = sateOirbtNodes[prfid].Px;
|
||||
antpy = sateOirbtNodes[prfid].Py;
|
||||
antpz = sateOirbtNodes[prfid].Pz;
|
||||
antvx = sateOirbtNodes[prfid].Vx;
|
||||
antvy = sateOirbtNodes[prfid].Vy;
|
||||
antvz = sateOirbtNodes[prfid].Vz; //6
|
||||
antdirectx = sateOirbtNodes[prfid].AntDirecX;
|
||||
antdirecty = sateOirbtNodes[prfid].AntDirecY;
|
||||
antdirectz = sateOirbtNodes[prfid].AntDirecZ; // 9 天线指向
|
||||
antXaxisX = sateOirbtNodes[prfid].AntXaxisX;
|
||||
antXaxisY = sateOirbtNodes[prfid].AntXaxisY;
|
||||
antXaxisZ = sateOirbtNodes[prfid].AntXaxisZ;//12 天线坐标系
|
||||
antYaxisX = sateOirbtNodes[prfid].AntYaxisX;
|
||||
antYaxisY = sateOirbtNodes[prfid].AntYaxisY;
|
||||
antYaxisZ = sateOirbtNodes[prfid].AntYaxisZ;//15
|
||||
antZaxisX = sateOirbtNodes[prfid].AntZaxisX;
|
||||
antZaxisY = sateOirbtNodes[prfid].AntZaxisY;
|
||||
antZaxisZ = sateOirbtNodes[prfid].AntZaxisZ;//18
|
||||
//CUDATestHelloWorld(1, 20);
|
||||
|
||||
std::cout << "\r[" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString() << "] GPU :\t" << std::endl;
|
||||
|
||||
|
||||
CUDA_RTPC_SiglePRF(
|
||||
antpx, antpy, antpz,// 天线坐标
|
||||
antXaxisX, antXaxisY, antXaxisZ, // 天线坐标系
|
||||
antYaxisX, antYaxisY, antYaxisZ, //
|
||||
antZaxisX, antZaxisY, antZaxisZ,
|
||||
antdirectx, antdirecty, antdirectz,// 天线指向
|
||||
d_dem_x, d_dem_y, d_dem_z, d_demcls, // 地面坐标
|
||||
d_dem_x, d_dem_y, d_dem_z,
|
||||
d_demcls, // 地面坐标
|
||||
d_demsloper_x, d_demsloper_y, d_demsloper_z, d_demsloper_angle,// 地面坡度
|
||||
d_TantPattern, TstartTheta,TstartPhi, Tdtheta, Tdphi, Tthetanum, Tphinum,// 天线方向图相关
|
||||
d_RantPattern, RstartTheta, RstartPhi, Rdtheta, Rdphi, Rthetanum,Rphinum,// 天线方向图相关
|
||||
lamda, Fs, NearRange, Pt, PlusePoint, // 参数
|
||||
d_clsSigmaParam, clamapid,// 地表覆盖类型-sigma插值对应函数-ulaby
|
||||
d_echoAmp, d_echoAmpFID,
|
||||
pixelcount
|
||||
);
|
||||
newblokline,tempDemCols);
|
||||
DeviceToHost(h_echoAmpFID, d_echoAmpFID, sizeof(long)* newblokline* tempDemCols);
|
||||
DeviceToHost(h_echoAmp, d_echoAmp, sizeof(long)* newblokline* tempDemCols);
|
||||
std::cout << "\r[" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString() << "] GPU SIGMA:\t" << std::endl;
|
||||
|
||||
|
||||
for (long i = 0; i < pixelcount; i++) {
|
||||
echo.get()[prfid*PlusePoint+ h_echoAmpFID[i]] =std::complex<double>(h_echoAmp[i].x, h_echoAmp[i].y);
|
||||
echo.get()[prfid*PlusePoint+ h_echoAmpFID[i]] = echo.get()[prfid * PlusePoint + h_echoAmpFID[i]]
|
||||
+std::complex<double>(h_echoAmp[i].x, h_echoAmp[i].y);
|
||||
}
|
||||
|
||||
//for (long i = 0; i < PlusePoint; i++) {
|
||||
// std::cout << echo.get()[prfid * PlusePoint + i] << std::endl;
|
||||
//}
|
||||
|
||||
if (prfid % 100 == 0) {
|
||||
std::cout << "\r[" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString() << "] dem:\t" << startline << "\t-\t" << startline + newblokline << "\t:\t pluse :\t" << prfid << " / " << pluseCount << std::endl;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -23,6 +23,12 @@ SigmaDatabase::SigmaDatabase()
|
|||
this->VH_sigmaParam.clear();
|
||||
this->VV_sigmaParam.clear();
|
||||
|
||||
//0
|
||||
this->HH_sigmaParam.insert(std::pair<long, SigmaParam>(0, SigmaParam{ 0,0,0, 0, 0,0 }));
|
||||
this->HV_sigmaParam.insert(std::pair<long, SigmaParam>(0, SigmaParam{ 0,0,0, 0, 0,0 }));
|
||||
this->VH_sigmaParam.insert(std::pair<long, SigmaParam>(0, SigmaParam{ 0,0,0, 0, 0,0 }));
|
||||
this->VV_sigmaParam.insert(std::pair<long, SigmaParam>(0, SigmaParam{ 0,0,0, 0, 0,0 }));
|
||||
|
||||
//12
|
||||
this->HH_sigmaParam.insert(std::pair<long, SigmaParam>(12, SigmaParam{ -21.1019701821713, 9.00621457243906, 6.52932182540331, - 1.11157376729893, - 15.8022895411007, 11.4690828129602 }));
|
||||
this->HV_sigmaParam.insert(std::pair<long, SigmaParam>(12, SigmaParam{ -30.0103645753547, 27.1700862271921, 11.8007376386356, - 0.933835390422269, - 16.4640776105300, 11.8318838032267 }));
|
||||
|
@ -70,10 +76,6 @@ SigmaDatabase::SigmaDatabase()
|
|||
this->HV_sigmaParam.insert(std::pair<long, SigmaParam>(90, SigmaParam{ -26.8776515733889, 10.4251866500052, 8.43273666535992, 4.33165922141213, 8.68204389555939, - 2.51718779582920 }));
|
||||
this->VH_sigmaParam.insert(std::pair<long, SigmaParam>(90, SigmaParam{ -26.8776515733889, 10.4251866500052, 8.43273666535992, 4.33165922141213, 8.68204389555939, - 2.51718779582920 }));
|
||||
this->VV_sigmaParam.insert(std::pair<long, SigmaParam>(90, SigmaParam{ -20.1761798059391, 13.2752519275021, 2.74667225608397, 3.63052241744923, 8.99932188120922, 34.8246533269446 }));
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
SigmaDatabase::~SigmaDatabase()
|
||||
|
@ -82,7 +84,6 @@ SigmaDatabase::~SigmaDatabase()
|
|||
this->HV_sigmaParam.clear();
|
||||
this->VH_sigmaParam.clear();
|
||||
this->VV_sigmaParam.clear();
|
||||
|
||||
}
|
||||
|
||||
double SigmaDatabase::getAmpHH(long cls, double angle)
|
||||
|
|
Loading…
Reference in New Issue