小编dsi*_*cha的帖子

使用Winelib移植仅限Windows的GUI工具包

我喜欢关于D的DFL GUI工具包的所有内容,除了它只适用于Windows,因为它基本上是围绕Windows API的漂亮的高级包装器.使用Winelib简单地将这样的工具包移植到Linux(我真的不关心除Windows和Linux之外的任何其他操作系统)有多难?如果我在Linux上编译这样一个库并将其与Winelib链接起来,它大多数"只是工作"的几率是多少?可能涉及哪些非显而易见的步骤?

注意:对于那些不熟悉D的C代码处理方法的人,可以直接从D调用C代码.只需将头文件转换为D(这已经针对Win32头文件,但不是Winelib头文件)我不确定Winelib标题是否需要翻译或者Windows标题是否足够好.),用C编译器编译C代码,然后链接C对象文件.

user-interface cross-platform wine d winelib

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

高效的独立同步块?

我有一个场景,在我的程序中的某些点,线程需要更新几个共享数据结构.每个数据结构都可以与任何其他数据结构并行安全地更新,但每个数据结构一次只能由一个线程更新.我在代码中表达的简单,天真的方式是:

synchronized updateStructure1();
synchronized updateStructure2();
// ...
Run Code Online (Sandbox Code Playgroud)

这似乎效率低下,因为如果多个线程正在尝试更新结构1,但没有线程尝试更新结构2,则它们都会阻塞等待保护结构1的锁,而结构2的锁则不会被取消.

是否有"标准"的方法来弥补这一点?换句话说,是否有一个标准的线程原语试图以循环方式更新所有结构,只有在采用所有锁定时才会阻塞,并在更新所有结构时返回?

这是一个与语言无关的问题,但如果有帮助,我使用的语言是D.

language-agnostic performance multithreading synchronization d

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

什么是日志库?

这可能是一个愚蠢的问题,因为我的大多数编程都包含一人科学计算研究原型和开发相对低级的库.我以前从未在企业环境中编写过大型程序.我一直想知道,日志库比使用优质的老式打印语句或文件输出,简单的编程逻辑和一些全局变量更容易确定事情的详细记录是什么?你怎么知道什么时候一些打印语句或一些基本的文件输出不会削减它,你需要一个真正的日志库?

language-agnostic logging

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

Jython中隐藏的多线程瓶颈?

在Jython中可以阻塞多线程/并行性的一些常见隐藏事物是什么?我有一些并行代码(使用Python的线程库),它不能扩展到超过3-4个CPU,我确信这不是因为任何这些明显的陷阱:

  • 显式锁

  • 调用需要同步的库代码(我尝试并行化的算法基本上是从头开始编写的,不使用任何库.)

基本上所有的算法都是一堆字符串处理,列表和字典查找和数学.我的理解是,与CPython不同,Jython没有GIL.

python java multithreading jvm jython

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

计算子图实例

假设我有一个大的(几千个节点)有向图G和一个小得多(3-5节点)的有向图g.我想计算G中有多少g的同构.换句话说,我想知道G中有多少个唯一的节点集匹配g.我意识到这是子图同构问题的一个实例,因此是NP完全的.但是,考虑到你可能认为g很小,有没有合理有效的算法呢?

algorithm graph-theory graph np-complete isomorphism

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

线性方程的快速近似解?

我需要求解 N 个线性方程组作为数值优化器的中间步骤。AFAIK 相当简单的算法精确地做到这一点是 O(N^3) (尽管我在一些数学论文中看到了一个非常复杂的算法,可以用 O(N^2.8) 和一个巨大的常数来完成)。在某些情况下,N 很大,即几千。

有没有什么好方法可以在小于 O(N^3) 的时间内获得线性方程组的近似解?

编辑:

如果有帮助的话,这里有一些更多的细节。

  1. 我的矩阵是对称的,并且不稀疏。

  2. 这是 Newton-Raphson 的二阶导数矩阵。我正在尝试在 2000 维空间中优化某些内容。

algorithm performance matrix linear-algebra approximation

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

使qsub阻塞直到工作完成?

目前,我有一个驱动程序,它运行数千个"有效负载"程序实例,并对输出进行一些后处理.驱动程序当前使用shell()函数直接从多个线程调用有效负载程序.该shell()函数在当前工作目录中执行命令,阻塞直到命令完成运行,并返回由命令发送到stdout的数据.这适用于单个多核计算机.我想修改驱动程序以将qsub作业提交到大型计算群集,以获得更多并行性.

有没有办法让qsub命令输出结果到stdout而不是文件和块,直到作业完成?基本上,我希望它尽可能像命令的"正常"执行一样,以便我可以尽可能少地修改我的驱动程序来并行化到集群.

编辑:我认为所有的网格引擎都非常标准化.如果它们不重要而且很重要,我正在使用Torque.

parallel-processing shell performance cluster-computing qsub

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

MPI_Bcast:效率优势?

在MPI中,MPI_Bcast纯粹是一个便利功能还是使用它而不是仅仅循环所有等级并向所有等级发送相同的消息有效率优势?

理由: MPI_Bcast将消息发送到每个人,包括根的行为,是不方便我,所以除非有一个很好的理由,也可以进行不将消息发送到根我宁可不使用它.

c parallel-processing performance message-passing mpi

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

C++ Parallel std :: vector使用昂贵的复制进行排序

假设我有一个vector<int> intVec和一个vector<vector<double> > matrix.我想在C++中intVecmatrix相应的第一个维度进行排序和重新排序.我之前已经多次问过这个问题,但是这个案子有一个转折点.一个vector<double>是复制昂贵,因此如复制都intVecmatrix一个vector<pair<int, vector<double> >,分选和复制他们回到甚至比平常更加低效.

intVec除了滚动我自己的自定义排序算法之外,如何matrix不复制任何元素matrix和调用vector复制构造函数的情况下对锁步的第一维进行排序和重新排序?

c++ sorting algorithm stl

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

算法得到正弦波的幅度和相位?

我试图找出一种方法来算法获得在千里马计算机代数系统中具有正弦项的函数的幅度和相位.这仅适用于稳态(t - >无穷大和瞬态衰减).例如,一个简单的案例是:

f(t) = 1 / w * sin(w * t + theta) + exp(-a * t) + 8
Run Code Online (Sandbox Code Playgroud)

在这种情况下,增益为1/w,相位偏移为θ,我们将忽略瞬态项exp(-a*t),因为我们只关心稳态增益和相位延迟,以及exp( - a*t) - > 0为t - >无穷大.我们也会忽略"+ 8"项,因为它只是一个DC偏移.我在我的工程课程中被教导的方式需要大量的启发式和繁琐的方程式重新排列,以使它们以类似于上面的形式得到它们,其中答案很明显只是从它看起来.

有没有人知道一种通用的算法方法,假设它们存在,找到增益和相位延迟,因为我拥有计算机代数系统的全部功能(以及人们期望CAS拥有的标准功能)抛出它?虽然我可能会在Maxima中实现它,但我肯定会欣赏通过数学方面解释的通用答案.

编辑: 我认为从我的例子中可以清楚地看出,我想用符号来表达答案.w实际上应该是欧米茄,并代表输入的频率.我真正想问的是,是否有任何标准的数学运算可以产生增益和相位项而无需一堆启发式,手动方程式重新排列.

algorithm math computer-algebra-systems maxima

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