小编Pha*_*aun的帖子

如何使用SSE指令集绝对2双或4浮点数?(截至SSE4)

这是我尝试使用SSE加速的示例C代码,两个数组是3072元素长的双精度数,如果我不需要双精度,可以将其下放到浮点数.

double sum = 0.0;

for(k = 0; k < 3072; k++) {
    sum += fabs(sima[k] - simb[k]);
}

double fp = (1.0 - (sum / (255.0 * 1024.0 * 3.0)));
Run Code Online (Sandbox Code Playgroud)

无论如何,我目前的问题是如何在SSE寄存器中执行fabs步骤为double或float,以便我可以将整个计算保留在SSE寄存器中,以便它保持快速,并且我可以通过部分展开此循环来并行化所有步骤.

这里有一些资源我发现了fabs()asm或者可能会翻转这个标志 -但是第二个的弱点需要有条件的检查.

gcc sse

16
推荐指数
3
解决办法
9931
查看次数

是否有算法来确定有多少日光?

是否有一个函数/算法允许我输入地球的纬度和近似轨道位置,以便我可以确定太阳升起了多长时间?IE在冬季会显示太阳在远北半球只有几个小时.

我做了一些基本的谷歌搜索,并没有找到太多,所以我想我可能不得不做一些三角法,这将允许我计算地球倾向于或不对太阳,然后使用该信息和纬度来弄清楚一个网站将获得多少阳光.

latitude-longitude

15
推荐指数
2
解决办法
893
查看次数

用Python锁定免费只读列表?

我已经做了一些基本的性能和内存消耗基准测试,我想知道是否有任何方法可以让事情变得更快......

  1. 我有一个巨大的70,000元素列表,其中包含numpy ndarray,以及所述列表中元组中的文件路径.

  2. 我的第一个版本将列表的切片副本传递给python多进程模块中的每个进程,但是它会将ram使用率扩展到20多GB以上

  3. 第二个版本我将它移动到全局空间并通过索引(例如foo [i])在我的每个进程的循环中访问它,这似乎将它放入共享内存区域/ CoW语义中,因此它不会爆炸内存使用率(停留在~3 GB)

  4. 然而,根据性能基准测试/追踪,似乎大部分应用时间现在花在"获取"模式上......

所以我想知道是否有任何方式我可以以某种方式将此列表转换为某种无锁/只读,以便我可以取消部分获取步骤,以帮助加快访问速度.

编辑1:这是应用程序概要分析的前几行输出

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
   65 2450.903   37.706 2450.903   37.706 {built-in method acquire}
39320    0.481    0.000    0.481    0.000 {method 'read' of 'file' objects}
  600    0.298    0.000    0.298    0.000 {posix.waitpid}
   48    0.271    0.006    0.271    0.006 {posix.fork}
Run Code Online (Sandbox Code Playgroud)

编辑2:这是列表结构的一个例子:

# Sample code for a rough idea of how the list is constructed
sim = []
for root, dirs, files in os.walk(rootdir):
    path = os.path.join(root, filename)
    image= Image.open(path)
    np_array = …
Run Code Online (Sandbox Code Playgroud)

python performance numpy

9
推荐指数
1
解决办法
1771
查看次数

如何在Cython中使用诸如openMP之类的东西?

基本上,我有一个问题,这是相当多embrassing平行的,我想我已经打了极限有多快可以用普通的Python和多处理所以现在我试图把它带到通过用Cython,希望OpenMP的较低水平使它.

所以简而言之,我想知道如何在Cython中使用openMP,或者我是否必须通过Cython包装一些原始C代码并加载/绑定到它?

或者我可以将Cython编译成C代码然后修改C代码以在openMP pragma中添加然后编译到库并将其加载到Python中吗?

python parallel-processing openmp cython

5
推荐指数
2
解决办法
2588
查看次数

在Linux中检测移动或重命名为文件的最佳方法?

某些解决方案可能适用于Windows,但我不熟悉Windows操作系统,因此这将是针对Linux的.

据我所知,Unix文件系统都具有inode的概念,这是文件系统元数据和"文件"的存储位置.因此,我想知道是否可以使用带有一些附加信息的inode号来跟踪重命名或移动的文件?

我建议做的是初始扫描,它将创建一个文件名/路径数据库,它所在的磁盘/驱动器,它们的inode号,最后是某种校验和(sha-1).

这将使系统能够使用inode编号快速检测文件是否被移动或重命名,然后它将跟进校验和以检查它是否实际上是相同的文件.

我可以看到这个方案可能存在的一些问题:

  1. 可以修改文件然后移动/重命名,这将无法检测到它,因为校验和不匹配.
  2. 一些(大多数?)应用程序在修改文件时会创建一个新的临时文件然后用当前文件切换它,因此即使文件最终未经修改,inode也无法匹配....
  3. 需要存储它所在的设备/文件系统,因为每个文件系统上的inode对于该文件系统是唯一的.
  4. 需要处理硬链接

我想知道我在这里忘记了还有其他问题吗?我希望能够使用inode快速跟踪哪些文件被移动或重命名,然后跟进校验和以确认它实际上是同一个文件.

linux inode file

3
推荐指数
1
解决办法
1330
查看次数

确保您的Linux和GTK应用程序支持i18n和本地化的最佳方法?

我感兴趣的是"最好的方法",以确保您的Linux和基于GTK的应用程序是从头开始构建的,以最小的痛苦支持i18n和本地化.

我一直听说本地化可能是实现的一个真正的痛点,所以我想知道是否有一个好的指导方针和/或方法可以帮助使它在应用程序中直接获得i18n和本地化支持?

这是我阅读的示例指南,但这是Microsoft Windows特定的... WPF全球化和本地化概述

linux gtk localization internationalization

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