我需要使用为x86,x64和IA64制作的Windows可执行文件.我想通过检查文件本身以编程方式找出平台.
我的目标语言是PowerShell,但C#示例可以.如果您知道所需的逻辑很好,那么其中任何一个都会失败.
我在微软的网站上注意到两个不同的安装程序,一个用于x64,另一个用于IA-64.参考:安装.NET Framework 4.5,4.5.1
我的理解是IA-64是x64的子类,所以我很好奇它为什么会有一个单独的安装程序.如果可能的话,我们将不胜感激.
我对使用Sandy-Bridge和Haswell可以完成每个核心每个循环的触发器感到困惑.据我所知,对于SSE,每个核心每个周期应该为4个触发器,对于AVX/AVX2,每个核心每个周期应该有8个触发器.
这似乎在这里得到验证, 如何实现每个周期4个FLOP的理论最大值? ,这里, Sandy-Bridge CPU规范.
然而,下面的链接似乎表明,Sandy-bridge每个核心每个周期可以执行16个触发器,每个核心每个循环使用Haswell 32个触发器 http://www.extremetech.com/computing/136219-intels-haswell-is-an-前所未有-threat-to-nvidia-amd.
谁可以给我解释一下这个?
编辑:我现在明白为什么我感到困惑.我认为术语FLOP仅指单浮点(SP).我现在看到如何在每个循环中实现理论最大值4 FLOP的测试?实际上是双浮点(DP),因此它们为SSE实现4个DP FLOP /周期,为AVX实现8个DP FLOP /周期.在SP上重做这些测试会很有趣.
我正在参加系统架构课程,我无法理解直接映射缓存的工作原理.
我看了几个地方,他们用不同的方式解释它让我更加困惑.
我无法理解的是标签和索引是什么,它们是如何被选中的?
从我的演讲的解释是:"地址划分是分为两名部分的索引用于寻址(32K)的RAM地址直接的休息时,标签被存储,并与输入标签进行比较(例如,15个比特)."
那个标签来自哪里?它不能是RAM中内存位置的完整地址,因为它使直接映射缓存无用(与完全关联缓存相比).
非常感谢你.
我知道x64架构的一些显而易见的好处(更高的可寻址RAM地址等)......但是:
我最近一直在问自己的一个真正的问题是,设计选择带来了x86是一个小端架构而不是大端架构?
在过去的3到5年里,我一直在C和CPython工作.考虑一下我的知识基础.
如果我要使用汇编指令(如MOV AL, 61h支持它的处理器),处理器内部究竟是什么解释此代码并将其作为电压信号发送?如何进行如此简单的指导?
当我试着想到包含MOV AL, 61h甚至包含的众多步骤时,大会甚至感觉像是一种高级语言XOR EAX, EBX.
编辑:我读了一些评论,询问为什么我把它作为嵌入式,当x86系列在嵌入式系统中不常见时.欢迎来到我自己的无知.现在我想,如果我对此一无所知,也有可能其他人也对此一无所知.
考虑到你们在答案中付出的努力,我很难选择一个最喜欢的答案,但我觉得有必要做出决定.没有伤害感情,伙计们.
我经常发现,我对计算机的了解越多,我就越不会意识到我真正知道的.感谢您对微码和晶体管逻辑的开放态度!
编辑#2:感谢这个帖子,我刚刚理解了为什么XOR EAX, EAX比这更快MOV EAX, 0h.:)
这是我的测试代码:
#include <chrono>
#include <iostream>
#include <cstdlib>
using namespace std;
using ll = long long;
int main()
{
__int128_t a, b;
ll x, y;
a = rand() + 10000000;
b = rand() % 50000;
auto t0 = chrono::steady_clock::now();
for (int i = 0; i < 100000000; i++)
{
a += b;
a /= b;
b *= a;
b -= a;
a %= b;
}
cout << chrono::duration_cast<chrono::milliseconds>(chrono::steady_clock::now() - t0).count() << ' '
<< (ll)a % 100000 << '\n';
x = …Run Code Online (Sandbox Code Playgroud) 程序计数器保存下一个应该执行的指令的地址,而指令寄存器保存要执行的实际指令.他们中的其中一个不够吗?
这些寄存器中每一个的长度是多少?
谢谢.
我刚刚使用VS2008在64位Windows机器上构建了libpng.它libpng.lib在\ projects\visualc71\Win32_Lib_Release目录中生成一个文件(配置使用的是"LIB Release").
我曾经dumpbin检查过这个LIB文件:
C:\Temp\libpng-1.4.3>dumpbin projects\visualc71\Win32_LIB_Release\libpng.lib
Microsoft (R) COFF/PE Dumper Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file projects\visualc71\Win32_LIB_Release\libpng.lib
File Type: LIBRARY
Summary
8E4 .debug$S
DF2 .drectve
2BCD .rdata
21165 .text
C:\Temp\libpng-1.4.3>
Run Code Online (Sandbox Code Playgroud)
但是它没有显示LIB文件的体系结构.如何查找给定的LIB文件是为32位还是64位架构构建的?
cpu-architecture ×10
64-bit ×3
x86-64 ×3
c++ ×2
intel ×2
x86 ×2
assembly ×1
avx ×1
c# ×1
caching ×1
cpu ×1
embedded ×1
endianness ×1
flops ×1
itanium ×1
libpng ×1
performance ×1
powershell ×1
system ×1
windows ×1