问题标签 [itanium]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mingw - MinGW 是否交叉编译 IA64?
我想在 Linux 平台上交叉编译 Windows IA64 二进制文件。
可以移植MinGW吗?
java - JDK6 IA-64 vs x86_64 多线程问题
是否有任何程序员编写了 Java 多线程代码,并且在代码运行时看到了 Itanium 和 x86_64 之间的不同行为?ConcurrentSkipListMaps 上的不同步或错误锁定或 MappedByteBuffer 释放的元素?我面临一个非常奇怪的问题,在 IA-64 上,java 代码不能顺利和正确地运行,但在 x86_64 上我没有看到错误。我已经阅读了互联网上的各种帖子,但其中大多数都在谈论 C++。但是 Java 从 1.2 开始使用本机线程。所以我想知道......有人吗?
ada - 移植到 Itanium 和 Gnat Ada
使用 OpenVMS 平台在 Ada 83 中开发的应用程序将通过 GNAT Ada 编译器迁移到安腾。
这个港口有什么风险?
是否有一个通用的迁移接受计划。
我如何验证此应用程序,知道 GNAT Ada 和 DEC Ada 之间的浮点管理存在差异。
oracle - 我收到类似 ORA-27125 的错误:无法创建共享内存段
当我尝试创建数据库实例时,我收到如下错误:
SQL> ORA-27125: 无法创建共享内存段 HPUX-ia64 错误: 12: 空间不足
我的系统物理内存有 15.68 GB,我的
在 opt/oracle 中有超过 10gb。我已经尝试修改sga
值,但我仍然只得到错误。
提前致谢。
assembly - IA-64 架构中的寄存器名称是什么?
据我所知,IA-64 中的寄存器名称与 x86-64/AMD64 中的寄存器名称不同,但我无法找到寄存器名称。
我在一个网站上发现 IA-64 中的通用寄存器被调用r0
,r127
而我在另一个网站上发现它们被gr0
调用gr127
。
我在哪里可以找到正确的信息?
c++ - 建议的安腾 NOP 内存屏障中的“C/C++11 到处理器的映射”问题?
尽管我不阅读 Itanium 程序集,也没有声称了解它的内存模型,但我注意到在一个将 C/C++ 原子映射到 Itanium 的提议中存在一些非常奇怪且明显矛盾的地方。
在C/C++11 到处理器的映射中,在 Itanium 上建议的原子实现建议没有获取或释放栅栏:
(到底什么是消费围栏?)
事实上,在该提案中,放松的原子加载和存储从未放松:
我们看到,在这些映射中,所有轻松的简单(不是 RMW)操作都已经是 Acq_Rel。但是查看 RMW 操作会发现松弛和非松弛操作是不同的:
除非 Cmpxchg AcqRel 实现无偿mf
(不太可能),否则这意味着获取行为在cmpxchg.rel
.
一个宽松的、仅发布的 RMW 操作后跟一个获取栅栏不应该至少提供 acq_rel RMW 的保证吗?如果是这样,那不是表明提案有缺陷吗?
assembly - 通过 Intel Core i5/7 上 c 的汇编指令获取浮点数的指数
我正在自下而上地c
阅读一本书,它有通过以下方式获得浮点指数的指令GCC
:
asm ("getf.exp %0=%1" : "=r"(exp) : "f"(d));
说它适用于安腾。在我的 Core i7 GCC 上说Error: no such instruction: 'getf.exp %rax=%st'
。
我试过网络搜索,但找不到类似的Core iX
处理器指令。有这样的吗?
c++ - 为什么删除析构函数除了普通析构函数还要占用第二个vtable槽?
在以Itanium C++ ABI为模型的 C++ ABI 实现中,随后是其他处理器的许多 ABI,虚拟析构函数实际上占用了两个 vtable 插槽。除了执行您所期望的“完整对象析构函数”之外,“删除析构函数”还有第二个条目,它调用第一个,然后删除对象的内存。
这种方法有一个问题,这在小型内存系统中可能会令人讨厌:动态内存管理器是链接的,即使没有其他代码使用它。当应用程序中的任何地方都没有调用删除时,这是死代码。这是因为 C++ 编译器/链接器通常无法检测到 vtable 中的插槽未被从任何地方调用,因此无法删除相关代码。显然,如果删除析构函数可以以不涉及 vtable 条目的不同方式实现,并允许编译器/链接器省略这个死代码,那会更好。
当然可以实现一个自定义void operator delete(void *) {}
来防止链接器引入动态内存代码,但这仍然不能阻止删除析构函数代码完全发出。
因此我的问题是:没有更好的方法来实现删除析构函数吗?我的想法是返回指向内存块开头的指针,以便从完整的对象析构函数中删除。如果要在销毁后删除内存块,则返回的地址可以被调用的非虚拟函数使用operator delete
。本质上,让完整的对象析构函数返回内存地址将允许删除析构函数是非虚拟的,因此有资格消除死代码。
但我想我一定忽略了一些东西,这使得这个相当简单的解决方案变得不可能。但那会是什么?有人可以为我解释安腾 ABI 中的设计决策吗?
编辑:我在这里找到了提供部分答案的信息:
最佳答案包含以下解释:
当某个类定义了自己的操作符 delete 时,选择要调用的特定操作符 delete 就像从类析构函数内部查找一样。这样做的最终结果是,对于具有虚拟析构函数运算符的类,delete 的行为就好像它是一个虚拟函数(尽管形式上是该类的静态成员)。
显然,Itanium API 选择让它表现得像一个虚函数的方式是让调用它的析构函数成为一个实际的虚函数。
然而,这并不是实现它的唯一方法。链接文章的中心是一个使用带有隐藏参数的单个虚函数的实现,但该解决方案会产生与我在上面描述的相同的不良行为。如果类有自定义实现,则另一个实现可能是让完整的对象析构函数返回运算符 delete() 的地址,否则返回 nullptr。这将避免我上面描述的问题。
因此,以某种修改的形式,我的问题仍然存在。
instruction-set - IA64 实现应该如何处理格式错误的指令组?
我正在学习 IA64 ISA。我读过 IA64 编译器将指令放在指令组中,即它们之间没有寄存器数据依赖性的连续指令序列。因此,硬件不需要检测同一组内指令之间的数据依赖关系。在现实世界中,一个 IA64 实现可能会收到一个格式错误的指令组,该指令组确实包含其指令之间的寄存器数据依赖关系(例如,由于编译器错误)。在这种情况下,ISA 是否为实现指定了正确的行为?