Guest User

Untitled

a guest
Nov 12th, 2011
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 3.49 KB | None | 0 0
  1. --- var-mt.c    2011-11-12 11:28:12.000000000 -0500
  2. +++ var-mt.cpp  2011-11-12 11:27:28.000000000 -0500
  3. @@ -3,12 +3,11 @@
  4.  #include <stdio.h>
  5.  #include <math.h>
  6.  #include <pthread.h>
  7. -#include <stdint.h>
  8.  
  9.  #define NS 10
  10. -#define CORES 4
  11. +#define CORES 8
  12.  
  13. -uint32_t initialSeed( size_t index )
  14. +inline uint32_t initialSeed( size_t index )
  15.  {
  16.    uint32_t seed = 1;
  17.    uint32_t mult = 300773;
  18. @@ -23,14 +22,14 @@
  19.    return seed;
  20.  }
  21.  
  22. -double nextUniform01( uint32_t* seed )
  23. +inline double nextUniform01( uint32_t &seed )
  24.  {
  25. -  *seed = (*seed * 300773) % 1073741824;
  26. +  seed = (seed * 300773) % 1073741824;
  27.    //printf( "%u\n", (unsigned)seed );
  28. -  return (double)*seed / (double)1073741824.0;
  29. +  return double(seed) / double(1073741824.0);
  30.  }
  31.  
  32. -double randomNormal( uint32_t* seed )
  33. +inline double randomNormal( uint32_t &seed )
  34.  {
  35.    double x1, x2, w;
  36.    do
  37. @@ -43,13 +42,13 @@
  38.    return x1 * w;
  39.  }
  40.  
  41. -void randomNormalVec( double vec[NS], uint32_t* seed )
  42. +inline void randomNormalVec( double vec[NS], uint32_t &seed )
  43.  {
  44.    for ( size_t i=0; i<NS; ++i )
  45.      vec[i] = randomNormal( seed );
  46.  }
  47.  
  48. -void multMatVec( double const mat[NS][NS], double const vec[NS], double res[NS] )
  49. +inline void multMatVec( double const mat[NS][NS], double const vec[NS], double res[NS] )
  50.  {
  51.    for ( size_t i=0; i<NS; ++i )
  52.    {
  53. @@ -59,7 +58,7 @@
  54.    }
  55.  }
  56.  
  57. -double runTrial(
  58. +inline double runTrial(
  59.    size_t index,
  60.    size_t numTradingDays,
  61.    double dt,
  62. @@ -77,7 +76,7 @@
  63.    for ( size_t day=0; day<numTradingDays; ++day )
  64.    {
  65.      double Z[NS];
  66. -    randomNormalVec( Z, &seed );
  67. +    randomNormalVec( Z, seed );
  68.      double X[NS];
  69.      multMatVec( choleskyTrans, Z, X );
  70.      for ( size_t i=0; i<NS; ++i )
  71. @@ -90,22 +89,22 @@
  72.    return value;
  73.  }
  74.  
  75. -typedef struct FixedArgs_
  76. +struct FixedArgs
  77.  {
  78.    size_t numTradingDays;
  79.    double dt;
  80.    double sqrtDT;
  81.    double choleskyTrans[NS][NS];
  82.    double drifts[NS];
  83. -} FixedArgs;
  84. +};
  85.  
  86. -typedef struct Args_
  87. +struct Args
  88.  {
  89.    FixedArgs *fixedArgs;
  90.    size_t startIndex;
  91.    size_t endIndex;
  92.    double *trialResults;
  93. -} Args;
  94. +};
  95.  
  96.  void *threadEntry( void *_args )
  97.  {
  98. @@ -125,7 +124,7 @@
  99.    return 0;
  100.  }
  101.  
  102. -void trans( double A[NS][NS], double B[NS][NS] )
  103. +inline void trans( double A[NS][NS], double B[NS][NS] )
  104.  {
  105.    for ( size_t i=0; i<NS; ++i )
  106.    {
  107. @@ -136,7 +135,7 @@
  108.    }
  109.  }
  110.  
  111. -void multMatMat( double A[NS][NS], double B[NS][NS], double R[NS][NS] )
  112. +inline void multMatMat( double A[NS][NS], double B[NS][NS], double R[NS][NS] )
  113.  {
  114.    for ( size_t i=0; i<NS; ++i )
  115.    {
  116. @@ -149,7 +148,7 @@
  117.    }
  118.  }
  119.  
  120. -void randomCorrelation( double R[NS][NS], uint32_t* seed )
  121. +void randomCorrelation( double R[NS][NS], uint32_t &seed )
  122.  {
  123.    double T[NS][NS];
  124.    for ( size_t i=0; i<NS; ++i )
  125. @@ -213,7 +212,7 @@
  126.  int main( int argc, char **argv )
  127.  {
  128.    size_t const numTrials = 1048576;
  129. -  double *trialResults = malloc(sizeof(double) * numTrials);
  130. +  double *trialResults = new double[numTrials];
  131.  
  132.    FixedArgs fixedArgs;
  133.    fixedArgs.numTradingDays = 252;
  134. @@ -231,7 +230,7 @@
  135.    uint32_t seed = initialSeed(0);
  136.  
  137.    double priceCorrelations[NS][NS];
  138. -  randomCorrelation( priceCorrelations, &seed );
  139. +  randomCorrelation( priceCorrelations, seed );
  140.  
  141.    double priceCovariance[NS][NS];
  142.    for ( size_t i=0; i<NS; ++i )
  143. @@ -274,7 +273,7 @@
  144.  
  145.    printf( "VaR = %.16f\n", 100.0*NS - trialResults[(size_t)floor( 0.05 * numTrials )] );
  146.  
  147. -  free(trialResults);
  148. +  delete [] trialResults;
  149.  
  150.    return 0;
  151.  }
  152.  
  153.  
Advertisement
Add Comment
Please, Sign In to add comment