我有一个复杂的程序,std::array<double, N>它使用N的小值.它用于operator[]从这些数组中获取值.
我发现GCC 6.1有-O2或-O3没有内联这些调用,导致这些C++数组比它们的C等价物慢.
这是生成的程序集:
340 <std::array<double, 8ul>::operator[](unsigned long) const>:
340: 48 8d 04 f7 lea (%rdi,%rsi,8),%rax
344: c3 retq
345: 90 nop
346: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
34d: 00 00 00
Run Code Online (Sandbox Code Playgroud)
为每个大小的数组发出相同的代码(因为没有边界检查).
这样一个数组的循环如下所示:
4c0: e8 7b fe ff ff callq 340 <std::array<double, 8ul>::operator[](unsigned long) const>
4c5: be 07 00 00 00 mov $0x7,%esi
4ca: 4c 89 f7 mov %r14,%rdi
4cd: 48 89 44 24 78 mov …Run Code Online (Sandbox Code Playgroud) 使用Xlib,我们可以查询当前的X 服务器时间吗?我的意思time是XEvent如果我们现在要接收一个事件,将在an 字段中返回的值。
最好不要打开任何窗户。
在构建rPython包时,我在R中遇到错误,特别是链接libpython2.7的部分:
gcc -std=gnu99 -I/foo/bar/R-3.1.1/lib64/R/include -DNDEBUG -I/usr/local/include \
-I/foo/bar/Python-2.7.6/include/python2.7 -I/foo/bar/Python-2.7.6/include/python2.7 \
-D PYTHONLIBFILE=libpython2.7.so -fpic -g -O2 -c pycall.c -o pycall.o
gcc -std=gnu99 -shared -L/usr/local/lib64 -o rPython.so pycall.o \
-lpthread -ldl -lutil -lm -lpython2.7 -Xlinker -export-dynamic
/usr/bin/ld: error: cannot find -lpython2.7
Run Code Online (Sandbox Code Playgroud)
问题似乎是,当R(或rPython)理解使用我的Python安装编译哪个-I规则时,它没有添加相应的链接器标志.我不知道为什么,假设这是一个错误.
是否可以借助 umask 为文件分配执行权限。当我谷歌然后发现 umask 不仅仅是 666 和分配的权限之间的区别,而且它将数字转换为 rwx,然后通过将 umask 转换为 rwx 与 umask 进行比较,并将差异作为分配的权限给出。
例如:
文件默认为 666 ( rw-rw-rw-),如果 umask 为 002 ( -------w-),则其他人的写权限将被删除。而umask 001( --------x),所以对权限没有影响。
那么如何使用umask分配执行权限呢?
我正在尝试运行在web中找到的python的multiprocessing.pool模块的一些示例代码.代码是:
def square(x):
return x * x
if __name__ == '__main__':
pool = Pool(processes=4)
inputs = [0, 1, 2, 3, 4]
outputs = pool.map(square, inputs)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行它时,它永远不会完成执行,我必须重新启动我的IpythonNotebook笔记本的内核.有什么问题?
我正在尝试将 Pandas 系列的纪元时间戳转换为人类可读的时间。至少有两种明显的方法可以做到这一点:pd.DatetimeIndex和pd.to_datetime(). 它们似乎以完全不同的方式工作:
In [1]: import pandas as pd
In [3]: nanos = pd.Series([1462282258000000000, 1462282258100000000, 1462282258200000000])
In [4]: pd.to_datetime(nanos)
Out[4]:
0 2016-05-03 13:30:58.000
1 2016-05-03 13:30:58.100
2 2016-05-03 13:30:58.200
dtype: datetime64[ns]
In [5]: pd.DatetimeIndex(nanos)
Out[5]:
DatetimeIndex([ '2016-05-03 13:30:58', '2016-05-03 13:30:58.100000',
'2016-05-03 13:30:58.200000'],
dtype='datetime64[ns]', freq=None)
Run Code Online (Sandbox Code Playgroud)
使用to_datetime(),显示分辨率为毫秒,并按.000整秒打印。使用 时DatetimeIndex,显示分辨率为微秒(我喜欢),但在整秒内完全省略了小数部分。
然后,尝试转换时区:
In [12]: pd.DatetimeIndex(nanos).tz_localize('UTC')
Out[12]:
DatetimeIndex([ '2016-05-03 13:30:58+00:00',
'2016-05-03 13:30:58.100000+00:00',
'2016-05-03 13:30:58.200000+00:00'],
dtype='datetime64[ns, UTC]', freq=None)
In [13]: pd.to_datetime(nanos).tz_localize('UTC')
TypeError: index is not a …Run Code Online (Sandbox Code Playgroud) 我刚刚发现,各种itertools函数返回的类类型在Python类型系统中均不视为生成器。
首先,设置:
import collections
import glob
import itertools
import types
ig = glob.iglob('*')
iz = itertools.izip([1,2], [3,4])
Run Code Online (Sandbox Code Playgroud)
然后:
>>> isinstance(ig, types.GeneratorType)
True
>>> isinstance(iz, types.GeneratorType)
False
Run Code Online (Sandbox Code Playgroud)
的glob.iglob()结果,或任何其他典型的发电机,是类型的types.GeneratorType。但是itertools结果不是。如果我想编写一个必须急切地评估其输入序列的函数,这会引起很多混乱-我需要知道它是否是生成器。
我找到了这个替代方案:
>>> isinstance(ig, collections.Iterator)
True
>>> isinstance(iz, collections.Iterator)
True
Run Code Online (Sandbox Code Playgroud)
但是,这并不理想,因为iter(x)是Iterator不管的x是混凝土(热切评估)序列,或发电机(懒洋洋地评估)。
最终目标是这样的:
def foo(self, sequence):
"""Store the sequence, making sure it is fully
evaluated before this function returns."""
if isinstance(sequence, types.GeneratorType):
self.sequence = list(sequence)
else:
self.sequence = sequence
Run Code Online (Sandbox Code Playgroud)
为什么要执行此操作的一个示例是,如果对序列的求值可能会引发异常,并且我希望从而foo()不是随后使用时引发该异常self.sequence。
我不喜欢这种 …
给定这样的结构:
struct Foo
{
int x;
int y;
double z;
};
BOOST_FUSION_ADAPT_STRUCT(Foo, x, y, z);
Run Code Online (Sandbox Code Playgroud)
我想生成一个这样的字符串:
"{ int x; int y; double z; }"
Run Code Online (Sandbox Code Playgroud)
我已经看到了如何打印 Fusion适应结构的值,但是在这里我只需要打印类型和名称。
我该如何简单地做到这一点?如果有更好的方法,我不嫁给Boost.Fusion。
我在Linux上使用XFS并且有一个内存映射文件,我每秒写一次.我注意到文件mtime(显示为watch ls --full-time)会定期更改但不规则.mtimes之间的差距似乎在2到20秒之间,但并不一致.在系统上运行的其他东西很少 - 特别是我的文件只有一个程序,还有一个读数.
同一个程序更频繁地写入其他一些mmapped文件,并且它们的mtime每30秒更改一次.
我没有使用msync()(在调用时会更新mtime).
我的问题:
我有一些代码使用 AVX2 内在_mm256_permutevar8x32_epi32又名vpermd通过索引向量从输入向量中选择整数。现在我需要同样的东西,但需要 4x32 而不是 8x32。 _mm_permutevar_ps是为浮点数做的,但我使用的是整数。
一个想法是_mm_shuffle_epi32,但我首先需要将我的 4x32 索引值转换为单个整数,即:
imm[1:0] := idx[31:0]
imm[3:2] := idx[63:32]
imm[5:4] := idx[95:64]
imm[7:6] := idx[127:96]
Run Code Online (Sandbox Code Playgroud)
我不确定什么是最好的方法,而且我不确定这是最好的方法。我正在寻找 Broadwell/Haswell 上最有效的方法来模拟 "missing" _mm_permutevar_epi32(__m128i a, __m128i idx)。如果可能的话,我宁愿使用 128 位指令而不是 256 位指令(即我不想扩大 128 位输入然后缩小结果)。