标签: intel

C++/compilation:是否可以设置vptr的大小(全局vtable + 2字节索引)

我最近发布了一个关于由于C++中的虚拟性导致的内存开销的问题.答案让我了解vtable和vptr的工作原理.我的问题如下:我在超级计算机上工作,我有数十亿个对象,因此我不得不关心由于虚拟性造成的内存开销.经过一些测量,当我使用具有虚函数的类时,每个派生对象都有其8字节的vptr.这根本不可忽视.

我想知道intel icpc或g ++是否有一些配置/选项/参数,使用"全局"vtable和可调精度的索引而不是vptr.因为这样的事情将允许我使用2字节索引(unsigned short int)而不是8字节vptr用于数十亿个对象(并且很好地减少了内存开销).有没有办法用编译选项做到这一点(或类似的东西)?

非常感谢你.

c++ compilation g++ intel vptr

17
推荐指数
1
解决办法
562
查看次数

为什么64位模式(长模式)不使用段寄存器?

我是初学者级别的学生:)我正在研究英特尔架构,我正在研究内存管理,例如分段和分页.我正在阅读英特尔的手册,了解英特尔的架构非常好.

但是我仍然对一些基本的东西感到好奇.为什么在64位长模式下,所有段寄存器都会转到0位?为什么系统不再使用段寄存器?

因为系统的64位大小(例如GP寄存器)足以一次包含那些逻辑地址?保护是否在64位模式下正常工作?

我试图找到64位寻址但我在谷歌找不到.也许我有很糟糕的搜索技巧,或者我可能需要一些特定的先前知识来搜索谷歌.

因此,我想知道为什么16位段寄存器不会在64位模式下使用,以及如何在64位模式下正常工作.

谢谢!

64-bit memory-management intel memory-segmentation

17
推荐指数
2
解决办法
8174
查看次数

页面表和页面目录之间的区别

我经常在微处理器和微控制器Paradigm中听到术语地址空间.我知道地址用于指代物理内存中的特定内存块(主要).

如果我是对的,地址空间是所有这些地址的超级集合.对?

通过使用虚拟内存/分页,我们使用二级存储扩展地址空间.

在这个范例中,页表,页表项和页面目录究竟是什么?我知道第一个p.memory是分段和逻辑上的,这些段被分成页面.那么页面表究竟是什么?包含Pages的表格?什么是页面目录页表的超级表?

assembly intel microprocessors

17
推荐指数
1
解决办法
1万
查看次数

汇编寄存器esp和ebp

我目前正在学习英特尔处理器的组装.由于堆栈"渐渐减少",为什么我们必须添加才能访问特定元素

[ebp + 8] ;; This will access the first param
Run Code Online (Sandbox Code Playgroud)

我知道我们必须跳过旧的ebp值和返回地址,这就是我们使用8的原因(因为每个都是4个字节长).这有点奇怪.

另外,如果ebpesp的备份副本,那么主函数Ex中的ebp值是多少:

_start:

;; what's ebp value here ?

push eax
push ebx
call someFunction ;; this will create a stack frame

+-----------+
|   param1  |
+-----------+
|   param0  | <--- this is [ebp + 8] ( assuming mov ebp, esp )
+-----------+
|ret_address|
+-----------+
|    ebp    |
+-----------+ <--- esp
Run Code Online (Sandbox Code Playgroud)

而且当我们为本地人分配内存时,我们必须从ebp中减去...请给出一个非模棱两可的答案.谢谢!

assembly intel cpu-registers

16
推荐指数
2
解决办法
1万
查看次数

在Intel x86 ISA上_mm_load_ps与_mm_load_pd vs. etc

以下两行有什么区别?

__m128 x = _mm_load_ps((float *) ptr);
__m128 y = _mm_load_pd((double *)ptr);
Run Code Online (Sandbox Code Playgroud)

换句话说,为什么有这么多不同的_mm_load_xyz指令,而不是通用的__m128 _mm_load(const void *)

c x86 sse intel simd

16
推荐指数
2
解决办法
5418
查看次数

像CLR和JVM这样的运行时是否能够使用Haswell TSX指令?

在阅读Anandtech的'Haswell TSX'(转换内存屏障)之后,我立刻想知道CLR/JVM是否能够在C#/ Java/Scala/F#中使用这些用于高度并行的应用程序(C#Rx/TPL/TFD).

clr transactional-memory intel

16
推荐指数
3
解决办法
2176
查看次数

如何找到英特尔x86 CPU解码指令的微操作?

英特尔优化参考,根据第3.5.1节,建议:

"赞成单微操作指令."

"避免使用复杂指令(例如,输入,离开或循环),这些指令超过4个微操作并需要多个周期才能解码.请使用简单指令序列."

虽然英特尔自己告诉编译器编写者使用解码为少数微操作的指令,但我在他们的任何手册中都找不到任何东西,这解释了每个ASM指令解码的微操作数量!这些信息是否随处可用?(当然,我希望不同代CPU的答案会有所不同.)

x86 intel compiler-optimization

16
推荐指数
3
解决办法
3570
查看次数

解释intel_gpu_top输出

任何人都可以对输出有所了解intel_gpu_top吗?具体来说,什么是任务GAM,VS等(手册页没什么帮助.)

比特流忙什么意思?它似乎总是零......

               render busy:  45%: ?????????                              render space: 83/131072
            bitstream busy:   0%:                                     bitstream space: 0/131072
              blitter busy:   0%:                                       blitter space: 0/131072

                      task  percent busy
                       GAM:  43%: ?????????               vert fetch: 0 (0/sec)
                        VS:  35%: ???????                 prim fetch: 0 (0/sec)
                        CL:  33%: ???????              VS invocations: 2101845324 (1427552/sec)
                        SF:  33%: ???????              GS invocations: 0 (0/sec)
                        VF:  33%: ???????                   GS prims: 0 (0/sec)
                      GAFS:  33%: ???????              CL invocations: 701123988 (475776/sec)
                       SOL:  32%: ???????                   CL prims: …
Run Code Online (Sandbox Code Playgroud)

gpu intel

16
推荐指数
1
解决办法
5041
查看次数

什么是x86架构中的"不可虚拟化"指令?

在硬件辅助虚拟化出现之前,存在由于各种原因而无法虚拟化的指令.有人可以解释这些说明是什么以及为什么它们不能被虚拟化?

xen virtualization x86 intel computer-architecture

16
推荐指数
1
解决办法
3257
查看次数

如何检测Linux alder Lake系统中的E核和P核?

如何查看特定 cpu 核心属于 P 核心还是 E 核心组?有没有办法列出正在运行的 Linux x86_64 alder Lake 系统中有关性能/能源核心的信息?比如,打印任何 sysfs 参数?

linux x86-64 intel cpu-architecture cpu-cores

16
推荐指数
1
解决办法
1万
查看次数