Advertisement
4da

ver2

4da
Aug 4th, 2011
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.36 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <cuda.h>
  4. #include <shrUtils.h>
  5. #include <cutil_inline.h>
  6. #include "cutil_math.h"
  7. #include "cutil_inline.h"
  8. #include <math_functions.h>
  9. #include <iostream>
  10.  
  11. #define uint32 unsigned int
  12. #define int32  int
  13.  
  14.  
  15. using namespace std;
  16.  
  17. size_t cmem_free;
  18. size_t cmem_total;
  19.  
  20. #define BYTES 4
  21.  
  22.  
  23. #define uchar unsigned char
  24. #define BLOCK_SIZE 512
  25. const long double DRO = 4.8481368122023329446e-6;
  26. //float DRO = 4.8481368122023329446e-6;
  27.  
  28. #ifndef GEOD_CONSTANTS
  29. #define GEOD_CONSTANTS
  30. #define GEOD_PI  3.14159265358979323846
  31. #define GEOD_PI2 1.57079632679489661923
  32. #define GEOD_2PI 6.28318530717958647693
  33. #define R_Z_GK 6367558.4968
  34. #define R_Z_WGS 6367449.1457662908
  35. #define A_WGS 6378137.
  36. #define A_PZ90 6378136.
  37. #define A_CK42 6378245.
  38. #define F_WGS 298.257223563
  39. #define F_PZ90 298.257839303
  40. #define F_CK42 298.3
  41. // e = 1/f
  42. #define E_WGS 0.00335281066474748
  43. #define E_PZ90 0.0033528037351843
  44. #define E_CK42 0.00335232986925913
  45. #endif // GEOD_CONSTANTS
  46.  
  47.  
  48. __global__ void gdcTogdc(float *b1,float *l1, float *h1, float *b2,float *l2, float *h2)
  49. {
  50.     float val1 = (float)A_CK42;
  51.     float val2 = (float)A_PZ90;
  52.     float val3 = (float)E_CK42;
  53.     float val4 = (float)E_PZ90;
  54.     float val5 = 25.;
  55.     float val6 = -141.;
  56.     float val7 = -80.;
  57.     float val8 = 0.;
  58.     float val9 = -0.35;
  59.     float val10 = -0.66;
  60.     float val11 = 0.0;
  61.  
  62.     //int idx = threadIdx.x + blockIdx.x * blockDim.x;
  63.     int idx = threadIdx.x;
  64.  
  65.     h1[idx] = 8;
  66.     //h1[1] = 8;
  67.     //h1[2] = 9;
  68.  
  69.  /*   float deltaA = (val1 - val2);
  70.     float deltaE2 = (val3 - val4)*0.5;
  71.     float a = (val1 + val2) *0.5;
  72.     float eps2 = (val3 + val4) * 0.5;
  73.     float es1 = - eps2  + 1.;
  74.     float sinb = __sinf(b1[idx]);
  75.     float cosb = __cosf(b1[idx]);
  76.     float sinl = __sinf(l1[idx]);
  77.     float cosl = __cosf(l1[idx]);
  78.     float cos2b = __cosf(b1[idx]*2.);
  79.     float sinBcosB = sinb * cosb;
  80.     float sinB2 = sinb * sinb;
  81.     float dXcosLplusdYsinL = val5 * cosl + val6 * sinl;
  82.     float eps2sinB21 = - eps2 * sinB2 + 1.;
  83.     float inFeps2sinB21 = 1./eps2sinB21;
  84.     float temp1 = sqrtf(eps2sinB21);
  85.     float N = a / temp1; // радиус кривизны первого вертикала
  86.     float M = N * es1 * inFeps2sinB21; // радиус кривизны меридианного сечения
  87.     float wycosLsubwxsinL = val9 * cosl - val8 * sinl;
  88.     float temp = (N *sinBcosB* (deltaA * eps2  / a + (inFeps2sinB21 + 1.)* deltaE2) - dXcosLplusdYsinL * sinb + val7 * cosb) / (M + h1[idx]);
  89.     temp -= eps2 * (val11)*sinBcosB;
  90.     temp += wycosLsubwxsinL * (eps2 * cos2b + 1.);
  91.     b2[idx] = b1[idx] + temp;
  92.     l2[idx] = l1[idx] + (val6 * cosl - val5 * sinl) /((N + h1[idx]) * cosb) + tan(b1[idx]) * es1 * (val8 * cosl + val9 * sinl) - val10;
  93.     temp = dXcosLplusdYsinL * cosb + val7 * sinb + (a*a / N + h1[idx]) * (val11);
  94.     temp += N * deltaE2 * sinB2 - a * deltaA / N;
  95.     temp += wycosLsubwxsinL * N * eps2 * sinBcosB;
  96.  
  97.     h2[idx] = h1[idx] + temp;*/
  98. }
  99.  
  100. void gdc2gdc(float *b1, float *l1, float *h1, float *b2, float *l2, float *h2)
  101. {
  102.     //TSystemConvert convertSystem;
  103.    // getSystemConvert(flag, convertSystem);
  104.  
  105.     const unsigned int numItems= 100;  
  106.    
  107.     float * b1Dev, * l1Dev, *h1Dev;
  108.     float * b2Dev, * l2Dev, *h2Dev;
  109.     //float * dataDev;
  110.  
  111.     //float  data[11] = {val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11};
  112.  
  113. /*
  114.         cudaMalloc( (float**)&b1Dev, numItems*sizeof(float));
  115.     cudaMalloc( (float**)&l1Dev, numItems*sizeof(float));
  116.     cudaMalloc( (float**)&h1Dev, numItems*sizeof(float));
  117.         cudaMalloc( (float**)&b2Dev, numItems*sizeof(float));
  118.         cudaMalloc( (float**)&l2Dev, numItems*sizeof(float));
  119.         cudaMalloc( (float**)&h2Dev, numItems*sizeof(float));
  120. */
  121.         cutilSafeCall(cudaMalloc( (void**)&b1Dev, numItems*sizeof(float)));
  122.     cutilSafeCall(cudaMalloc( (void**)&l1Dev, numItems*sizeof(float)));
  123.     cutilSafeCall(cudaMalloc( (void**)&h1Dev, numItems*sizeof(float)));
  124.         cutilSafeCall(cudaMalloc( (void**)&b2Dev, numItems*sizeof(float)));
  125.         cutilSafeCall(cudaMalloc( (void**)&l2Dev, numItems*sizeof(float)));
  126.         cutilSafeCall(cudaMalloc( (void**)&h2Dev, numItems*sizeof(float)));
  127.  
  128.  
  129.   //    cudaMalloc( (void**)&dataDev, sizeof(data)*sizeof(float));
  130.  
  131.     dim3 threads = 512;
  132. //dim3(512,1);
  133.     dim3 blocks = 1;
  134. //dim3(numItems/threads.x/4 + ((numItems/4 % threads.x) ? 1 : 0) ,1);
  135.     cutilSafeCall( cudaThreadSynchronize() );
  136.  
  137.     cutilSafeCall(cudaMemcpy(b1Dev, b1, numItems*sizeof(float), cudaMemcpyHostToDevice));
  138.     cutilSafeCall(cudaMemcpy(l1Dev, l1, numItems*sizeof(float), cudaMemcpyHostToDevice));
  139.     cutilSafeCall(cudaMemcpy(h1Dev, h1, numItems*sizeof(float), cudaMemcpyHostToDevice));
  140.  
  141.     gdcTogdc <<<blocks,threads>>> (b1Dev,l1Dev,h1Dev,b2Dev,l2Dev,h2Dev);
  142.    
  143.  
  144.     cutilSafeCall(cudaMemcpy((void*)b2,b2Dev,numItems*sizeof(float), cudaMemcpyDeviceToHost));
  145.     cutilSafeCall(cudaMemcpy((void*)l2,l2Dev,numItems*sizeof(float), cudaMemcpyDeviceToHost));
  146.     cutilSafeCall(cudaMemcpy((void*)h2,h2Dev,numItems*sizeof(float), cudaMemcpyDeviceToHost));
  147.  
  148.     cutilSafeCall( cudaThreadSynchronize() );
  149.     cutilSafeCall(cudaFree(b1Dev));
  150.     cutilSafeCall(cudaFree(l1Dev));
  151.     cutilSafeCall(cudaFree(h1Dev));
  152.     cutilSafeCall(cudaFree(b2Dev));
  153.     cutilSafeCall(cudaFree(l2Dev));
  154.     cutilSafeCall(cudaFree(h2Dev));
  155. }
  156.  
  157. int main(int argc, char** argv)
  158. {
  159.  /*   float tr = l1/GEOD_2PI;
  160.     l1 = l1 - GEOD_2PI * floor(tr);
  161.     if (l1 < 0.)
  162.     {
  163.         l1 += GEOD_2PI;
  164.     }
  165.     else
  166.         if (l1 > GEOD_2PI)
  167.         {
  168.             l1 -= GEOD_2PI;
  169.         }
  170. */
  171.     int arraySize = 100;
  172.  
  173.     float * b1 = new float[arraySize];
  174.     float * l1 = new float[arraySize];
  175.     float * h1 = new float[arraySize];
  176.  
  177.     for(int i=0; i<arraySize; i++)
  178.     {
  179.         *(b1+i) = i;
  180.         *(l1+i) = i;
  181.         *(h1+i) = i;       
  182.     }
  183.  
  184.     float  *b2 = new float[arraySize];
  185.     float  *l2 = new float[arraySize];
  186.     float  *h2 = new float[arraySize];
  187.  
  188.     for(int i = 0; i<100; i++)
  189.     {
  190.         cout<<"b1["<<i<<"]="<<b1[i]<<"\t";
  191.         cout<<"l1["<<i<<"]="<<l1[i]<<"\t";
  192.         cout<<"h1["<<i<<"]="<<h1[i]<<endl;
  193.     }
  194.         //printf("b1[%d] = %d\t l1[%d] = %d\t h1[%d] = %d\n",i,b1+i,i,l1+i,i,h1+i);
  195.  
  196.     printf("=====================================================================\n");
  197.  
  198.     gdc2gdc( b1, l1, h1, b2, l2, h2);
  199.  
  200.     for(int idx = 0; idx<100; idx++)
  201.     {
  202.         cout<<"b2["<<idx<<"]="<<b2[idx]<<"\t";
  203.         cout<<"l2["<<idx<<"]="<<l2[idx]<<"\t";
  204.         cout<<"h2["<<idx<<"]="<<h2[idx]<<endl;
  205.     }
  206.  
  207.     return 0;
  208. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement