小编Joh*_*nck的帖子

GCC有时不会内联std :: array :: operator []

我有一个复杂的程序,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)

c++ optimization gcc inline c++11

5
推荐指数
1
解决办法
420
查看次数

获取当前 X11 服务器时间

使用Xlib,我们可以查询当前的X 服务器时间吗?我的意思timeXEvent如果我们现在要接收一个事件,将在an 字段中返回的值。

最好不要打开任何窗户。

c x11 time xlib

5
推荐指数
1
解决办法
227
查看次数

rPython安装失败,libpython不在链接器路径中

在构建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规则时,它没有添加相应的链接器标志.我不知道为什么,假设这是一个错误.

r linker-errors rpython

4
推荐指数
1
解决办法
2051
查看次数

如何通过umask赋予执行权限

是否可以借助 umask 为文件分配执行权限。当我谷歌然后发现 umask 不仅仅是 666 和分配的权限之间的区别,而且它将数字转换为 rwx,然后通过将 umask 转换为 rwx 与 umask 进行比较,并将差异作为分配的权限给出。

例如:

文件默认为 666 ( rw-rw-rw-),如果 umask 为 002 ( -------w-),则其他人的写权限将被删除。而umask 001( --------x),所以对权限没有影响。

那么如何使用umask分配执行权限呢?

linux umask

4
推荐指数
1
解决办法
3715
查看次数

Python多处理池卡住了

我正在尝试运行在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笔记本的内核.有什么问题?

python threadpool ipython-notebook python-multiprocessing

4
推荐指数
1
解决办法
5403
查看次数

Pandas DatetimeIndex 与 to_datetime 的差异

我正在尝试将 Pandas 系列的纪元时间戳转换为人类可读的时间。至少有两种明显的方法可以做到这一点:pd.DatetimeIndexpd.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)

python datetime pandas

4
推荐指数
1
解决办法
1828
查看次数

为什么Python itertools不归类为生成器(GeneratorType)?

我刚刚发现,各种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

我不喜欢这种 …

python types iterator generator python-itertools

4
推荐指数
1
解决办法
130
查看次数

Boost Fusion:将适应的结构类型转换为文本

给定这样的结构:

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。

c++ introspection boost-fusion

4
推荐指数
1
解决办法
713
查看次数

写入内存映射文件后更新mtime的内容是什么?

我在Linux上使用XFS并且有一个内存映射文件,我每秒写一次.我注意到文件mtime(显示为watch ls --full-time)会定期更改但不规则.mtimes之间的差距似乎在2到20秒之间,但并不一致.在系统上运行的其他东西很少 - 特别是我的文件只有一个程序,还有一个读数.

同一个程序更频繁地写入其他一些mmapped文件,并且它们的mtime每30秒更改一次.

我没有使用msync()(在调用时会更新mtime).

我的问题:

  1. 什么更新mtime?
  2. 更新间隔是否可配置?
  3. 为什么有些mtimes每30秒才更新一次,但是我写的频率较低的一些文件有更新鲜(不规则但总是不到30秒)的时间?

linux mmap memory-mapped-files xfs

4
推荐指数
1
解决办法
694
查看次数

SSE:shuffle (permutevar) 4x32 整数

我有一些代码使用 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 位输入然后缩小结果)。

sse simd intrinsics avx

4
推荐指数
2
解决办法
672
查看次数