c++ mkl lindley
This's the best version
#include <iostream>
#include <vector>
#include <algorithm>
#include <chrono>
#include "mkl.h"
const int N = static_cast<int>(1e4);
const double beta = 0.5; // Mean of exponential distribution
int main() {
// Initialize arrays
std::vector<double> t(N - 1);
std::vector<double> s(N);
std::vector<double> wq(N, 0.0);
std::vector<double> w(N, 0.0);
// Create MKL random number generator
VSLStreamStatePtr stream;
vslNewStream(&stream, VSL_BRNG_MT19937, 777);
// Generate exponential random numbers
vdRngExponential(VSL_RNG_METHOD_EXPONENTIAL_ICDF, stream, N - 1, t.data(), 0.0, beta);
vdRngExponential(VSL_RNG_METHOD_EXPONENTIAL_ICDF, stream, N, s.data(), 0.0, beta);
// Start timing
auto start = std::chrono::high_resolution_clock::now();
// Compute wq and w
w[0] = s[0];
for (int i = 1; i <= N; i++) {
wq[i] = std::max(0.0, wq[i - 1] + s[i - 1] - t[i - 1]);
w[i] = wq[i] + s[i];
}
// End timing
auto end = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> elapsed = end - start;
// Print results
std::cout << "Elapsed time: " << elapsed.count() << " milliseconds" << std::endl;
// Cleanup
vslDeleteStream(&stream);
return 0;
}

浙公网安备 33010602011771号