2434得票11回答
为什么逐元素相加在分开的循环中比在一个合并的循环中快得多?

假设 a1、b1、c1 和 d1 指向堆内存,并且我的数值代码具有以下核心循环。 const int n = 100000; for (int j = 0; j < n; j++) { a1[j] += b1[j]; c1[j] += d1[j]; } 这个循环通...

1627得票11回答
用64位替换32位的循环计数器,会导致在Intel CPU上使用_mm_popcnt_u64时出现性能差异。

我正在寻找快速计算大型数据数组的popcount的方法。我遇到了一个非常奇怪的现象:将循环变量从unsigned更改为uint64_t会使性能在我的PC上下降50%。 基准测试 #include <iostream> #include <chrono> #inclu...

938得票11回答
为什么用C++编写的测试Collatz猜想的代码比手写汇编运行更快?

我为Project Euler Q14编写了两个解决方案,一个是汇编语言,另一个是C++。它们都使用了相同的暴力方法来测试Collatz猜想。汇编语言解决方案是用以下方式组装的: nasm -felf64 p14.asm && gcc p14.o -o p14 使用以下编...

866得票17回答
LEA指令的目的是什么?

对我来说,它似乎只是一个时髦的MOV。它的目的是什么,何时应该使用它? 对于我来说,它看起来像一个时髦的视频文件格式(MOV)。它的用途是什么,何时应该使用它呢?

372得票16回答
如何确定一个.NET程序集是为x86还是x64构建的?

我有一个任意的.NET程序集列表。 我需要编程方式检查每个DLL是否是为x86构建的(而不是x64或Any CPU)。这是否可能?

344得票4回答
在英特尔Sandybridge系列CPU中针对流水线进行程序去优化

我已经绞尽脑汁一个星期试图完成这个任务,希望有人能指引我正确的方向。让我从教练的指示开始: “你的任务与我们第一个实验室任务相反,那是优化素数程序。你在这个任务中的目的是使程序变慢,即pessimize程序。这两个都是CPU密集型程序。它们在我们实验室的PC上运行需要几秒钟。你不能改变算法。”...

318得票12回答
如何使用SSE4.2和AVX指令编译Tensorflow?

这是运行检查Tensorflow是否工作的脚本后收到的消息: I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally I tensorf...

309得票11回答
多核汇编语言是什么样子的?

从前,在写x86汇编语言时,例如,你需要指令说明“将EDX寄存器加载为值5”,“增加EDX”寄存器等。 对于现代拥有4个核心(甚至更多)的CPU,在机器代码级别上是否看起来就像有4个单独的CPU(即是否只有4个不同的“EDX”寄存器)?如果是这样,当你说“增加EDX寄存器”时,是什么决定了哪...

308得票4回答
如何在没有操作系统的情况下运行程序?

如何在没有操作系统运行的情况下单独运行程序?您可以创建汇编程序,使计算机能够在启动时加载和运行它们,例如从闪存驱动器引导计算机并运行CPU上的程序吗?

283得票6回答
基指针和栈指针到底是什么?它们指向什么?

使用来自维基百科的这个例子,其中DrawSquare()调用DrawLine(): (请注意,此图中高地址在底部,低地址在顶部。) 有人能解释一下在这个上下文中ebp和esp是什么吗? 从我所看到的,我会说栈指针总是指向栈的顶部,而基指针指向当前函数的开头,对吗? 编辑:我是指...