我正在使用rand()函数生成0,1之间的伪随机数用于模拟目的,但是当我决定使我的C++代码并行运行时(通过OpenMP),我注意到rand()它不是线程安全的,也不是很均匀.
所以我转而使用在其他问题的许多答案中提出的(所谓的)更均匀的生成器.看起来像这样
double rnd(const double & min, const double & max) {
static thread_local mt19937* generator = nullptr;
if (!generator) generator = new mt19937(clock() + omp_get_thread_num());
uniform_real_distribution<double> distribution(min, max);
return fabs(distribution(*generator));
}
Run Code Online (Sandbox Code Playgroud)
但是我在我模拟的原始问题中看到了许多科学错误.既反对结果rand()也反对常识的问题.
所以我编写了一个代码,用这个函数生成500k随机数,计算它们的平均值并做200次并绘制结果.
double SUM=0;
for(r=0; r<=10; r+=0.05){
#pragma omp parallel for ordered schedule(static)
for(w=1; w<=500000; w++){
double a;
a=rnd(0,1);
SUM=SUM+a;
}
SUM=SUM/w_max;
ft<<r<<'\t'<<SUM<<'\n';
SUM=0;
}
Run Code Online (Sandbox Code Playgroud)
我们知道如果不是500k,我可以无限次地做它,它应该是一个值为0.5的简单线.但是有了500k,我们的波动将在0.5左右.
使用单个线程运行代码时,结果是可以接受的:
但这是2个线程的结果:
3个主题:
4个主题:
我现在没有我的8线程CPU,但结果甚至值得.
正如你所看到的,它们都不均匀,并且在平均值附近波动很大.
这个伪随机生成器线程也不安全吗?
或者我在某个地方犯了错误?
这些线程没有解决我的问题: Keras does not use GPU on Pycharmhaving python 3.5 and Tensorflow 1.4
我已经在运行 Windows 10 并具有 GTX 750 Ti 显卡的 PC 上安装了 Tensorflow 和 Tensorflow-gpu (v.1.12.0),因此它确实支持 CUDA。我还安装了 CUDA Toolkit v10 和 cuDNN 库,当我nvcc -V在命令提示符下运行时,我得到:
nvcc:NVIDIA (R) Cuda 编译器...
我正在使用 PyCharm,在 CPU 上运行 Keras 没有任何问题。但它不使用我的 GPU。
当我打字时
from keras import backend as K
K.tensorflow_backend._get_available_gpus()
Run Code Online (Sandbox Code Playgroud)
它说
2018-11-25 10:47:57.448275:我tensorflow / core / platform / cpu_feature_gaurd.cc:141]您的CPU支持此TensorFlow二进制文件未编译使用的指令:AVX2
[ ]
我尝试过的:
1)我尝试卸载 Tensorflow 和 Tensorflow-gpu 并重新安装 Tensorflow-gpu,如上面的线程所述。不起作用,我的代码不再在 CPU …
在netlib的这个链接中,它将M指定为:
在输入时,M指定矩阵op(A)和矩阵C的行数.M必须至少为零.退出时不变.
因此,如果我想使用3x10矩阵作为A,但我想使用它的zgmm共轭(TRANSA ='C')我应该输入哪个M?3或10?
此外,当我使用其他LAPACK例程时,我输入2D矩阵作为1D,如A [3*3]而不是A [3] [3],并且在调用例程时我只使用A作为矩阵,我可以对非执行相同操作方矩阵?A [3*10]而不是A [3] [10]?
我用C++编写代码.