运行程序为
$ OMP_NUM_TRHEADS=4 ./a.out
Run Code Online (Sandbox Code Playgroud)
将激活的OpenMP线程数限制为4,如所示htop。但是,如果不是将OMP_NUM_THREADS环境变量绑定到中Bash,则调用
setenv("OMP_NUM_THREADS", "4", 1);
Run Code Online (Sandbox Code Playgroud)
从main调用任何启用OpenMP的功能开始之前,这似乎没有任何效果。
为什么会这样呢?如果有可能,如何在程序中设置OpenMP线程数?
似乎如果一个文件被调用io.py并且它被导入scipy.ndimage,后者在某种程度上最终无法找到它自己的子模块,也被称为io:
$ echo "import scipy.ndimage" > io.py
$ python io.py
Traceback (most recent call last):
File "io.py", line 1, in <module>
import scipy.ndimage
File "/usr/lib/python2.7/dist-packages/scipy/__init__.py", line 70, in <module>
from numpy import show_config as show_numpy_config
File "/usr/lib/python2.7/dist-packages/numpy/__init__.py", line 153, in <module>
from . import add_newdocs
File "/usr/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 13, in <module>
from numpy.lib import add_newdoc
File "/usr/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 22, in <module>
from .npyio import *
File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 4, in <module>
from . import …Run Code Online (Sandbox Code Playgroud) 当评估像这样的表达式时
x += 2 * y
Run Code Online (Sandbox Code Playgroud)
它是Numpy首先分配一个新的临时数组来保存2*y,将其添加到x然后删除它,还是可以就地执行整个操作?
Rust 是否具有在数组或数组段中查找第k个最小元素的函数?
(类似于std::nth_element在 C++ 中)
在通常的TensorFlow训练循环中,例如
train_op = tf.train.AdamOptimizer().minimize(cross_entropy)
with tf.Session() as sess:
for i in range(num_steps):
# ...
train_op.run(feed_dict = feed_dict)
Run Code Online (Sandbox Code Playgroud)
train_op.run回报None.
但是,有时收集中间结果很有用,例如目标值或准确度.
添加额外的sess.run调用需要再次进行前向传播,从而增加运行时间:
train_op = tf.train.AdamOptimizer().minimize(cross_entropy)
with tf.Session() as sess:
for i in range(num_steps):
# ...
o, a = sess.run([objective, accuracy], feed_dict = feed_dict)
train_op.run(feed_dict = feed_dict)
Run Code Online (Sandbox Code Playgroud)
是否可以一次性在TensorFlow中执行此操作?
编辑:
人们建议
sess.run([objective, accuracy, train_op], feed_dict = feed_dict)
Run Code Online (Sandbox Code Playgroud)
但结果取决于列表元素的执行顺序:
[objective, accuracy, train_op]
Run Code Online (Sandbox Code Playgroud)
这似乎是未定义的 - 根据是否使用CUDA,您会得到不同的结果.
在另一个问题中,有人展示了他的 TensorBoard 的屏幕截图,显示了每个节点的内存使用情况:
我在 Tensorboard 的实验中从未见过这些。我所做的就是打电话
writer = tf.summary.FileWriter('/tmp/tensorboard', sess.graph)
Run Code Online (Sandbox Code Playgroud)
之后sess.run()。也许我需要添加一些“摘要”来记录内存使用情况?
如果问题看起来很基本,我很抱歉,但我做了一些谷歌搜索并找不到明确的答案(也许我不知道正确的关键字)。
.NET Core 能否用于从 C#/F# 源构建本机命令行 Linux 二进制文件?(我知道 Mono)
是否存在差异检查?这在这里有效:
Welcome to SWI-Prolog (threaded, 64 bits, version 8.3.7)
?- set_prolog_flag(occurs_check, true).
true.
?- dif(X,f(Y)), X = Y.
X = Y.
Run Code Online (Sandbox Code Playgroud)
但以上是不可行的,因为发生检查是一个全局标志,我得到以下信息:
SWI-Prolog console for thread 3
?- X=f(X).
false.
Run Code Online (Sandbox Code Playgroud) 根据维基百科:
为所有统一提供声音统一的实现是 Qu-Prolog 和 Strawberry Prolog 以及(可选地,通过运行时标志):XSB、SWI-Prolog和 Tau Prolog。
但是,当我这样做时,apropos(occur)它只会找到unify_with_occurs_check/2. 该男子页面没有提到“出现”要么。如何为 SWI-Prolog 中的所有统一启用发生检查?
我正在阅读的一篇论文如下:
Plaisted [3] 表明,可以使用一阶谓词演算语义编写形式上正确的 PROLOG 程序,并导出无意义的结果,例如 3 < 2。
它指的是 Prologs 在当时(1980 年代)没有使用发生检查的事实。
不幸的是,它引用的论文是在付费墙后面。我仍然希望看到这样的例子。直觉上,感觉就像省略发生检查只是将结构的范围扩大到包括循环结构(但根据作者的说法,这种直觉一定是错误的)。
我希望这个例子不是
smaller(3, 2) :- X = f(X).
Run Code Online (Sandbox Code Playgroud)
那会令人失望。
occurs-check ×3
prolog ×3
python ×3
numpy ×2
tensorflow ×2
.net-core ×1
.net-native ×1
arrays ×1
c ×1
c# ×1
c++ ×1
corert ×1
f# ×1
linux ×1
openmp ×1
performance ×1
prolog-dif ×1
rust ×1
scipy ×1
swi-prolog ×1
tensorboard ×1
unification ×1