标签: pipelining

F#编译错误:意外的类型应用程序

在F#中,给出以下类:

type Foo() =
    member this.Bar<'t> (arg0:string) = ignore()
Run Code Online (Sandbox Code Playgroud)

为什么以下编译:

let f = new Foo()
f.Bar<Int32> "string"
Run Code Online (Sandbox Code Playgroud)

虽然以下内容不会编译:

let f = new Foo()
"string" |> f.Bar<Int32> //The compiler returns the error: "Unexpected type application"
Run Code Online (Sandbox Code Playgroud)

generics f# pipelining

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

交换变量(C++,处理器级别)

我想交换两个变量.我想通过管道使用Read After Write危险来实现这一点.

管道:

OPERXXXXXX FetchXXXXX DecodeXXXX ExecuteXXX WriteBkXXX
STORE X, Y ---------- ---------- ---------- ----------
STORE Y, X STORE X, Y ---------- ---------- ----------
---------- STORE Y, X STORE X, Y ---------- ----------
---------- ---------- STORE Y, X STORE X, Y ----------
---------- ---------- ---------- STORE Y, X STORE X, Y
---------- ---------- ---------- ---------- STORE Y, X
Run Code Online (Sandbox Code Playgroud)

如何在没有自动锁定和警告标志的情况下告诉编译器这样做(并且确切地说)?你能推荐任何文学/关键词?

眼镜:

  • - > target:支持多站点(超过4个)流水线操作的现代架构

  • - >这与任何特定的"问题"无关.只是为了科学.

目前的障碍:

  • 如果您知道如何忽略datahazards,请分享.

c++ swap processor pipelining

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

流水线和linux中的重定向之间的区别

有人能告诉我区别吗?例如:
如果我有一个a.txt包含以下内容的文件:

a
b
c

cat a.txt | catcat < a.txt
我之间有什么区别在我看来,他们都模拟STDIN,这是正确的,还是有差异?非常感谢.

linux redirect pipelining

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

为什么增加管道深度并不总是意味着增加吞吐量?

这可能更像是一个讨论问题,但我认为stackoverflow可能是一个正确的问题.我正在研究指令流水线的概念.我被告知,一旦管道级数增加,管道的指令吞吐量就会增加,但在某些情况下,吞吐量可能不会改变.在什么条件下,这会发生吗?我认为停滞和分支可能是问题的答案,但我想知道我是否遗漏了一些至关重要的东西.

assembly intel pipelining

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

为什么Visual Studio在解除引用之前递增循环指针?

我从以下SIMD代码中检出了Visual Studio 2012的程序集输出:

    float *end = arr + sz;
    float *b = other.arr;
    for (float *a = arr; a < end; a += 4, b += 4)
    {
        __m128 ax = _mm_load_ps(a);
        __m128 bx = _mm_load_ps(b);
        ax = _mm_add_ps(ax, bx);
        _mm_store_ps(a, ax);
    }
Run Code Online (Sandbox Code Playgroud)

循环体是:

$LL11@main:
    movaps  xmm1, XMMWORD PTR [eax+ecx]
    addps   xmm1, XMMWORD PTR [ecx]
    add ecx, 16                 ; 00000010H
    movaps  XMMWORD PTR [ecx-16], xmm1
    cmp ecx, edx
    jb  SHORT $LL11@main
Run Code Online (Sandbox Code Playgroud)

为什么增加ecx16,只有当存储到下一行时减去16?

c++ assembly code-generation pipelining visual-studio-2012

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

HTTP 1.1管道传输

我必须在Java中实现HTTP客户端,并且对于我的需求,似乎最有效的方法是实现HTTP管道(根据RFC2616).

顺便说一句,我想管道POST.(我也不是在谈论多路复用.我在谈论流水线操作,即在接收任何响应之前通过一个连接的许多请求 - 批量处理HTTP请求)

我找不到明确声明它支持流水线操作的第三方库.但我可以使用例如Apache HTTPCore来构建这样的客户端,或者如果必须的话,我自己构建它.

我遇到的问题是它是否是一个好主意.我没有找到任何权威的参考资料,HTTP流水线技术不仅仅是理论模型,而是由HTTP服务器正确实现.此外,所有支持流水线操作的浏览器都默认关闭此功能.

所以,我应该尝试实现这样的客户端,否则我将因服务器的实现(或代理)而遇到很多麻烦.有没有提供这些指南的参考?

如果不知道什么是效率的替代编程模型?单独的TCP连接?

java http rfc2616 pipelining

6
推荐指数
2
解决办法
7097
查看次数

S3是否支持HTTP流水线操作?

