【问题标题】:printf SSE variables __m128i in Visual Studio [duplicate]Visual Studio中的printf SSE变量__m128i [重复]
【发布时间】:2012-11-28 02:01:32
【问题描述】:

我有一些使用 SIMD 优化和各种 __m128i 变量的代码。显然, printf 无法处理它们。有没有一种简单的方法可以打印它们的内容? 我正在使用带有 C/C++ 的 Visual Studio 2010。

【问题讨论】:

  • 获取底部和上部为 int64_t 并打印它们?通过除以 1 直到 0,转换为 ASCII,然后反转字符串,将您自己的字符串转换为字符串?
  • 这绝对是我考虑过的一个选项。我希望有一个更简单的解决方案(尽管这并不难)。

标签: c visual-studio-2010 simd


【解决方案1】:

我根据弗拉德的方法找到了答案:

__m128i var;
 printf("0x%I64x%I64x\n",var.m128i_i64[1], var.m128i_i64[0]);

这会将整个 128 位值打印为十六进制字符串。

【讨论】:

    【解决方案2】:

    使用此功能打印它们:

    void print128_num(__m128i var)
    {
        uint16_t *val = (uint16_t*) &var;//can also use uint32_t instead of 16_t
        printf("Numerical: %i %i %i %i %i %i %i %i \n", 
               val[0], val[1], val[2], val[3], val[4], val[5], 
               val[6], val[7]);
    }
    

    在打印之前将 128 位拆分为 16 位(或 32 位)。

    如果您有 64 位支持,这是一种 64 位拆分和打印方式:

    void print128_num(__m128i var) 
    {
        int64_t *v64val = (int64_t*) &var;
        printf("%.16llx %.16llx\n", v64val[1], v64val[0]);
    }
    

    如果您想要int 输出,请将llx 替换为lld

    【讨论】:

    • printf("Numerical: %i %i %i %i %i %i %i %i \n", val[7], val[6], val[5], val[4], val[3], val[2], val[1], val[0]); 似乎更符合逻辑的打印顺序。
    猜你喜欢
    • 2012-04-10
    • 2018-01-01
    • 2015-04-18
    • 2023-04-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多