任何人都可以给出一个示例或链接到一个__builtin_prefetch在GCC 中使用的示例(或者通常只是asm指令prefetcht0)以获得实质性的性能优势吗?特别是,我希望这个例子符合以下标准:
__builtin_prefetch指令会导致性能下降.__builtin_prefetch用相应的内存访问替换指令会导致性能下降.也就是说,我想要最简短的示例,显示__builtin_prefetch执行无需管理就无法管理的优化.
我正在尝试找到RGB8到RGB32图像转换的汇编优化方法.
Source是8位灰度图像,Destination应该是32位灰度图像(BGRA),第4通道(alpha)可以忽略.源地址不保证16字节对齐,Count是16的倍数,目标地址是16字节对齐.
这是我的优化汇编代码.是否有更快的转换方式?
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)