标签: pipelining

Spring Data Redis:Redis 管道始终返回 null

我想检索仅具有指定字段的多个哈希图值。所以我选择加入 Redis 管道。

在测试以下代码时,我看到redisResponse1始终为空,其中 asredisResponse2具有值。

    getRedisTemplate().executePipelined(new RedisCallback<Object>() { 
        @Override
        public Object doInRedis(RedisConnection connection) throws DataAccessException {
                List<byte[]> redisResponse1 = connection.hMGet(key.getBytes(), params);
                List<byte[]> redisResponse2 = getRedisTemplate().getConnectionFactory().getConnection().hMGet(key.getBytes(), specificParams);
                return null;
        }
    });
Run Code Online (Sandbox Code Playgroud)

当我查看代码并发现下面的代码时,

a)redisResponse2不使用管道选项执行

b)redisResponse1使用管道执行 (isPipelined() == true) 但始终返回 null。

public List<byte[]> hMGet(byte[] key, byte[]... fields) {
    try {
        if (isPipelined()) {
            pipeline(new JedisResult(pipeline.hmget(key, fields)));
            return null;
        }
        if (isQueueing()) {
            transaction(new JedisResult(transaction.hmget(key, fields)));
            return null;
        }
        return jedis.hmget(key, fields);
    } catch (Exception ex) …
Run Code Online (Sandbox Code Playgroud)

java lua pipelining redis spring-data

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

MIPS流水线处理器项目

好的,这个问题更多的是讨论.我有这个实现pipelined MIPS处理器的项目VHDL.

我完全熟悉流水线的概念,但我从未实现过VHDL.有什么好的资源,以学习落实pipelined processorsVHDL.

我需要一个良好的开端?

mips vhdl pipelining

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

是"a - > b - >(a - > b - > c) - > c"应用两个参数标准功能概念吗?

我遇到了一个带签名的函数的需要,用于'a -> 'b -> ('a -> 'b -> 'c) -> 'c在管道时应用两个参数:

let apply2 x y f =
  f x y
Run Code Online (Sandbox Code Playgroud)

我需要这个因为我正在使用一个函数

myFun : MyType -> TypeA -> TypeB -> ResultType
Run Code Online (Sandbox Code Playgroud)

我在另一个函数中使用它:

let useCase someValue (valueA: TypeA) (valueB: TypeB) =
  someValue
  |> ...
  |> toMyType
  |> myFun
  |> apply2 valueA valueB
Run Code Online (Sandbox Code Playgroud)

apply2符合条件,但我不能动摇我可以使用内置函数或运算符的感觉,或者我错过了一些更基本的方法(禁止使用lambda,在这种情况下恕我直言的内容更糟).请注意,我不能轻易切换的参数顺序myFun(这是一个长颈鹿HttpHandler,所以最后两个参数必须HttpFuncHttpContext,由指定的TypeATypeB以上).

apply2具有签名的函数我已经描述了在函数式编程中使用的公平的东西,还是我错过了一些明显的东西?如果这是一个众所周知的概念,它有更好的名字吗?

f# functional-programming pipeline partial-application pipelining

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

简单的 5 级处理器的各个级需要多少个时钟周期?

5 级流水线 CPU 具有以下阶段顺序:

\n
    \n
  • IF \xe2\x80\x93 从指令存储器中获取指令。

    \n
  • \n
  • RD \xe2\x80\x93 指令译码和寄存器读取。

    \n
  • \n
  • EX \xe2\x80\x93 执行:ALU 运算,用于数据和地址计算。

    \n
  • \n
  • MA \xe2\x80\x93 数据存储器访问 \xe2\x80\x93 用于写访问,使用 RD 状态下的寄存器读取。

    \n
  • \n
  • WB \xe2\x80\x93 寄存器写回。

    \n
  • \n
\n

现在我知道,例如,指令提取是从内存中获取的,这可能需要 4 个周期(L1 缓存)或最多约 150 个周期(RAM)。但是,在每个流水线图中,我都会看到类似的内容其中每个阶段都分配一个周期。

\n

现在,我当然知道真正的处理器具有超过 19 个阶段的复杂管道,并且每种架构都是不同的。但是,我在这里错过了什么吗?如果在 IF 和 MA 中进行内存访问,那么这个 5 级流水线是否需要几十个周期?

\n

cpu-architecture pipelining cpu-cache risc

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

了解停顿和分支延迟槽

我正在学习计算机体系结构课程。我从另一所大学找到了这个网站,其中的笔记和视频迄今为止对我有帮助:CS6810,犹他大学。我正在完成该网站上发布的一些旧作业,特别是这个。我试图理解管道和相关概念,特别是停顿和分支延迟槽。

我现在正在看旧作业中的第一个问题,并且不确定如何做这些问题。

问题如下:

考虑以下代码段,其中 30% 的时间执行分支,70% 的时间不执行分支。

R1 = R2 + R3

R4 = R5 + R6

R7 = R8 + R9

如果 R10 = 0,则分支到 linex

R11 = R12 + R13

R14 = R11 + R15

R16 = R14 + R17

...

线性:R18 = R19 + R20

R21 = R18 + R22

R23 = R18 + R21

...

考虑一个 10 级有序处理器,其中指令在第一级中获取,并且分支结果在三个级后已知。估计以下场景下处理器的 CPI(假设处理器中的所有停顿都与分支相关,并且分支占所有执行指令的 15%):

  1. 在每个分支上,获取都会停止,直到知道分支结果为止。

  2. 每个分支都被预测为不被采用,并且如果该分支被采用,则误取的指令将被压缩。

  3. 处理器有两个延迟槽,分支后面的两条指令总是被取出并执行,并且

    3.1. 您无法找到任何说明来填充延迟槽。

    3.2. 您可以将分支之前的两条指令移至延迟槽中。

    3.3. 您可以将标签“linex”后的两条指令移至延迟槽中。

    3.4. 您可以在分支(在原始代码中)之后立即将一条(注意:一条,而不是两条!)指令移至延迟槽中。

我不确定如何开始看待这个问题。我已经阅读了所有笔记并观看了该网站上的视频,并阅读了 …

cpu-architecture pipelining branch-prediction

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

“挤压”指令的真正含义是什么?

研究流水线处理器时,他们提到预测分支是否被采用,在我们决定分支是否被采用之前,在“临时”中插入显着指令,但如果我们猜错了,则“挤压”它们。

我们如何压制它们?我们只是不回信吗?在确定它是一个分支和确定是否采用之间的过渡期间,我们可以插入多少条指令。我想只有一个,对吧 - 因为我们弄清楚它是 ID 中的一个分支,然后弄清楚 EX 中是否被采用?那么只有一台可压缩仪器?

IF->ID->EX->MEM->WB

architecture processor cpu-architecture pipelining

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

使用 go-redis 包在没有 WATCH 的情况下对 Redis 集群实现管道和事务

我的要求是使用 go 实现连接到 redis 集群的管道事务。我正在使用支持 redis 集群、管道和事务的 go-redis 包。如何在不使用 go-redis 包中的 WATCH key 的情况下实现管道事务。我还查看了包中的 Tx.Pipeline() 。在实现事务时是否需要 WATCH key

transactions go pipelining redis

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

在流水线CPU上如何确保一条指令在第二条指令开始之前完成?

假设有两条顺序指令,如下所示:

instruction A
instruction B
Run Code Online (Sandbox Code Playgroud)

由于 CPU 流水线的原因,B 将在 A 完成之前启动。

是否存在一种机制来确保 B 在 A 完成后启动?

更新:
很抱歉我没有准确描述问题。我的意思是,这两条指令具有应用程序级排序依赖性,但没有危险。例如,在事务系统中,第一条指令将日志刷新到持久存储,第二条指令通知客户端有关事务提交的信息。因此,在第一条指令完成之前,我们无法执行第二条指令。如何提供这个执行指令?

cpu assembly cpu-architecture pipelining

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