Поскольку этот вопрос также рассматривается на форуме Intel MKL, я публикую ответы здесь на тот случай, если другие заинтересуются. Ссылка на Intel MKL Forum: https://software.intel.com/en-us/forums/intel-math-kernel-library/topic/851713
Мы предлагаем продолжить использование подпрограммы vdRngUniform () с генерацией по блокам. Вы можете генерировать матрицу нужного размера блок за блоком, как показано ниже.
Кроме того, не уверен, что использование RNGUniform важно для вашего случая, но вы можете взглянуть на процедуру https://software.intel.com/en-us/mkl-developer-reference-c-lagge, которая генерирует матрицу M x N. Вы можете связать с ILP64 mkl API и сгенерировать матрицу за 40k к 40K
VSLStreamStatePtr stream;
vslNewStream( &stream, BRNG, SEED );
const int64_t size = 40000*40000;
const int64_t block_size = 1000;
double* matrix;
matrix = (double*) malloc (size*sizeof(double));
for(int64_t i = 0; i < size; i+=block_size) {
vdRngUniform( VSL_RNG_METHOD_UNIFORM_STD, stream, block_size, matrix + i, 0.0, 1.0 );
}
free(matrix);
vslDeleteStream( &stream );