Python
Java
PHP
IOS
Android
Nodejs
JavaScript
Html5
Windows
Ubuntu
Linux
对于高度优化的矩阵乘法代码,MSVC 和 GCC 之间的性能差异
我发现 Ivy Bridge 系统的 MSVC 在 Windows 上 和 GCC 在 Linux 上 编译的代码在性能上存在很大差异 该代码执行密集矩阵乘法 我在 GCC 中得到了 70 的峰值失败率 而在 MSVC 中只有 50 我想我
c
visualc
gcc
Assembly
x86
对 x86 上 L1 缓存行的独占访问?
如果有一个 64 字节的缓冲区被大量读 写 那么它很可能会保留在 L1 中 但有什么办法可以强制这种行为吗 例如 给予一个核心对这 64 字节的独占访问权限 并告诉它不要与其他核心或内存控制器同步数据 以便这 64 字节始终存在于一个核心的
performance
Assembly
x86
cpucache
lowlevel
即使条件计算结果为 false,if 语句似乎也在计算
昨晚工作到很晚 我们试图找出出现问题的原因 验证检查在不应该失败的时候失败了 我们最终在这段代码中添加了一条 print 语句 从 Reflector 中反汇编 以检查代码实际上是我们编写的 public static string Red
c
NET
Assembly
x86
netassembly
x86 上成功的未对齐访问的实际效果是什么?
我总是听说未对齐的访问很糟糕 因为它们会导致运行时错误并使程序崩溃或减慢内存访问速度 然而 我找不到任何关于它们会减慢速度的实际数据 假设我在 x86 上并且有一些 但未知 未对齐访问的份额 实际上可能的最严重的减速是什么 在不消除所有未对
performance
memory
x86
Alignment
memoryalignment
系统如何选择正确的页表?
让我们关注单处理器计算机系统 据我所知 当创建进程时 就会建立页表 将虚拟地址映射到物理内存地址空间 每个进程都有自己的页表 存储在内核地址空间中 但是 由于不仅有一个进程在运行 并且会发生很多上下文切换 MMU 如何为进程选择正确的页表呢
process
x86
computerscience
processor
cpuarchitecture
MOVZBL 指令在 IA-32 AT&T 语法中起什么作用?
这个指令到底有什么作用 movzbl 0x01 eax ecx eax AT T 语法将movzxIntel指令助记符对于不同的源大小分为不同的助记符 movzb vs movzw 在英特尔语法中 它是 movzx eax byte ptr
Assembly
x86
att
zeroextension
为什么 gcc 自动矢量化不适用于大于 3x3 的卷积矩阵?
我已经为卷积矩阵实现了以下程序 include
c
gcc
x86
compileroptimization
autovectorization
栈中的返回地址是如何指定的?
这是我通过反汇编看到的声明function 1 2 3 movl 0x3 0x8 esp movl 0x2 0x4 esp movl 0x1 esp call 0x4012d0 lt Z8functioniii gt 看来转发地址根本没有压
Assembly
x86
stack
callingconvention
如何强制 .NET 应用程序以 32 位模式运行
我正在尝试在 Win7 x64 上运行我的 NET 3 5 WinForms 应用程序 该应用程序使用 NHibernate 和 System Data OracleClient 来访问 Oracle 数据库 Oracle客户端是32位的
net35
x86
64bit
corflags
“条件调用”在 amd64 上的性能
当考虑代码关键部分中的条件函数调用时 我发现 gcc 和 clang 都会围绕该调用进行分支 例如 对于以下 诚然微不足道的 代码 int32 t attribute noinline negate int32 t num return n
Assembly
x86
x8664
branchprediction
x86 给定 AH 和 AL 计算 AX?
我在理解x86汇编中的寄存器时遇到困难 我知道EAX是完整的32位 AX是低16位 然后AH和AL是AX的高8位和低8位 但我正在做一个问题 如果 AL 10 且 AH 10 AX 中的值是多少 我对此的想法是将 10 转换为二进制 101
Assembly
x86
cpuregisters
x86 上哪个写屏障更好:lock+addl 或 xchgl?
Linux 内核使用lock addl 0 0 esp 作为写屏障 而 RE2 库使用xchgl 0 0作为写屏障 有什么区别 哪个更好 x86 也需要读屏障指令吗 RE2 将其读屏障函数定义为 x86 上的无操作 而 Linux 将其定义
Assembly
x86
memorybarriers
英特尔 64 和 IA-32 |原子操作包括获取/释放语义
根据 Intel 64 和 IA 32 架构软件开发人员手册 LOCK 信号前缀 确保处理器在信号置位时独占使用任何共享内存 这可以是总线或高速缓存锁的形式 但是 这就是我问这个问题的原因 我不清楚这个前缀是否也提供任何内存障碍 我正在多处
Assembly
locking
x86
intel
memoryfences
ELF 可执行文件中 .dynamic .dynsym 和 .dynstr 之间的区别
我的初步了解是 dynamic包含可执行文件需要加载的库 dynsym包含外部符号 例如setsockopt GLIBC 2 0 dynstr包含功能需求字符串 总的来说 我对这些部分如何一起创建二进制文件有点困惑 特别是 dynsym a
Linux
x86
ELF
互斥锁和解锁函数如何防止 CPU 重新排序?
据我所知 函数调用充当编译器屏障 但不充当 CPU 屏障 This tutorial说如下 获取锁意味着获取语义 而释放锁 意味着释放语义 其间的所有内存操作都是 包含在一个漂亮的小屏障三明治内 防止任何 跨边界的不良内存重新排序 我假设上
c
Assembly
x86
mutex
memorybarriers
自动 x86 指令混淆
我正在开发一个 x86 asm 混淆器 它将 Intel 语法代码作为字符串并输出一组等效的混淆操作码 这是一个例子 mov eax 0x5523 or eax ebx push eax call someAPI 变成类似这样的东西 mov
Assembly
Automation
x86
obfuscation
x86-64 REX 前缀中的“REX”代表什么?
From 英特尔的SDM 第 2 2 1 节指定 REX 前缀用于 指定 GPR 和 SSE 寄存器 指定 64 位操作数大小 指定扩展控制寄存器 但缩写词中的字母 REX 代表什么 这个2002年热门薯条演示AMD 扩展了幻灯片 10 上
Assembly
x86
x8664
intel
machinecode
在x86 8086汇编中生成0-9范围内的随机数
首先 我对 8086 Assembly 非常陌生 掌握知识对我来说相当困难 尽管如此 我还是会尽力而为 我一直在尝试编写一个代码来生成0 9范围内的随机数 在研究了几个例子和建议之后 这就是我的结论 为了简单起见 我没有对检索到的时钟计数应
Assembly
Random
x86
x8616
优化易失性堆栈变量的存储/构造是否合法?
我注意到 clang 和 gcc 优化了易失性的构造或分配struct在某些情况下 在堆栈上声明 例如 以下代码 struct nonvol2 uint32 t a b void volatile struct2 volatile nonv
c
Optimization
x86
languagelawyer
volatile
加载和存储是唯一需要重新排序的指令吗?
我读过很多关于内存排序的文章 它们都只说 CPU 重新排序加载和存储 CPU 我对 x86 CPU 特别感兴趣 是否只重新排序加载和存储 而不重新排序它拥有的其余指令 乱序执行保留了按程序顺序运行的错觉对于单线程 核心 这就像C C as
x86
cpuarchitecture
memorybarriers
«
1 ...
41
42
43
44
45
46
47
...51
»