小编Xio*_*345的帖子

优化Scala代码时首先要查看的位置?

我目前需要优化一个太慢的算法的Scala实现.它以功能方式实现,仅使用values(val)和不可变数据结构.我已经记住了重要的函数(因此我的代码中有一些可变映射),这使得我的代码速度提高了一倍,我想知道下一步该做什么.

因此,我不是在寻找有关软件优化的通用建议(例如,首先优化您的算法,使用分析器,执行基准测试......),而是针对Scala特定或JVM特定的优化建议.

因此,我的问题是在尝试优化Scala代码时首先要考虑的地方通常导致减速常见语言结构或模式是什么?

特别是,我正在就以下几点寻求建议:

  • 我读到for(...)构造很慢,因为每次执行循环体时都会生成一个匿名类.这是真的吗?是否有其他地方生成匿名类?(例如,使用map()匿名函数时)
  • 在一般情况下,不可变集合是否明显慢于可变集合(特别是涉及到地图结构时)?
  • Scala 2.8,2.9和2.10之间是否存在显着的性能差异?

optimization scala

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

PyQt优于PyGTK有什么优势,反之亦然?

我有一个应用程序,其GUI将根据人体工程学原因重新制作.它是用PyGTK编写的,我想知道是否应该切换到PyQt来缓解未来的发展.

这个应用程序主要是带有按钮,工具栏,对话框等的经典UI,但也有一些特定的要求:我当然需要创建一个基于treeview/tableview的自定义小部件(制作类似电子表格的小部件),这个应用程序有一个许多更新GUI的工作线程.

我正在就这两点寻求建议:

  • 关于创建自定义小部件,PyQt是否提供比PyGTK更好的机制,特别是稍微修改现有的小部件.
  • 我有问题(即使正确使用threads_init()和threads_enter())工作线程在使用PyGTK时更新GUI.PyQt在这一点上是否更好?

python user-interface pygtk pyqt4

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

虚拟继承和多态:谷物库是否与对象布局混乱?

我有四个类(A,B,CD经典的金刚石图案和以下)Container含有类unique_ptr<A>.我想使用谷物序列化库序列化这些类.

struct A {int f1; int f2; int f3}

struct B : public virtual A {
    template<typename Archive>
    inline void save(Archive& ar) const {
        std::cerr << "Saving Obj: " << this << std::endl;
        std::cerr << "This: " << &(this->f1) << " " 
            << &(this->f2) << " " << &(this->f3) << std::endl;
        std::cerr << "This: " << this->f1 << " " 
            << this->f2 << " " << …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism inheritance cereal

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

从SIMD向量中提取设置的字节位置

我使用SIMD指令运行一系列计算。这些指令返回一个16字节的向量,结果为compare,每个字节为0x000xff

             0    1    2    3    4    5    6    7       15   16
compare : 0x00 0x00 0x00 0x00 0xff 0x00 0x00 0x00 ... 0xff 0x00
Run Code Online (Sandbox Code Playgroud)

设置为字节的0xff意思是我需要以do_operation(i) i作为字节的位置来运行该函数。

例如,上述compare向量意味着,我需要运行以下操作序列:

do_operation(4);
do_operation(15);
Run Code Online (Sandbox Code Playgroud)

这是到目前为止我想到的最快的解决方案:

for(...) {
        //
        // SIMD computations
        //
        __m128i compare = ... // Result of SIMD computations

        // Extract high and low quadwords for compare vector
        std::uint64_t cmp_low = (_mm_cvtsi128_si64(compare));
        std::uint64_t cmp_high = (_mm_extract_epi64(compare, 1));

        //  Process low quadword …
Run Code Online (Sandbox Code Playgroud)

c++ sse simd intrinsics

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

Scala SortedMap:获取大于给定键的所有键

给定一个Scala collection.SortedMap和一个键k,获得所有键(甚至更好,所有键值对)的最有效方法是什么,而不是存储在有序映射中.返回的键集应保留键的顺序.当然,我想避免仔细阅读整个数据结构(即使用),并利用地图的排序这一事实.kfilterKeys

我想做的事情如下:

val m = collection.SortedMap((1,1) -> "somevalue", (1,2) -> "somevalue", 
  (1,3) -> "somevalue", (2,1) -> "somevalue", (3,1) -> "somevalue")
m.getKeysGreaterThan((2,1))
// res0: scala.collection.SortedSet[(Int, Int)] = TreeSet((2,1), (3,1))
Run Code Online (Sandbox Code Playgroud)

如果您能想到更合适的类似地图的数据结构,请提出建议.

scala scala-collections

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