我想购买一台新的开发PC.我的预算不超过1,000美元(包括显示器).我对笔记本电脑(台式机替代型)或传统台式电脑可以做得很好.
我的主要开发环境将是Microsoft,Visual Studio 2008(以及对旧版Visual Studio 6代码的支持).SQL Server 2005,2008以及SQL Server 2000的遗留支持.Microsoft Office 2003,可能安装2007但支持Office 2000.我将编写和支持的软件主要是Windows XP,但有些Vista.我将不得不假设有64位实现安装到.
我的第一个困惑始于选择AMD或英特尔.我担心的是在AMD环境中使用Visual Studio构建软件存在兼容性问题.我没有任何证据,只是担心有人会为我清理.
最后,我对32位和64位安装感到困惑.即使64位稳定上升,我应该坚持使用最小公分母(32位)吗?我知道64位操作系统将解决超过4G的RAM和我喜欢的问题,因为我想为测试环境设置尽可能多的虚拟机,并且可能会同时激活多个虚拟机.
我不是在寻找梦想的机器,只是一台带有显示器和最好的处理器的机器,价格大约1000美元,这将允许我为大多数机器编写软件.
在与英特尔IPP库链接时,某些DSP类型的工作负载似乎在英特尔x86 x86_64处理器上显示出非常显着的性能提升.
想知道ARM方面是否有类似的东西?特别是那可能适用于ARM9,ARM11和Cortex-A8/A9(不一定具有相同的性能提升水平).
最后,这个问题可能在这里可能不正确/可接受,所以mods应该留下评论并且我可以编辑它.
我一直在努力阅读IPP的许可协议,但目前尚不清楚Linux上的商业IPP许可证(售价为199美元以上的税)是否可以使用一个个人副本(但可能用于商业用途). ,或者可以将他们的申请与该图书馆联系起来并出售以获取商业利益?或者这需要不同类型的许可证?想知道在英特尔网站上的一个地方问这个问题(没有像联系销售)!
我正在尝试收集系统信息并在Intel Xeon E5420上注意到以下内容:
执行后CPUID(EAX=1),EDX [28]设置,表示支持超线程,尽管处理器在英特尔网站上列为不支持超线程(ark.intel.com)
有没有人对此有解释?
我正在浏览http://www.ibm.com/developerworks/linux/library/l-gas-nasm/index.html上的一些教程,以熟悉x86/x64.本教程代码使用提供的代码编译和运行,没有打嗝,该代码使用AT&T语法:
.global main
.text
main: # This is called by C library's startup code
mov $message, %rdi # First integer (or pointer) parameter in %edi
call puts # puts("Hello, World")
ret # Return to C library code
message:
.asciz "Hello, World" # asciz puts a 0x00 byte at the end
Run Code Online (Sandbox Code Playgroud)
但是,当我将此代码转换为Intel语法时,我收到"分段错误"错误.
.intel_syntax noprefix
.global main
.text
main: # This is called by C library's startup code
mov rdi, message # First integer (or pointer) parameter in %edi
call …Run Code Online (Sandbox Code Playgroud) 截至去年9月,我一直在使用基于英特尔i7的笔记本电脑来创建和编译我的程序,但不幸的是显卡坏了,因此我构建了一台基于AMD 4100 FX处理器的预算计算机.
自从我开始使用桌面进行编译以来,我遇到了各种各样的问题,主要问题是我的应用程序在英特尔平台上确实不稳定.
这个问题的最新版本是我的C++代码中的某个函数被破坏,似乎是由于在AMD CPU上进行编译而引起的.为了测试这一点,我很快掌握了AWS(亚马逊网络服务)EC2 micro.t2服务器,从Dreamspark安装了Visual Studio 2008,下载了源代码并进行了编译.果然,没有腐败的功能和源代码生成的DLL完美运行.
我正在使用带有库存编译器的Visual Studio 2008,并运行Windows 8.1(AWS EC2服务器运行Windows Server 2008 R2).我正在尝试编译的代码示例是Crysis Wars SDK,请记住,此代码总是在我的Intel i7 CPU上正常编译.
为什么我的AMD CPU在编译C++应用程序时遇到这么多麻烦?除了继续在AWS EC2服务器上编译我的应用程序,或者在基于英特尔的新PC构建上花钱,我能做些什么吗?
我理解这里解释的内容以及这些内容包括CPU对静态分支预测的提示.
我想知道英特尔CPU上的这些是如何相关的,因为英特尔CPU已经放弃了对这里提到的静态预测提示的支持.此外,如果我理解它现在如何工作,路径中的分支指令的数量将是编译器可以控制的唯一事物,并且在运行时决定预测,获取和解码哪个分支路径.
鉴于此,是否存在代码中的分支提示对于针对最近的英特尔处理器的软件仍然有用的情况,可能使用条件返回或者在嵌套的if/else语句的情况下避免关键路径中的分支指令数量?
此外,如果这些仍然相关,那么gcc和其他流行编译器的任何细节都会受到赞赏.
PS我不是为了过早优化或者用这些宏来编写代码,但是我对这个主题很感兴趣,因为我正在使用一些时间关键代码,并且仍然希望尽可能减少代码混乱.
谢谢
编辑3:图像是指向完整版本的链接.对于文本图片感到抱歉,但图表很难复制/粘贴到文本表中.
我有一个编译的程序的以下VTune配置文件icc --std=c++14 -qopenmp -axS -O3 -fPIC:
在该配置文件中,组装视图中突出显示了两组指令.尽管指令相同且顺序相同,但上部集群比下部集群花费的时间少得多.两个集群都位于同一个函数内,显然都被称为n时间.每次我运行探查器时都会发生这种情况,我现在正在使用Westmere Xeon和Haswell笔记本电脑(使用SSE编译,因为这就是我现在正在瞄准和学习的东西).
我错过了什么?
忽略糟糕的并发性,这很可能是由于笔记本电脑节流,因为它不会发生在桌面Xeon机器上.
我认为这不是微优化的一个例子,因为这三个加在一起相当于总时间的百分之一,我真的对这种行为的可能原因感兴趣.
编辑: OMP_NUM_THREADS=1 taskset -c 1 /opt/intel/vtune...
相同的资料,虽然此次CPI略低.
GCC支持__builtin_clz(int x)内置,它计算参数中前导零(连续最重要的零)的数量.
除了其他东西0之外,这对于有效地实现lg(unsigned int x)函数非常有用,该函数采用基数2的对数x,舍入为1:
/** return the base-2 log of x, where x > 0 */
unsigned lg(unsigned x) {
return 31U - (unsigned)__builtin_clz(x);
}
Run Code Online (Sandbox Code Playgroud)
这部作品在简单的方式-尤其是考虑的情况下x == 1,并clz(x) == 31-再x == 2^0这样lg(x) == 0和31 - 31 == 0我们得到正确的结果.更高的x工作价值.
假设内置程序有效实现,这比备用纯C解决方案更好.
现在,它发生了,计数前导零操作基本上是bsrx86中指令的双重.返回参数中最重要的1位2的索引.因此,如果有10个前导零,则第一个1位位于参数的第21位.一般来说,我们有31 - clz(x) == bsr(x),并在这样bsr …
我正在试图分析一些x86二进制代码的"时序通道".我发布了一个问题来理解bsf/bsr操作码.
如此高级,这两个操作码可以被建模为"循环",它计算给定操作数的前导零和尾随零.该x86手册对这些操作码具有良好的形式化,如下所示:
IF SRC = 0
THEN
ZF ? 1;
DEST is undefined;
ELSE
ZF ? 0;
temp ? OperandSize – 1;
WHILE Bit(SRC, temp) = 0
DO
temp ? temp - 1;
OD;
DEST ? temp;
FI;
Run Code Online (Sandbox Code Playgroud)
但令我惊讶的是,bsf/bsr指令似乎有固定的cpu周期.根据我在这里找到的一些文档:https://gmplib.org/~tege/x86-timing.pdf,似乎它们总是需要8个CPU周期来完成.
所以这是我的问题:
我确认这些指令有固定的cpu周期.换句话说,无论给出什么操作数,它们总是花费相同的时间来处理,并且没有"时序通道".我在英特尔的官方文档中找不到相应的规格.
那么为什么有可能呢?显然这是一个"循环"或某种程度,至少是高级别的.背后的设计决策是什么?CPU流水线更容易?
我遇到的情况是,着色器在我的 Apple (M1) iMac(以及 iPhone)上产生的输出与我的 Intel(i5-4300U / Haswell-ULT 集成图形控制器)Thinkpad 440 上产生的输出完全不同(更多信息见评论)。然而,Chrome 和 Safari 等浏览器之间似乎没有区别。Chrome 和 GNOME Web 在 iMac 上分别生成相同的图像。笔记本电脑。我的 Intel Thinkpad 13 Chromebook 也显示 Intel 版本(显然无法测试除 Chrome 之外的其他浏览器)。这可能是什么原因?
[编辑] 大多数人(朋友和下面评论的人)似乎都获得了苹果版本,所以只有我和我的两台笔记本电脑显然获得了英特尔版本?
这是着色器:
const gl = document.querySelector("canvas").getContext("webgl");
gl.canvas.width = gl.canvas.height = 512
gl.viewport(0, 0, 512, 512);
const programInfo = twgl.createProgramInfo(gl, ["vs", "fs"]);
const bufferInfo = twgl.createBufferInfoFromArrays(gl, {
a_Position: {
numComponents: 2,
data: [-1, -1, -1, 3, 3, -1]
},
});
gl.useProgram(programInfo.program);
twgl.setBuffersAndAttributes(gl, programInfo, bufferInfo);
twgl.drawBufferInfo(gl, bufferInfo);Run Code Online (Sandbox Code Playgroud)
<script src="https://twgljs.org/dist/4.x/twgl-full.min.js"></script>
<script id="vs" type="x-shader/x-vertex"> …Run Code Online (Sandbox Code Playgroud)