相关疑难解决方法(0)

预取示例?

任何人都可以给出一个示例或链接到一个__builtin_prefetch在GCC 中使用的示例(或者通常只是asm指令prefetcht0)以获得实质性的性能优势吗?特别是,我希望这个例子符合以下标准:

  1. 这是一个简单,小巧,独立的例子.
  2. 删除__builtin_prefetch指令会导致性能下降.
  3. __builtin_prefetch用相应的内存访问替换指令会导致性能下降.

也就是说,我想要最简短的示例,显示__builtin_prefetch执行无需管理就无法管理的优化.

optimization assembly gcc prefetch

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

更快的装配优化方式在RGB8和RGB32图像之间进行转换

我正在尝试找到RGB8到RGB32图像转换的汇编优化方法.

Source是8位灰度图像,Destination应该是32位灰度图像(BGRA),第4通道(alpha)可以忽略.源地址不保证16字节对齐,Count是16的倍数,目标地址是16字节对齐.

  • INPUT:8位单通道灰度图像
  • 输出:32位BGRA(忽略alpha通道)
  • COUNT:图像大小是16的倍数
  • CPU:x86-32(允许SSE2/SSE3)

这是我的优化汇编代码.是否有更快的转换方式?

void ConvertGreyToRgb32Assembler(__m128i* Source, __m128i* Destination, unsigned int Count) {
    static unsigned int __declspec(align(64)) Masks[] = {
        0x80000000, 0x80010101, 0x80020202, 0x80030303,
        0x80040404, 0x80050505, 0x80060606, 0x80070707,
        0x80080808, 0x80090909, 0x800a0a0a, 0x800b0b0b,
        0x800c0c0c, 0x800d0d0d, 0x800e0e0e, 0x800f0f0f
    };

    __asm {
        mov esi, Source
        mov edi, Destination
        mov edx, Count
        xor ecx, ecx
        movdqa xmm4, xmmword ptr [Masks + 0]
        movdqa xmm5, xmmword ptr [Masks + 16]
        movdqa xmm6, xmmword ptr [Masks + 32]
        movdqa xmm7, xmmword ptr [Masks …
Run Code Online (Sandbox Code Playgroud)

optimization x86 assembly sse visual-c++

8
推荐指数
1
解决办法
3135
查看次数

标签 统计

assembly ×2

optimization ×2

gcc ×1

prefetch ×1

sse ×1

visual-c++ ×1

x86 ×1