#c #random #intel-mkl
#c #Случайный #intel-mkl
Вопрос:
Следующий код c почти такой же, как пример, предоставленный Vector Statistical Library (VSL) в библиотеке математического ядра Intel (MKL). Однако, как только переменная ‘total’ станет больше, скажем, 3 * 10 ^ 9, она выведет
ОШИБКА MKL: параметр 3 был неверным при вводе в vdRngUniform.
Итак, я предполагаю, что это подразумевает, что ‘total’ может быть слишком большим. Но в руководстве написано, что «Метод SFMT19937 имеет длину периода, равную 2 ^ 19937-1 созданной последовательности», что намного больше, чем 10 ^ 9.
Я хотел бы знать, каков на самом деле верхний предел, например, для double (я не могу найти никакой соответствующей информации в руководстве). И, конечно, будут оценены любые средства для решения этой проблемы. Заранее спасибо!
......
MKL_LONG status;
VSLStreamStatePtr stream;
......
int main(){
vslNewStream(amp;stream, VSL_BRNG_SFMT19937, 777);
rnd_data = (double*)malloc(total * sizeof(double));
status = vdRngUniform(VSL_RNG_METHOD_UNIFORM_STD, stream, total, rnd_data, 0.0, 1.0);
vslDeleteStream(amp;stream);
......
}
Ответ №1:
Глядя на https://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-D7AD317E-34EC-4789-8027-01D0E194FAC1.htm vdRngUniform
используется const int
значение, способное представлять 2 ^ 31 неотрицательное значение (на большинстве современных платформ). 3 * 10 ^ 9 больше этого, поэтому вы, вероятно, передаете функции некоторое отрицательное значение (т. Е. переполнение целого числа со знаком).