我每分钟都有数以千计的小文件(大约1 KB)上传到S3.如果我上传循环中的每个文件"发送我的HTTP请求 - 等待S3的HTTP响应 - 发送下一个请求 - 等待下一个响应...",则需要花费大量时间,因为我必须等待S3和我的服务器之间的2次延迟.当然我已经使用了HTTP Keep-Alive标头.

所以我尝试发送多个HTTP请求而不等待相应的(HTTP流水线).我尝试批量发送20个请求并等待20个响应.我预计这可能会节省很多时间,因为我仍然可以在前一个响应途中发送请求.

然而,它并没有让世界变得更好.

我在大约200ms内发送了20个请求,然后我尝试收到响应.我希望我收到响应的速度与收到第一个响应后发送请求的速度一样快,就像这个图表一样.

事实是,在我收到第一个回复之后,我必须等待大约300毫秒的每一个回复.与发送一个请求和接收一个响应相比,它没有任何好处.

为什么我不能缩短流水线技术的时间?为什么S3为每个请求花费了这么多时间?S3是否支持HTTP流水线操作?

谢谢.

http amazon-s3 amazon-web-services pipelining

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

redis分片,流水线和往返

假设在您的Web应用程序中,您需要执行一些redis调用来呈现页面,例如,获取大量用户哈希值.为了加快速度,你可以将你的redis命令包装在MULTI/EXEC部分,从而使用流水线技术,这样你就可以避免多次往返.但是你也想对你的数据进行分片,因为你有很多数据和/或你想分发写入.然后流水线操作不起作用,因为不同的密钥可能存在于不同的节点上,除非您清楚地了解应用程序的数据布局和基于角色的分片而不是使用散列函数.那么,由于联系了许多服务器以完成"概念上独特"的工作,在不影响性能的情况下,在不同服务器之间对数据进行分片的最佳做法是什么?我相信答案取决于正在开发的Web应用程序,我最终会进行一些测试,但知道其他人如何应对我提到的权衡取舍会有所帮助.

sharding pipelining redis

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

乱序指令执行:提交顺序是否保留?

一方面,维基百科写了乱序执行的步骤:

  1. 取指令。
  2. 指令分派到指令队列(也称为指令缓冲区或保留站)。
  3. 指令在队列中等待,直到其输入操作数可用。然后允许该指令在较早、较旧的指令之前离开队列。
  4. 指令被发布到适当的功能单元并由该单元执行。
  5. 结果在排队。
  6. 只有在所有较旧的指令将其结果写回寄存器文件后,才会将该结果写回寄存器文件。这称为毕业或退休阶段。

类似的信息可以在《计算机组织与设计》一书中找到:

为了让程序表现得像在一个简单的有序流水线上运行,指令获取和解码单元需要按顺序发出指令,这允许跟踪依赖关系,并且提交单元需要将结果写入寄存器和程序获取顺序中的内存。这种保守的模式被称为有序提交……今天,所有动态调度的管道都使用有序提交。

因此,据我所知,即使指令以乱序方式执行,其执行结果也会保存在重新排序缓冲区中,然后以确定性顺序提交到内存/寄存器。

另一方面,有一个众所周知的事实,即现代 CPU 可以为性能加速目的重新排序内存操作(例如,可以重新排序两个相邻的独立加载指令)。维基百科在这里写到。

您能否解释一下这种差异?

cpu cpu-architecture dynamic-execution instructions pipelining

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

了解气泡、失速、重复解码/获取

我真的很困惑气泡、停顿和重复解码/获取之间的区别。我的文本是帕特森文本,第三版。
示例1:

add $3, $4, $6
sub $5, $3, $2
lw $7, 100($5)
add $8, $7, $2
Run Code Online (Sandbox Code Playgroud)

解决方案:点击这里(使用图像,因为很难输入其中的内容)
在此示例/解决方案中,将五个气泡插入到第三条和第四条指令之间的新行中。

示例2:

lw $4, 100($2)
sub $6, $4, $3
add $2, $3, $5
Run Code Online (Sandbox Code Playgroud)

解决方案:点击这里
在此示例中,气泡包裹了时钟周期 4 中的第二条和第三条指令。在时钟周期 4 中,重复 I2 的解码并重复 I3 的取指。


示例 1 和示例 2 有什么区别?为什么示例 1 中插入了一行气泡,而示例 2 中插入了一个气泡并重复解码/获取?它们的功能相同吗?如果它们在功能上相同,那么这对于示例 1 来说是一个有效的解决方案吗?

I1: IF ID EX MEM WB
I2:    IF ID EX  MEM WB
I3:       IF ID  EX  MEM WB
I4:          IF  NOP ID  EX MEM WB 
Run Code Online (Sandbox Code Playgroud)

对于示例 1,这也是一个有效的解决方案吗? …

assembly computer-science mips cpu-architecture pipelining

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