相关疑难解决方法(0)

为什么处理排序数组比处理未排序数组更快?

这是一段看似非常特殊的C++代码.出于某种奇怪的原因,奇迹般地对数据进行排序使得代码几乎快了六倍.

#include <algorithm>
#include <ctime>
#include <iostream>

int main()
{
    // Generate data
    const unsigned arraySize = 32768;
    int data[arraySize];

    for (unsigned c = 0; c < arraySize; ++c)
        data[c] = std::rand() % 256;

    // !!! With this, the next loop runs faster.
    std::sort(data, data + arraySize);

    // Test
    clock_t start = clock();
    long long sum = 0;

    for (unsigned i = 0; i < 100000; ++i)
    {
        // Primary loop
        for (unsigned c = 0; c < arraySize; ++c) …
Run Code Online (Sandbox Code Playgroud)

c++ java optimization performance branch-prediction

2万
推荐指数
27
解决办法
142万
查看次数

为什么过滤未排序的列表比过滤排序列表更快

我一直在玩Java 8 Streams - API,我决定使用microbenchmark stream()parallelStream()stream.正如预期的parallelStream()那样,速度提高了两倍,但是其他东西弹出 - 如果我在将数据传递给filter它之前对数据进行排序,结果需要花费5-8倍的时间,filter->map->collect而不是传递未排序的列表.

未分类

(Stream) Elapsed time [ns] : 53733996 (53 ms)
(ParallelStream) Elapsed time [ns] : 25901907 (25 ms)
Run Code Online (Sandbox Code Playgroud)

排序

(Stream) Elapsed time [ns] : 336976149 (336 ms)
(ParallelStream) Elapsed time [ns] : 204781387 (204 ms)
Run Code Online (Sandbox Code Playgroud)

这是代码

package com.github.svetlinzarev.playground.javalang.lambda;

import static java.lang.Long.valueOf;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

import com.github.svetlinzarev.playground.util.time.Stopwatch;

public class MyFirstLambda {
    private static final int ELEMENTS = 1024 * …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8

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

Haskell的位置属性是什么?

现代CPU被优化,以便访问和修改存储器中的相同位置(时间局部性)以及存储器中的连续位置(空间局部性)是非常快速的操作.

现在,由于Haskell是一种纯粹的不可变语言,你自然不能覆盖现有的内存块,可能使得foldlfor具有连续访问的结果变量的循环慢得多的事情将在C中.

Haskell是否在内部做任何事情来减轻这种性能损失?一般来说,它的地方性质是什么?

memory performance haskell

11
推荐指数
2
解决办法
527
查看次数