MersenneTwister application one more question MersenneTwister application one more....

MersenneTwister application one more question

After call RandomGPU <<<32, 128>>> (d_Rand, N_PER_RNG);

The array of random numbers is generated (the array d_Random) which is then written in h_RandGPU, after performance of a part of the program I need to generate the following array of random numbers (i.e. to continue generation of random numbers from last number in the previous array i.e. to generate a array of numbers in regular intervals distributed with numbers from the previous array) at performance of this part of the program of sequence of random numbers remain identical how it to correct?

/* Generating 1-s array random numbers h_RandGPU*/

printf("Loading CPU and GPU twisters configurations...\n");

        const char *raw_path = cutFindFilePath("MersenneTwister.raw", argv[0]);

        const char *dat_path = cutFindFilePath("MersenneTwister.dat", argv[0]);

        initMTRef(raw_path);

        loadMTGPU(dat_path);

        seedMTGPU(SEED);

   printf("Generating random numbers on GPU...\n");

        CUDA_SAFE_CALL( cudaThreadSynchronize() );

        CUT_SAFE_CALL( cutResetTimer(hTimer) );

        CUT_SAFE_CALL( cutStartTimer(hTimer) );

        RandomGPU<<<32, 128>>>(d_Rand, N_PER_RNG);

        CUT_CHECK_ERROR("RandomGPU() execution failed\n");

        CUDA_SAFE_CALL( cudaThreadSynchronize() );

        CUT_SAFE_CALL( cutStopTimer(hTimer) );

        gpuTime = cutGetTimerValue(hTimer);

    printf("Generated samples : %i \n", RAND_N);

    printf("RandomGPU() time  : %f \n", gpuTime);

    printf("Samples per second: %E \n", RAND_N / (gpuTime * 0.001));

   printf("Reading back the results...\n");

    CUDA_SAFE_CALL( cudaMemcpy(h_RandGPU, d_Rand, RAND_N * sizeof(float), cudaMemcpyDeviceToHost) );

/* Generating second arrayr andom numbers h_RandGPU*/

  printf("Loading CPU and GPU twisters configurations...\n");

        initMTRef(raw_path);

        loadMTGPU(dat_path);

      //seedMTGPU(SEED);

   printf("Generating random numbers on GPU...\n");

        CUDA_SAFE_CALL( cudaThreadSynchronize() );

        CUT_SAFE_CALL( cutResetTimer(hTimer) );

        CUT_SAFE_CALL( cutStartTimer(hTimer) );

        RandomGPU<<<32, 128>>>(d_Rand, N_PER_RNG);

        CUT_CHECK_ERROR("RandomGPU() execution failed\n");

        CUDA_SAFE_CALL( cudaThreadSynchronize() );

        CUT_SAFE_CALL( cutStopTimer(hTimer) );

        gpuTime = cutGetTimerValue(hTimer);

    printf("Generated samples : %i \n", RAND_N);

    printf("RandomGPU() time  : %f \n", gpuTime);

    printf("Samples per second: %E \n", RAND_N / (gpuTime * 0.001));

   printf("Reading back the results...\n");

    CUDA_SAFE_CALL( cudaMemcpy(h_RandGPU, d_Rand, RAND_N * sizeof(float), cudaMemcpyDeviceToHost) );