Andreas Abel 和 Jan Reineke在他们描述 uiCA 的论文中讨论了移动消除:
4.1.4移动消除。[...] 然而,这种消除动作并不总是成功的。[...]我们开发了微基准,使用这些计数器来分析移动消除何时成功。[...]
以下模型与我们的观察一致。处理器跟踪由多个架构寄存器使用的物理寄存器。我们说每个这样的物理寄存器占用一个消除槽。当相应的寄存器被覆盖后,消除槽被再次释放。* 一个周期内可以消除的移动指令数量既取决于可用消除槽的数量,也取决于前一个周期中成功消除的数量。
我对我不明白的部分进行了强调。
我认为给定的物理寄存器只能由单个体系结构寄存器从重命名到退出使用。我认为文本的含义暗示了其他情况,所以我正在努力理解移动消除槽是如何工作的(此时甚至寄存器重命名实际上是如何工作的)。
我正在使用此代码来检查我的glsl着色器编译是否正常.
glGetObjectParameterivARB(obj, GL_OBJECT_INFO_LOG_LENGTH_ARB, &infologLength);
if (infologLength > 1)
{
int charsWritten = 0;
char * const infoLog = new char[infologLength];
glGetInfoLogARB(obj, infologLength, &charsWritten, infoLog);
tError(infoLog, false);
delete infoLog;
}
}
Run Code Online (Sandbox Code Playgroud)
在nvidia和ATI卡上返回的字符串的长度为空,但在intel卡上,这个字符串返回字符串"no errors".
现在找出最好的方法是什么,如果真的没有错误?我应该检查这个字符串吗?或者是否有一个约定这个函数glGetInfoLogARB应该返回什么?
我试图并行化使用TBB在OpenCV中编写的一些图像匹配代码.问题是,根据我的匹配(在左图像中创建一个5x5窗口并在右边逐个像素地查找匹配)本质上是一个只读操作,目前我正在尝试并行化内部循环(即在给定高度.我指定不同的像素到不同的线程).令我惊讶的是,cvSetImageROI
当并行完成时命令会中断.这是代码.
//Code below just carves out a window(5x5) at a current width which is to be matched
cvSetImageROI(leftImageROI, cvRect(curWidth - 2, 0, 5, 5));
IplImage* currentROI = cvCreateImage(cvSize(5, 5), leftImageROI->depth, leftImageROI->nChannels);
cvCopy(leftImageROI, currentROI);
cvResetImageROI(leftImageROI);
Run Code Online (Sandbox Code Playgroud)
现在这一切对我来说都是安全的,因为它们只是在读取图像.但是代码崩溃了.如果我在一开始就放锁,虽然它有效.有人可以帮忙吗?
有没有一种方法 - 如果是的话,它是什么 - 找出特定陈述可能抛出的异常?
例如,给出以下代码:
String substr = SelectedFileName.Substring(DATE_BEGIN_POS, DATE_LENGTH);
return DateTime.Parse(substr);
Run Code Online (Sandbox Code Playgroud)
...我怎么知道第二行可能会抛出什么异常?你会认为可以突出显示该行,并从上下文菜单中选择一些来提供这个/这些......
<< Intel 64和IA-32架构软件开发人员手册第2B卷:指令集参考,NZ >>说:
| Opcode* | Instruction | Op/En | 64-Bit Mode | Compat/Leg Mode | Description |
| 6A | PUSH imm8 | C | Valid | Valid | Push imm8. |
| 68 | PUSH imm16 | C | Valid | Valid | Push imm16. |
| 68 | PUSH imm32 | C | Valid | Valid | Push imm32. |
Run Code Online (Sandbox Code Playgroud)
#cat -n test.asm
1 bits 64
2
3 push byte 12
4 push word 12
5 …
Run Code Online (Sandbox Code Playgroud) 在维基百科中,它说:
在SSE2中添加整数支持使得MMX在很大程度上是冗余的,但是在某些情况下通过使用MMX与SSE操作并行可以获得进一步的性能提升.
这是否意味着处理器可以在运行SSE/MMX指令的同时运行另一条MMX/SSE指令,因为这些指令在不同的单元中运行?
或者,它只是手段,因为它们使用不同的寄存器,可以一起使用,而不必切换模式(MMX模式和FPU模式可以在"不行同一时间 ",你必须手动切换到不同的模式)?
我有一个应用程序用于2个数据库之间的数据传输.此应用程序的大多数操作都是独立的并且同时运行.此应用程序早先在4核心intel机器上运行,现在这个应用程序需要移植到AMD quad(4)核心机器上.我对以下几点表示怀疑.
我发现AMD不支持超线程(HTT),这显然意味着应用程序性能(吞吐量)会降低.由于Context Switching会导致性能下降,如果是,那么同时运行的线程数会减少有帮助吗?
我是否需要更改代码以提高应用程序吞吐量.
我已经知道有一段时间可以通过使用CRTC将行高改为两个像素来在IBM CGA上实现伪160×100图形模式.我一直试图在几天内完成这项工作,走到了尽头.
在英特尔开源HD显卡和英特尔虹膜™图形程序员参考手册要求,我可以通过写扫描线的最大注册为此45页(或59页的PDF),或者这就是我从中解读.
我相信,我已经尝试直接写入值为00000001b的内存地址3B5或2个扫描行的代码.当我在DOSBox中测试它时,这什么都没做.
如果你想看到我写的代码将在NASM中汇编:
BITS 16
xor bx,bx
mov ax, 3b5h
mov es, ax
mov ah, 00000001b
mov BYTE [es:bx], ah ; write 00000001b to 0x03b5:0000, right?
cli
hlt
Run Code Online (Sandbox Code Playgroud)
我对这样的低级别的东西还不是很有信心,任何帮助都会受到赞赏.
我刚刚了解了超标量处理器(https://en.wikipedia.org/wiki/Superscalar_processor)。
我还了解到,随着超标量处理器宽度/方式数量的增加,事情变得更加复杂,复杂性也如此之快,以至于最好添加更多核心而不是更多宽度。我的教练说,在4路和8路超标量之间的地方添加更多的方法不再是值得的。
这让我想知道:英特尔在哪里停止添加方式并开始添加内核?我的英特尔第8代酷睿i7的每个内核有几种方式?
方式的概念是否甚至适用于这些处理器?