标签: amd-processor

Visual Studio 6 处理器包兼容性

我已经看到处理器包可用于 Visual Studio 6,但它似乎只对使用 SP5 的用户可用,而且我已经在使用 SP6:

此外,Visual C++ 处理器包 ​​(VCPP) 已从 Service Pack 6 中删除。如果您安装了 VCPP,安装 SP6 会将其从您的计算机中删除。如果您希望继续使用 VCPP,则需要继续使用 SP5 或迁移到 Visual Studio 2002 或 2003(推荐)。

首先,这个处理器包是否与 Visual Studio 6 SP6 兼容?

其次,它真的会帮助我吗?我担心从我的应用程序中获得最大收益,但它需要在所有类型的 Intel 和 AMD 芯片上运行,所以我不能只针对一个平台。

performance visual-c++-6 intel visual-studio-6 amd-processor

5
推荐指数
1
解决办法
4600
查看次数

是否值得学习特定于AMD的API?

我目前正在学习与英特尔并行化库相关的API,如TBB,MKL和IPP.不过,我想知道它是否也值得关注AMD的部分难题.或者这只是浪费时间?(我必须承认,我对AMD的图书馆支持毫无头绪 - 所以 - 如果您有任何建议,我将不胜感激.)

只是为了澄清,我采用英特尔方式的原因是因为1)API非常好; 2)英特尔似乎像API支持一样认真对待工具支持.(再一次,我不知道 AMD在这个部门的表现如何.)

c++ intel amd-processor

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

保证内存排序和正确的编程实践

关于我在下面描述的顺序,我有一些相关的问题.

  1. 鉴于这些排序保证,我在许多地方不需要明确的围栏.但是,如何向编译器表达"栅栏",特别是GCC?也就是说,只要优化器不重新排序我的程序,程序顺序的保证才适用.

  2. 是否有普通/流行的新芯片使用通用内核而不提供此类保证?

  3. 我在C++ 0x中对它的交错思想感到有点困惑.我必须使用"原子"类来利用这些保证,还是草案中还有其他一些方面也提供了一种利用这些保证的方法?


记忆订购

英特尔和AMD(至少使用x86_64)都保证内存负载与单处理器上的存储操作相关.也就是说,如果某个处理器执行这些存储:

  1. 存储A < - 1
  2. 商店B < - 2
  3. 商店C < - 3

一些其他处理器看到C(3)的那一刻,它保证也能看到先前的存储A(1)和B(2).现在,处理器之间的可见性可以是交错的,但来自任何给定处理器的存储顺序也将是顺序的.

当处理器0读取处理器1存储的值,然后写入一个值时,它们也具有传递保证,读取新值的处理器2也必须从处理器1中看到该值.

忽略处理IO和特殊设备的特殊情况.我只对一般的内存保证感兴趣:我的排序只是我最感兴趣的一点,因为它对并发算法最重要.

c++ gcc intel c++11 amd-processor

5
推荐指数
1
解决办法
313
查看次数

MMX 寄存器是否总是存在于现代处理器中?

当我查看最近处理器的图表和概述时 [1],我从未看到提及 MMX 寄存器 MM0 - MM7。但从规格来看,它们似乎仍然存在。可以依赖它们存在于支持 SSE 的所有处理器中吗?除了更旧的 FPU 堆栈之外,它们是否与其他任何东西冲突?它们是否与一般 64 位的物理寄存器相同?

虽然 XMM 和 YMM 对于向量要好得多,但我偶尔想使用 MMX 寄存器来存储值,否则这些值会溢出到堆栈中。Speedwise 这看起来好一点,而且有时我想避免额外的商店和负载。

[1] http://www.realworldtech.com/haswell-cpu/

x86 assembly cpu-registers mmx amd-processor

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

AMD Opteron CPU上的.net代码速度较慢

遇到过一种简单的.net fibonniacci代码在一组特定服务器上速度较慢的情况,唯一明显不同的是CPU.AMD Opteron处理器6276 - 11秒Intel Xeon XPU E7 - 4850 - 7秒

代码遵循x86并使用.NET framework 4.0.两者之间的速度相似,实际上PassMark基准测试为AMD提供了更高的分数. - 在农场的其他AMD服务器上试过这个,时间慢了. - 即使我的本地I7机器运行代码更快.

Fibonnacci代码:

class Program
{
    static void Main(string[] args)
    {
        const int ITERATIONS = 10000;
        const int FIBONACCI = 100000;

        var watch = new Stopwatch();
        watch.Start();


        DoFibonnacci(ITERATIONS, FIBONACCI);

        watch.Stop();

        Console.WriteLine("Total fibonacci time: {0}ms", watch.ElapsedMilliseconds);
        Console.ReadLine();
    }

    private static void DoFibonnacci(int ITERATIONS, int FIBONACCI)
    {
        for (int i = 0; i < ITERATIONS; i++)
        {
            Fibonacci(FIBONACCI);
        }
    }

