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;
}

posted @ 2025-04-03 09:38  ChrainY  阅读(12)  评论(0)    收藏  举报