Commit 08d1c3b9358d69b5250d4cc4d075ddb1b5072615

Authored by David Mayerich
1 parent 1c994463

fixed casting warning caused by cuBLAS

Showing 3 changed files with 14 additions and 105 deletions   Show diff stats
@@ -1236,7 +1236,6 @@ public: @@ -1236,7 +1236,6 @@ public:
1236 cublasHandle_t handle; 1236 cublasHandle_t handle;
1237 1237
1238 std::ofstream target(outfile.c_str(), std::ios::binary); //open the target binary file 1238 std::ofstream target(outfile.c_str(), std::ios::binary); //open the target binary file
1239 - //std::string headername = outfile + ".hdr"; //the header file name  
1240 1239
1241 progress = 0; //initialize the progress to zero (0) 1240 progress = 0; //initialize the progress to zero (0)
1242 unsigned long long XY = X() * Y(); //calculate the number of elements in a band image 1241 unsigned long long XY = X() * Y(); //calculate the number of elements in a band image
@@ -1281,19 +1280,19 @@ public: @@ -1281,19 +1280,19 @@ public:
1281 return EXIT_FAILURE; 1280 return EXIT_FAILURE;
1282 } 1281 }
1283 1282
1284 - T* temp = (T*)malloc(sizeof(T) * M); //allocate space for the projected pixel to be written on the disc  
1285 -  
1286 - for (unsigned long long xy = 0; xy < XY; xy++){ //for each pixel 1283 + T* temp = (T*)malloc(sizeof(T) * M); //allocate space for the projected pixel to be written on the disc
  1284 + size_t i;
  1285 + for (unsigned long long xy = 0; xy < XY; xy++){ //for each pixel
1287 if (mask == NULL || mask[xy] != 0){ 1286 if (mask == NULL || mask[xy] != 0){
1288 - pixeld(s, xy); //retreive the spectrum at the current xy pixel location 1287 + pixeld(s, xy); //retreive the spectrum at the current xy pixel location
1289 1288
1290 stat = cublasSetVector((int)B, sizeof(double), s, 1, s_dev, 1); //copy the spectrum from the host to the device 1289 stat = cublasSetVector((int)B, sizeof(double), s, 1, s_dev, 1); //copy the spectrum from the host to the device
1291 stat = cublasDaxpy(handle, (int)B, &axpy_alpha, center_dev, 1, s_dev, 1); //subtract the center (average) 1290 stat = cublasDaxpy(handle, (int)B, &axpy_alpha, center_dev, 1, s_dev, 1); //subtract the center (average)
1292 stat = cublasDgemv(handle,CUBLAS_OP_N,(int)M,(int)B,&axpy_alpha2,basis_dev,(int)M,s_dev,1,&axpy_beta,A_dev,1); //performs the matrix-vector multiplication 1291 stat = cublasDgemv(handle,CUBLAS_OP_N,(int)M,(int)B,&axpy_alpha2,basis_dev,(int)M,s_dev,1,&axpy_beta,A_dev,1); //performs the matrix-vector multiplication
1293 - stat = cublasGetVector((int)B, sizeof(double), A_dev, 1, A, 1); //copy the projected pixel to the host (from GPU to CPU)  
1294 -  
1295 - std::copy(A, A + M, temp); //casting projected pixel from double to whatever T is 1292 + stat = cublasGetVector((int)B, sizeof(double), A_dev, 1, A, 1); //copy the projected pixel to the host (from GPU to CPU)
1296 1293
  1294 + //std::copy<double*, T*>(A, A + M, temp);
  1295 + for(i = 0; i < M; i++) temp[i] = (T)A[i]; //casting projected pixel from double to whatever T is
1297 } 1296 }
1298 1297
1299 target.write(reinterpret_cast<const char*>(temp), sizeof(T) * M); //write the projected vector 1298 target.write(reinterpret_cast<const char*>(temp), sizeof(T) * M); //write the projected vector
@@ -1310,7 +1309,7 @@ public: @@ -1310,7 +1309,7 @@ public:
1310 free(s); 1309 free(s);
1311 free(temp); 1310 free(temp);
1312 target.close(); //close the output file 1311 target.close(); //close the output file
1313 - 1312 +
1314 return true; 1313 return true;
1315 } 1314 }
1316 #endif 1315 #endif
@@ -1360,7 +1359,7 @@ public: @@ -1360,7 +1359,7 @@ public:
1360 free(s); //free temporary storage arrays 1359 free(s); //free temporary storage arrays
1361 free(rs); 1360 free(rs);
1362 target.close(); //close the output file 1361 target.close(); //close the output file
1363 - 1362 +
1364 return true; 1363 return true;
1365 } 1364 }
1366 1365
@@ -394,7 +394,7 @@ public: @@ -394,7 +394,7 @@ public:
394 std::ofstream target(outname.c_str(), std::ios::binary); 394 std::ofstream target(outname.c_str(), std::ios::binary);
395 std::string headername = outname + ".hdr"; 395 std::string headername = outname + ".hdr";
396 396
397 - size_t batches = ceil((double)(Y()) / (double)batch_slices); //calculate the number of batches 397 + size_t batches = (size_t)ceil((double)(Y()) / (double)batch_slices); //calculate the number of batches
398 T* ptrDst; 398 T* ptrDst;
399 T* ptrSrc; 399 T* ptrSrc;
400 for(size_t c = 0; c < batches; c++){ 400 for(size_t c = 0; c < batches; c++){
@@ -59,15 +59,17 @@ class envi{ @@ -59,15 +59,17 @@ class envi{
59 for(size_t i = 0; i < len; i++) 59 for(size_t i = 0; i < len; i++)
60 cast(&dst[i], &src[i]); 60 cast(&dst[i], &src[i]);
61 } 61 }
62 - 62 +
63 public: 63 public:
  64 + envi_header header;
64 65
  66 +
65 /// Default constructor 67 /// Default constructor
66 envi(){ 68 envi(){
67 file = NULL; //set the file pointer to NULL 69 file = NULL; //set the file pointer to NULL
68 } 70 }
69 71
70 - envi_header header; 72 +
71 73
72 void* malloc_spectrum(){ 74 void* malloc_spectrum(){
73 return alloc_array(header.bands); 75 return alloc_array(header.bands);
@@ -1171,46 +1173,6 @@ public: @@ -1171,46 +1173,6 @@ public:
1171 return false; 1173 return false;
1172 } 1174 }
1173 1175
1174 - /// Retrieve a spectrum from the specified location  
1175 -  
1176 - /// @param ptr is a pointer to pre-allocated memory of size B*sizeof(T)  
1177 - /// @param x is the x-coordinate of the spectrum  
1178 - /// @param y is the y-coordinate of the spectrum  
1179 - /*bool spectrum(void* ptr, unsigned long long x, unsigned long long y, bool PROGRESS = false){  
1180 -  
1181 - if(header.interleave == envi_header::BSQ){ //if the infile is bsq file  
1182 - if(header.data_type ==envi_header::float32)  
1183 - return ((bsq<float>*)file)->spectrum((float*)ptr, x, y, PROGRESS);  
1184 - else if (header.data_type == envi_header::float64)  
1185 - return ((bsq<double>*)file)->spectrum((double*)ptr, x, y, PROGRESS);  
1186 - else{  
1187 - std::cout << "ERROR: unidentified data type" << std::endl;  
1188 - exit(1);  
1189 - }  
1190 - }  
1191 - else if (header.interleave == envi_header::BIL){  
1192 - if (header.data_type == envi_header::float32)  
1193 - return ((bil<float>*)file)->spectrum((float*)ptr, x, y, PROGRESS);  
1194 - else if (header.data_type == envi_header::float64)  
1195 - return ((bil<double>*)file)->spectrum((double*)ptr, x, y, PROGRESS);  
1196 - else{  
1197 - std::cout << "ERROR: unidentified data type" << std::endl;  
1198 - exit(1);  
1199 - }  
1200 - }  
1201 - else if (header.interleave == envi_header::BIP){  
1202 - if (header.data_type == envi_header::float32)  
1203 - return ((bip<float>*)file)->spectrum((float*)ptr, x, y, PROGRESS);  
1204 - else if (header.data_type == envi_header::float64)  
1205 - return ((bip<double>*)file)->spectrum((double*)ptr, x, y, PROGRESS);  
1206 - else{  
1207 - std::cout << "ERROR: unidentified data type" << std::endl;  
1208 - exit(1);  
1209 - }  
1210 - }  
1211 - return false;  
1212 - }*/  
1213 -  
1214 // Retrieve a spectrum at the specified 1D location 1176 // Retrieve a spectrum at the specified 1D location
1215 1177
1216 /// @param ptr is a pointer to pre-allocated memory of size B*sizeof(T) 1178 /// @param ptr is a pointer to pre-allocated memory of size B*sizeof(T)
@@ -1274,50 +1236,6 @@ public: @@ -1274,50 +1236,6 @@ public:
1274 void spectrum(T* ptr, size_t x, size_t y, bool PROGRESS = false){ 1236 void spectrum(T* ptr, size_t x, size_t y, bool PROGRESS = false){
1275 1237
1276 spectrum<T>(ptr, y * header.samples + x, PROGRESS); 1238 spectrum<T>(ptr, y * header.samples + x, PROGRESS);
1277 - /*void* temp = alloc_array<T>(header.bands); //allocate space for the output array  
1278 -  
1279 - if(header.interleave == envi_header::BSQ){ //if the infile is bsq file  
1280 - if(header.data_type ==envi_header::float32){  
1281 - ((bsq<float>*)file)->spectrum((float*)temp, x, y, PROGRESS);  
1282 - cast<T, float>(ptr, temp, header.bands);  
1283 - }  
1284 - else if (header.data_type == envi_header::float64){  
1285 - ((bsq<double>*)file)->spectrum((double*)temp, x, y, PROGRESS);  
1286 - cast<T, double>(ptr, temp, header.bands);  
1287 - }  
1288 - else{  
1289 - std::cout << "ERROR: unidentified data type" << std::endl;  
1290 - exit(1);  
1291 - }  
1292 - }  
1293 - else if (header.interleave == envi_header::BIL){  
1294 - if (header.data_type == envi_header::float32){  
1295 - ((bil<float>*)file)->spectrum((float*)temp, x, y, PROGRESS);  
1296 - cast<T, float>(ptr, temp, header.bands);  
1297 - }  
1298 - else if (header.data_type == envi_header::float64){  
1299 - ((bil<double>*)file)->spectrum((double*)temp, x, y, PROGRESS);  
1300 - cast<T, double>(ptr, temp, header.bands);  
1301 - }  
1302 - else{  
1303 - std::cout << "ERROR: unidentified data type" << std::endl;  
1304 - exit(1);  
1305 - }  
1306 - }  
1307 - else if (header.interleave == envi_header::BIP){  
1308 - if (header.data_type == envi_header::float32){  
1309 - ((bip<float>*)file)->spectrum((float*)temp, x, y, PROGRESS);  
1310 - cast<T, float>(ptr, temp, header.bands);  
1311 - }  
1312 - else if (header.data_type == envi_header::float64){  
1313 - ((bip<double>*)file)->spectrum((double*)temp, x, y, PROGRESS);  
1314 - cast<T, double>(ptr, temp, header.bands);  
1315 - }  
1316 - else{  
1317 - std::cout << "ERROR: unidentified data type" << std::endl;  
1318 - exit(1);  
1319 - }  
1320 - }*/  
1321 } 1239 }
1322 1240
1323 /// Retrieve a single band (based on index) and stores it in pre-allocated memory. 1241 /// Retrieve a single band (based on index) and stores it in pre-allocated memory.
@@ -1405,14 +1323,6 @@ public: @@ -1405,14 +1323,6 @@ public:
1405 if (header.interleave == envi_header::BSQ){ 1323 if (header.interleave == envi_header::BSQ){
1406 std::cout<<"ERROR: calculating the covariance matrix for a BSQ file is impractical; convert to BIL or BIP first"<<std::endl; 1324 std::cout<<"ERROR: calculating the covariance matrix for a BSQ file is impractical; convert to BIL or BIP first"<<std::endl;
1407 exit(1); 1325 exit(1);
1408 - /*if (header.data_type == envi_header::float32)  
1409 - return ((bsq<float>*)file)->co_matrix(co, avg, mask, PROGRESS);  
1410 - else if (header.data_type == envi_header::float64)  
1411 - return ((bsq<double>*)file)->co_matrix(co, avg, mask, PROGRESS);  
1412 - else{  
1413 - std::cout << "ERROR: unidentified data type" << std::endl;  
1414 - exit(1);  
1415 - }*/  
1416 } 1326 }
1417 else if (header.interleave == envi_header::BIL){ 1327 else if (header.interleave == envi_header::BIL){
1418 if (header.data_type == envi_header::float32) 1328 if (header.data_type == envi_header::float32)