    private static int Fibonacci(int x) …
Run Code Online (Sandbox Code Playgroud)

.net c# intel windows-server-2008 amd-processor

5
推荐指数
1
解决办法
851
查看次数

对于大缓冲区,为什么在 Ryzen 上使用 gcc -march=native 在 32 位模式下 memcpy 很慢?

我写了一个简单的测试(代码在底部)来memcpy对我的 64 位 Debian 系统的性能进行基准测试。在我的系统上编译为 64 位二进制文​​件时,这在所有块大小上提供了一致的 38-40GB/s。然而,当在同一系统上构建为 32 位二进制文​​件时,复制性能非常糟糕。

我在汇编程序中编写了自己的 memcpy 实现,该实现利用了能够匹配 64 位性能的 SIMD。老实说,我自己的 memcpy 比原生的快得多,这让我感到震惊,当然 32 位 libc 构建肯定有问题。

32位memcpy测试结果

0x00100000 B, 0.034215 ms, 29227.06 MB/s (16384 iterations)
0x00200000 B, 0.033453 ms, 29892.56 MB/s ( 8192 iterations)
0x00300000 B, 0.048710 ms, 20529.48 MB/s ( 5461 iterations)
0x00400000 B, 0.049187 ms, 20330.54 MB/s ( 4096 iterations)
0x00500000 B, 0.058945 ms, 16965.01 MB/s ( 3276 iterations)
0x00600000 B, 0.060735 ms, 16465.01 MB/s ( 2730 iterations)
0x00700000 B, …
Run Code Online (Sandbox Code Playgroud)

c performance x86 memcpy amd-processor

5
推荐指数
1
解决办法
610
查看次数

我应该在AMD和英特尔芯片上运行我的回归测试程序吗?

现在我计划在32位,64位,Windows XP Home,Windows XP Pro,Windows Vista Home Basic,Windows Vista Ultimate,Windows 7 Home Basic和Windows 7 Ultimate上进行测试......所有这些都包含最新的服务包.

但是,现在我想知道是否值得对AMD和英特尔进行上述所有列出的场景测试,还是浪费时间?

注意:这是日常普通用户的安全应用程序.

code-coverage intel regression-testing amd-processor

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

OpenCL:奇怪的内核行为

因此,我正在试着让一些代码在OpenCL中运行.

由于我没有得到最初的预期结果,我一直在尝试各种方法来弄清楚出了什么问题.所以我想出了下面附带的代码,并且在成功执行后它没有产生预期的结果.

此代码的最初愿景是执行指定数量的线程并将线程号复制到数组中.

Threads: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Run Code Online (Sandbox Code Playgroud)

然而,我得到的结果.

Threads: 0 0 0 3 0 0 0 7 0 0 0 11 0 0 0 15
Run Code Online (Sandbox Code Playgroud)

结果我得到了他们的模式.所以每一个

(n % 4)
Run Code Online (Sandbox Code Playgroud)

它似乎在我的数组中放了一个数字.我开始考虑是否由于某种原因将代码视为int并转换为char.

操作系统: - (雪豹)

gcc main.c -o threadsopencl -std=c99 -framework OpenCL



#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include <CL/cl.h>
#endif

#include <stdlib.h>     // warning: implicit declaration of function ‘malloc’
#include <stdio.h>      // …
Run Code Online (Sandbox Code Playgroud)

c gpu gpgpu opencl amd-processor

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

英特尔 TSX 前缀是否作为 NOP 在 AMD 上(安全)执行?

我有一个在 Intel 和 AMD x86 机器上运行的应用程序的 MASM 同步代码。

我想使用 Intel TSX 前缀来增强它,特别是 XACQUIRE 和 XRELEASE。

如果我为 Intel 正确修改了我的代码,当我尝试在 AMD 机器上运行它时会发生什么?英特尔表示,它们被设计为向后兼容,这大概意味着它们在没有 TSX 的英特尔 CPU 上什么都不做。

我知道 AMD 还没有实施 TSX。但是这些前缀在 AMD CPU 上运行是否安全?这种行为是否记录在 AMD 手册中的某处,还是假设这是安全的并且永远是安全的?

x86 assembly backwards-compatibility amd-processor intel-tsx

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

了解较长代码执行速度提高 4 倍的微架构原因(AMD Zen 2 架构)

我在 x64 模式下使用 VS 2019(版本 16.8.6)编译了以下 C++17 代码:

struct __declspec(align(16)) Vec2f { float v[2]; };
struct __declspec(align(16)) Vec4f { float v[4]; };

static constexpr std::uint64_t N = 100'000'000ull;

const Vec2f p{};
Vec4f acc{};

// Using virtual method:
for (std::uint64_t i = 0; i < N; ++i)
    acc += foo->eval(p);

// Using function pointer:
for (std::uint64_t i = 0; i < N; ++i)
    acc += eval_fn(p);
Run Code Online (Sandbox Code Playgroud)

在第一个循环中,foo是一个std::shared_ptreval()是一个虚方法:

__declspec(noinline) virtual Vec4f eval(const Vec2f& p) const noexcept …
Run Code Online (Sandbox Code Playgroud)

c++ x86 assembly cpu-architecture amd-processor

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