问题标签 [amd-processor]
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.
assembly - 今天 x86 上有多少条指令?
我正在尝试通过到目前为止的所有 sse 添加从旧的 386 基本指令中学习最新的 x86 程序集。
我读了一些东西,比如 SSE5 counts 170 new instructions - 我被催促知道目前总共有多少条指令。
有些人可能会说这很难计算(因为其中一些很接近,但适用于不同类型的参数),但我认为可以通过一些关于如何将倍数计为一个的合理假设来计算它们。那么有人可以提供答案吗?
最好的答案是每个处理器扩展中有多少指令的表格。
memory - AMD 7970 报告不正确的 DEVICE_GLOBAL_MEM_SIZE
我正在 AMD HD 7970(蓝宝石 GHz 版)上测试一些 OpenCL 图像处理。这个特殊的卡有 6GB 的板载 RAM,但是这个调用:
返回值 2,147,483,648。
这个 OpenCL 调用返回卡的实际内存大小是否存在问题?此卡是否有某种设置会限制可使用的 OpenCL 内存量?
任何见解都会有所帮助!
c++ - AMD 6310 GLSL / FBO 副本损坏前几个最低位(但仅有时)
我正在使用 OpenGL 2.0 和 FBO 将一些数据从 RGBA 纹理复制到 RGB 纹理,我遇到了一个问题,有时它会在复制过程中“破坏”某些像素组件的前几个最低位。
纹理副本分为几个步骤,我正在调整 FBO 的大小。
起初我认为这可能与我调整 FBO 大小的方式有关,或者与纹理采样的方式有关,但问题并不总是发生,当它发生时,它永远不会发生在每个每个有问题的像素的所有组件都不会复制像素。换句话说,它看起来几乎是随机的,除了它确实是确定性的,因为如果在程序的每次运行期间使用相同的输入浮点值,则会发生相同的错误。
此外,如果我总是使用 1x1 的 FBO 大小,问题永远不会发生(这有点误导,因为它让我认为这是一个采样问题,但同样,情况可能并非如此,因为不是每个有问题的像素的每个组件都“损坏”)。不幸的是,在现实世界中使用 1x1 大小的 FBO 绝对没有用,我将复制包含超过几个像素的纹理。
问题发生在 Windows 7 和 Ubuntu 上,当我使用 MSVC++ 或 g++ 的 std rand() 或 Mersenne Twister 生成输入纹理值时会出现问题(不是我如何生成值应该很重要,因为复制操作在定义上是独立的要复制的数据是如何预先生成的)..
我编写了一个测试程序(见下面的代码),除了输入纹理值之外,程序运行之间没有任何变化。
是否有人拥有可以运行此测试程序的 AMD 6310(或任何其他类型的硬件,真的)?您必须运行它几次,因为有时它会产生错误,有时则不会。我只是好奇它是否会在您的硬件上产生错误。我只是无法发现这种模式,而我天真的想法是这应该一直有效,或者永远不会 - 不是那么零星。
我也完全愿意接受它最终可能与我使用 OpenGL 进行复制的方式有关。这实际上会减轻压力,因为这意味着有一个简单可靠的解决方案。我希望是这样。
我可能在某处对 glTexParameteri 进行了一些无关的调用,但我在处理这个测试程序时尝试了“比抱歉更安全”的方法。
在任何情况下,该问题都会导致某些像素组件的误差约为~1e-8。是的,这是一个很小的错误,但对于我正在做的事情来说是完全不能接受的。
optimization - 如何在 AMD 芯片上使用英特尔编译器优化 C++ 程序
新手来了 我有一个需要高性能计算运行的大型有限分析代码。人们一直告诉我英特尔编译器通常会提供更好的速度(我以前使用过 gcc)。我发现在我们的英特尔集群上确实如此。但最近我们有了一个新的 AMD 集群。我对如何使用编译选项icpc
来优化程序感到困惑。
基本上,我有两个问题:
问题 1
这是带有 AMD 芯片的集群:
当我使用 编译小代码icpc hello.cpp -O3 -xP
时,我不知道应该使用哪些选项?我发现错误是:
问题2
如果我希望二进制文件同时用于 Intel 芯片集群和 AMD 芯片集群,我应该使用不同的选项来编译代码吗?
profiling - OpenCL CodeXL Profiler 多次执行内核
我正在尝试使用 CodeXL (或更确切地说是 sprofile)来分析一些 Opencl 代码。在性能计数器模式下进行分析时(但在使用跟踪选项时不会-t
),这总是给我错误的输出,所以我试图找出原因。经过一些实验后,我得出结论,每个内核都执行了 3 次,这会导致内核的错误结果,这些内核修改了一些现有数据而不是覆盖它。以下玩具程序展示了这种行为。
我的问题是:是否有人知道它为什么会这样以及如何阻止它这样做?
我的操作系统是 Fedora Linux 18 CodeXL 版本:CodeXL-Linux-1.1.1537.0 显卡:ATI Technologies Inc 设备 6798
这是执行命令:
我的代码:
核心:
这是我得到的结果:
assembly - 现代处理器中是否总是存在 MMX 寄存器?
当我查看最新处理器的图表和概述时[1],我从未看到提到 MMX 寄存器 MM0 - MM7。但从规格来看,它们似乎仍然存在。是否可以依赖它们出现在所有支持 SSE 的处理器中?它们是否与更旧的 FPU 堆栈以外的任何东西发生冲突?它们是否与一般 64 位的物理寄存器相同?
虽然 XMM 和 YMM 对于向量来说要好得多,但我偶尔想使用 MMX 寄存器来存储值,否则这些值会溢出到堆栈中。Speedwise 这看起来好一点,而且有时我想避免额外的存储和加载。
pointers - OpenCL void 指针算术 - 奇怪的行为
我已经编写了一个 OpenCL 内核,它使用 opencl-opengl 互操作性来读取顶点和索引,但这可能并不重要,因为我只是在做简单的指针添加,以便通过索引获取特定的顶点。
这里我以字节为单位计算绝对位置,在我的示例中,pos 是 28,643,328,步幅为 28,index = 0 和 base = 1,022,976。嗯,这似乎是正确的。
不幸的是,我不能vload3
直接使用,因为偏移量参数不是以字节为单位计算的绝对地址。所以我只是添加pos
到指针void* vertices_gl
new_addr
在我的例子中 = 0x2f90000 这就是奇怪的部分开始的地方,
vertices_gl
= 0x303f000
结果 ( new_addr
) 应该是 0x4B90000 (0x303f000 + 28,643,328)
我不明白为什么地址 vertices_gl 减少了 716,800 (0xAF000)
我的目标是 GPU:AMD Radeon HD5830
Ps:对于那些想知道的人,我正在使用 printf 来获取这些值:)(无法让 CodeXL 工作)
compiler-errors - OpenCL AMD SDK - 卡在编译中
我正在为我的硕士项目试验 OpenCL,在 GPU 上实现基于图像的照明算法。到目前为止,我没有什么大问题,但今天我遇到了一个非常烦人的问题。当我调用 build 方法时,它只是卡住了……我的一个内核以 100% 的速度运行,就像卡在无限循环中一样。我试图编译的代码如下:
我在 Linux Mint Debian 版上运行最新版本的 SDK 和催化剂。我在这里一无所知,希望有人可以帮助我。我的显卡是HD 5770。
c++ - GPU线程分歧的高级问题
我的情况- 作为我博士研究的一部分,我有一个动态编程算法可以使用 OpenCL 在 GPU 上实现。我使用的 GPU 包括 AMD HD 7970、7750、A10-5800K APU 和 nVidia GTX 680。我了解获得良好性能所涉及的原则和大部分最佳实践。
我的程序包含 4 个嵌套循环,并且在我的数据并行公式中,我能够展开 2 个外部循环。现在由于问题的性质,最里面的循环不能不引起分歧。输出是一个表,表示机器上的作业时间表(计算机科学)。
当线程发散(波前中的工作项采用不同的路线)时,我得到错误的值,看起来好像工作项重复了自己。例如,
t = 0, 1, 2, 3, 4, ... 63 , 64, 65, 66, 67, ...
M1 0, 0, 0, 9, 9, ... 9, 0, 0, 0, 9、...
高于工作组大小的是 64。直到 t=63 的第一个值是正确的,但请注意它是如何在 t=64 处再次重复的!它们不应该是零。这里每个工作项都映射到时间 t。
如果我修复导致分歧的参数,表格将完全填满预期的(错误)结果,没有间隙(零),所以我得到从 t=0 到 TMAX 的值 9,其中 TMAX 是 64 的倍数。
问题- 线程分歧是否有导致错误计算或未定义线程行为的趋势?
我已经在互联网、文档和书籍中挖掘了有关线程分歧和内存一致性的任何内容。我以不同的方式实现了整个程序,包括多次调用内核以排除全局内存不一致,但结果都是一样的。
任何输入将不胜感激。谢谢!