修复因为 分块错误的 GPU计算错误
parent
696a3e5004
commit
44e485381b
|
|
@ -11,7 +11,7 @@
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Custom Dialog</string>
|
<string>RTPC回波仿真</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
<item>
|
||||||
|
|
@ -90,7 +90,7 @@
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>D:/Programme/vs2022/RasterMergeTest/TestData/landcover_aligned.tiff</string>
|
<string>D:/Programme/vs2022/RasterMergeTest/TestData/landcover_aligned2</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
|
||||||
|
|
@ -202,6 +202,7 @@ ErrorCode RTPCProcessCls::DEMPreprocess()
|
||||||
|
|
||||||
double rowidx = 0;
|
double rowidx = 0;
|
||||||
double colidx = 0;
|
double colidx = 0;
|
||||||
|
|
||||||
for (int max_rows_ids = 0; max_rows_ids < demds.height; max_rows_ids = max_rows_ids + line_invert) {
|
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 demdata = demds.getData(max_rows_ids, 0, line_invert, demds.width, 1);
|
||||||
Eigen::MatrixXd xyzdata_x = demdata.array() * 0;
|
Eigen::MatrixXd xyzdata_x = demdata.array() * 0;
|
||||||
|
|
@ -239,7 +240,7 @@ ErrorCode RTPCProcessCls::DEMPreprocess()
|
||||||
line_invert = 1000;
|
line_invert = 1000;
|
||||||
long start_ids = 0;
|
long start_ids = 0;
|
||||||
long dem_rows = 0, dem_cols = 0;
|
long dem_rows = 0, dem_cols = 0;
|
||||||
|
|
||||||
for (start_ids = 1; start_ids < demds.height; start_ids = start_ids + line_invert) {
|
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);
|
Eigen::MatrixXd demdata = demds.getData(start_ids - 1, 0, line_invert + 2, demxyz.width, 1);
|
||||||
long startlineid = start_ids;
|
long startlineid = start_ids;
|
||||||
|
|
@ -437,6 +438,7 @@ ErrorCode RTPCProcessCls::RTPCMainProcess(long num_thread)
|
||||||
|
|
||||||
float* h_TantPattern = (float*)mallocCUDAHost(sizeof(float) * Tthetanum * Tphinum);
|
float* h_TantPattern = (float*)mallocCUDAHost(sizeof(float) * Tthetanum * Tphinum);
|
||||||
float* d_TantPattern = (float*)mallocCUDADevice(sizeof(float) * Tthetanum * Tphinum);
|
float* d_TantPattern = (float*)mallocCUDADevice(sizeof(float) * Tthetanum * Tphinum);
|
||||||
|
|
||||||
for (long i = 0; i < Tthetanum; i++) {
|
for (long i = 0; i < Tthetanum; i++) {
|
||||||
for (long j = 0; j < Tphinum; j++) {
|
for (long j = 0; j < Tphinum; j++) {
|
||||||
h_TantPattern[i*Tphinum+j] = TransformPattern->getGainLearThetaPhi(TstartTheta + i * Tdtheta, TstartPhi + j * Tdphi);
|
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* h_RantPattern = (float*)mallocCUDAHost(sizeof(float) * Rthetanum * Rphinum);
|
||||||
float* d_RantPattern = (float*)mallocCUDADevice(sizeof(float) * Rthetanum * Rphinum);
|
float* d_RantPattern = (float*)mallocCUDADevice(sizeof(float) * Rthetanum * Rphinum);
|
||||||
|
|
||||||
for (long i = 0; i < Rthetanum; i++) {
|
for (long i = 0; i < Rthetanum; i++) {
|
||||||
for (long j = 0; j < Rphinum; j++) {
|
for (long j = 0; j < Rphinum; j++) {
|
||||||
h_RantPattern[i * Rphinum + j] = ReceivePattern->getGainLearThetaPhi(RstartTheta + i * Rdtheta, RstartPhi + j * Rdphi);
|
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* h_echoAmp = (cuComplex*)mallocCUDAHost(sizeof(cuComplex) * blokline * tempDemCols);
|
||||||
cuComplex* d_echoAmp = (cuComplex*)mallocCUDADevice(sizeof(cuComplex) * blokline * tempDemCols);
|
cuComplex* d_echoAmp = (cuComplex*)mallocCUDADevice(sizeof(cuComplex) * blokline * tempDemCols);
|
||||||
|
|
||||||
long* h_echoAmpFID = (long*)mallocCUDAHost(sizeof(long) * blokline * tempDemCols);
|
int* h_echoAmpFID = (int*)mallocCUDAHost(sizeof(int) * blokline * tempDemCols);
|
||||||
long* d_echoAmpFID = (long*)mallocCUDADevice(sizeof(long) * blokline * tempDemCols);
|
int* d_echoAmpFID = (int*)mallocCUDADevice(sizeof(int) * blokline * tempDemCols);
|
||||||
|
|
||||||
Eigen::MatrixXd landcover= Eigen::MatrixXd::Zero(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);;
|
h_echoAmp = (cuComplex*)mallocCUDAHost(sizeof(cuComplex) * newblokline * tempDemCols);;
|
||||||
d_echoAmp = (cuComplex*)mallocCUDADevice(sizeof(cuComplex) * newblokline * tempDemCols);;
|
d_echoAmp = (cuComplex*)mallocCUDADevice(sizeof(cuComplex) * newblokline * tempDemCols);;
|
||||||
|
|
||||||
h_echoAmpFID = (long*)mallocCUDAHost(sizeof(long) * newblokline * tempDemCols);
|
h_echoAmpFID = (int*)mallocCUDAHost(sizeof(int) * newblokline * tempDemCols);
|
||||||
d_echoAmpFID = (long*)mallocCUDADevice(sizeof(long) * newblokline * tempDemCols);
|
d_echoAmpFID = (int*)mallocCUDADevice(sizeof(int) * newblokline * tempDemCols);
|
||||||
}
|
}
|
||||||
|
|
||||||
{ // 处理 dem -> 数量
|
{ // 处理 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_demsloper_angle, (void*)d_demsloper_angle, sizeof(float) * newblokline * tempDemCols);
|
||||||
HostToDevice((void*)h_demcls, (void*)d_demcls, 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++) {
|
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;
|
antpx = sateOirbtNodes[prfid].Px;
|
||||||
float antpy = sateOirbtNodes[prfid].Py;
|
antpy = sateOirbtNodes[prfid].Py;
|
||||||
float antpz = sateOirbtNodes[prfid].Pz;
|
antpz = sateOirbtNodes[prfid].Pz;
|
||||||
float antvx = sateOirbtNodes[prfid].Vx;
|
antvx = sateOirbtNodes[prfid].Vx;
|
||||||
float antvy = sateOirbtNodes[prfid].Vy;
|
antvy = sateOirbtNodes[prfid].Vy;
|
||||||
float antvz = sateOirbtNodes[prfid].Vz; //6
|
antvz = sateOirbtNodes[prfid].Vz; //6
|
||||||
float antdirectx = sateOirbtNodes[prfid].AntDirecX;
|
antdirectx = sateOirbtNodes[prfid].AntDirecX;
|
||||||
float antdirecty = sateOirbtNodes[prfid].AntDirecY;
|
antdirecty = sateOirbtNodes[prfid].AntDirecY;
|
||||||
float antdirectz = sateOirbtNodes[prfid].AntDirecZ; // 9 天线指向
|
antdirectz = sateOirbtNodes[prfid].AntDirecZ; // 9 天线指向
|
||||||
float antXaxisX = sateOirbtNodes[prfid].AntXaxisX;
|
antXaxisX = sateOirbtNodes[prfid].AntXaxisX;
|
||||||
float antXaxisY = sateOirbtNodes[prfid].AntXaxisY;
|
antXaxisY = sateOirbtNodes[prfid].AntXaxisY;
|
||||||
float antXaxisZ = sateOirbtNodes[prfid].AntXaxisZ;//12 天线坐标系
|
antXaxisZ = sateOirbtNodes[prfid].AntXaxisZ;//12 天线坐标系
|
||||||
float antYaxisX = sateOirbtNodes[prfid].AntYaxisX;
|
antYaxisX = sateOirbtNodes[prfid].AntYaxisX;
|
||||||
float antYaxisY = sateOirbtNodes[prfid].AntYaxisY;
|
antYaxisY = sateOirbtNodes[prfid].AntYaxisY;
|
||||||
float antYaxisZ = sateOirbtNodes[prfid].AntYaxisZ;//15
|
antYaxisZ = sateOirbtNodes[prfid].AntYaxisZ;//15
|
||||||
float antZaxisX = sateOirbtNodes[prfid].AntZaxisX;
|
antZaxisX = sateOirbtNodes[prfid].AntZaxisX;
|
||||||
float antZaxisY = sateOirbtNodes[prfid].AntZaxisY;
|
antZaxisY = sateOirbtNodes[prfid].AntZaxisY;
|
||||||
float antZaxisZ = sateOirbtNodes[prfid].AntZaxisZ;//18
|
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(
|
CUDA_RTPC_SiglePRF(
|
||||||
antpx, antpy, antpz,// 天线坐标
|
antpx, antpy, antpz,// 天线坐标
|
||||||
antXaxisX, antXaxisY, antXaxisZ, // 天线坐标系
|
antXaxisX, antXaxisY, antXaxisZ, // 天线坐标系
|
||||||
antYaxisX, antYaxisY, antYaxisZ, //
|
antYaxisX, antYaxisY, antYaxisZ, //
|
||||||
antZaxisX, antZaxisY, antZaxisZ,
|
antZaxisX, antZaxisY, antZaxisZ,
|
||||||
antdirectx, antdirecty, antdirectz,// 天线指向
|
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_demsloper_x, d_demsloper_y, d_demsloper_z, d_demsloper_angle,// 地面坡度
|
||||||
d_TantPattern, TstartTheta,TstartPhi, Tdtheta, Tdphi, Tthetanum, Tphinum,// 天线方向图相关
|
d_TantPattern, TstartTheta,TstartPhi, Tdtheta, Tdphi, Tthetanum, Tphinum,// 天线方向图相关
|
||||||
d_RantPattern, RstartTheta, RstartPhi, Rdtheta, Rdphi, Rthetanum,Rphinum,// 天线方向图相关
|
d_RantPattern, RstartTheta, RstartPhi, Rdtheta, Rdphi, Rthetanum,Rphinum,// 天线方向图相关
|
||||||
lamda, Fs, NearRange, Pt, PlusePoint, // 参数
|
lamda, Fs, NearRange, Pt, PlusePoint, // 参数
|
||||||
d_clsSigmaParam, clamapid,// 地表覆盖类型-sigma插值对应函数-ulaby
|
d_clsSigmaParam, clamapid,// 地表覆盖类型-sigma插值对应函数-ulaby
|
||||||
d_echoAmp, d_echoAmpFID,
|
d_echoAmp, d_echoAmpFID,
|
||||||
pixelcount
|
newblokline,tempDemCols);
|
||||||
);
|
|
||||||
DeviceToHost(h_echoAmpFID, d_echoAmpFID, sizeof(long)* newblokline* tempDemCols);
|
DeviceToHost(h_echoAmpFID, d_echoAmpFID, sizeof(long)* newblokline* tempDemCols);
|
||||||
DeviceToHost(h_echoAmp, d_echoAmp, 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++) {
|
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->VH_sigmaParam.clear();
|
||||||
this->VV_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
|
//12
|
||||||
this->HH_sigmaParam.insert(std::pair<long, SigmaParam>(12, SigmaParam{ -21.1019701821713, 9.00621457243906, 6.52932182540331, - 1.11157376729893, - 15.8022895411007, 11.4690828129602 }));
|
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 }));
|
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->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->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 }));
|
this->VV_sigmaParam.insert(std::pair<long, SigmaParam>(90, SigmaParam{ -20.1761798059391, 13.2752519275021, 2.74667225608397, 3.63052241744923, 8.99932188120922, 34.8246533269446 }));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SigmaDatabase::~SigmaDatabase()
|
SigmaDatabase::~SigmaDatabase()
|
||||||
|
|
@ -82,7 +84,6 @@ SigmaDatabase::~SigmaDatabase()
|
||||||
this->HV_sigmaParam.clear();
|
this->HV_sigmaParam.clear();
|
||||||
this->VH_sigmaParam.clear();
|
this->VH_sigmaParam.clear();
|
||||||
this->VV_sigmaParam.clear();
|
this->VV_sigmaParam.clear();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double SigmaDatabase::getAmpHH(long cls, double angle)
|
double SigmaDatabase::getAmpHH(long cls, double angle)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue