标签: instruction-set

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

如何检查CPU是否支持SSE3指令集?

以下代码是否有效以检查CPU是否支持SSE3指令集?

使用该IsProcessorFeaturePresent()功能显然不适用于Windows XP(请参阅http://msdn.microsoft.com/en-us/library/ms724482(v=vs.85).aspx).

bool CheckSSE3()
{
    int CPUInfo[4] = {-1};

    //-- Get number of valid info ids
    __cpuid(CPUInfo, 0);
    int nIds = CPUInfo[0];

    //-- Get info for id "1"
    if (nIds >= 1)
    {
        __cpuid(CPUInfo, 1);
        bool bSSE3NewInstructions = (CPUInfo[2] & 0x1) || false;
        return bSSE3NewInstructions;     
    }

    return false;      
}
Run Code Online (Sandbox Code Playgroud)

c++ sse instruction-set avx cpuid

59
推荐指数
5
解决办法
3万
查看次数

确定Linux(库或可执行文件)中二进制文件的目标ISA扩展

我们遇到了一个与在Advantech POS板上使用Via C3处理器在(相当旧的)FC3下运行的Java应用程序相关的问题.java应用程序有几个已编译的共享库,可通过JNI访问.

通过C3处理器应该是i686兼容.前段时间在使用相同处理器的MiniItx主板上安装Ubuntu 6.10之后,我发现之前的声明并非100%正确.由于缺少C3处理器中i686设置的一些特定和可选指令,Ubuntu内核在启动时挂起.在使用i686优化时,GCC编译器默认使用i686集的C3实现中缺少的这些指令.在这种情况下,解决方案是使用i386编译版本的Ubuntu发行版.

Java应用程序的基本问题是通过克隆另一台PC的HD映像来安装在HD上的FC3发行版,这次是Intel P4.之后,分发需要一些黑客才能让它运行,比如用i386编译的版本替换一些软件包(例如内核).

问题是,工作一段时间后系统完全挂起而没有任何痕迹.我担心一些i686代码会留在系统中的某个地方,并且可以随时随机执行(例如从暂停模式或类似的东西中恢复后).

我的问题是:

  • 是否有任何工具或方法可以找出二进制文件(可执行文件或库)所需的特定体系结构扩展?file没有提供足够的信息.

linux executable shared-libraries instruction-set cpu-architecture

58
推荐指数
4
解决办法
8万
查看次数

如何控制进程运行的核心?

我可以理解如何编写一个使用多个进程或线程的程序:fork()一个新进程并使用IPC,或创建多个线程并使用这些通信机制.

我也理解上下文切换.也就是说,只有一次CPU,操作系统为每个进程安排时间(并且有大量的调度算法),从而我们实现了同时运行多个进程.

现在我们拥有多核处理器(或多处理器计算机),我们可以在两个独立的核心上同时运行两个进程.

我的问题是关于最后一个场景:内核如何控制进程运行的核心?哪些系统调用(在Linux,甚至是Windows中)在特定核心上安排进程?

我问的原因是:我正在为学校开展一个项目,我们将在那里探索最近的计算主题 - 我选择了多核架构.关于如何在这种环境中编程(如何监视死锁或竞争条件)似乎有很多材料,但在控制各个核心本身方面却没有太多.我希望能够编写一些演示程序并提供一些汇编指令或C代码,以实现"看,我在第二个内核上运行无限循环,查看该特定内核的 CPU利用率峰值" .

任何代码示例?还是教程?

编辑:为了澄清 - 很多人都说这是操作系统的目的,应该让操作系统处理这个问题.我完全同意!但那时我所要求的(或试图感受到)是操作系统实际上做的事情.不是调度算法,而是"一旦选择了核心,必须执行哪些指令才能让核心开始获取指令?"

multicore intel instruction-set system-calls

57
推荐指数
4
解决办法
5万
查看次数

LEA EAX有什么意义,[EAX]?

LEA EAX, [EAX]
Run Code Online (Sandbox Code Playgroud)

我在使用Microsoft C编译器编译的二进制文件中遇到此指令.它显然无法改变EAX的价值.那为什么呢?

c x86 assembly instruction-set

43
推荐指数
2
解决办法
9565
查看次数

显卡是否有自己的指令集?

显卡是否有自己的指令集?我认为他们这样做,但我一直想知道它是否是专有的,或者是否有某种开放标准.

是每个GPU指令都先于CPU指令还是无缝的?那就是通过CPU在驱动程序层上调用OpenGL或DirectX,然后CPU向总线发送GPU指令,或者更精细.

gpu instruction-set

40
推荐指数
5
解决办法
2万
查看次数

什么是ARM Thumb指令集?

在"ARM11TechnicalRefManual"的第1-34节"拇指指令集"下,它说:

"Thumb指令集是最常用的32位ARM指令的子集.Tumb指令长16位,并且具有相应的32位ARM指令,对处理器型号具有相同的影响."

谁可以解释更多关于这个特别是第二句话,并说处理器如何执行它?

arm instruction-set thumb

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

CPU架构演变如何影响虚拟函数调用性能?

几年前,我正在学习x86汇编程序,CPU流水线,缓存未命中,分支预测以及所有爵士乐.

这是两个半的故事.我在处理器viz指令重新排序,缓存预加载,依赖性交错等方面阅读了冗长流水线的所有优点.

缺点是规范的任何偏差都是非常昂贵的.例如,IIRC在早期千兆赫时代的某个AMD处理器每次通过指针(!)调用函数时都会有40个周期的惩罚,这显然是正常的.

这不是一个可以忽略不计的"别担心"号码!请记住,"良好设计"通常意味着"尽可能地考虑您的功能"和"在数据类型中编码语义",这通常意味着虚拟接口.

权衡是不执行此类操作的代码每个周期可能获得两个以上的指令.这些是在编写高性能C++代码时需要担心的数字,这些代码在对象设计上很重要并且可以解决数字运算问题.

据我所知,随着我们进入低功耗时代,长CPU流水线趋势已经逆转.这是我的问题:

最新一代x86兼容处理器是否仍然遭受虚拟功能调用,坏分支预测等的严重处罚?

cpu instruction-set cpu-architecture cpu-speed

30
推荐指数
1
解决办法
3917
查看次数

任何汇编语言被认为有用所需的最小指令集是什么?

我正在研究汇编编程,所以我决定尝试用软件实现一个"虚拟微处理器",它有寄存器,标志和RAM来处理,用变量和数组实现.但是,由于我只想模拟任何微处理器的最基本行为,我想创建一个只有基本指令的汇编语言,只有那些没有它就没用的指令.我的意思是,有汇编语言可以执行乘法和交换寄存器值等,但这些操作不是基本的,因为您可以使用更简单的指令来实现它们.我不想实现那些指令.

我可以想象一些指令(我相信)必须始终以任何汇编语言存在,例如MOV移动字节和JP将指令指针发送到另一个地址.

你能否提出一套最基本和最基本的装配说明?谢谢!

assembly instruction-set microprocessors vm-implementation

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

指令集和汇编语言是一样的吗?

我想知道指令集汇编语言是否相同?

如果没有,他们如何区别以及他们的关系是什么?

感谢致敬!

assembly instruction-set

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