活动发起人@小虚竹 想对你说:
这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请你参加为期14天的创作挑战赛!
提醒:在发布作品前,请将不需要的内容删除。
深入分析:Ping-Pong实现为什么性能反而下降?
一、代码中的Ping-Pong实现分析
你的代码确实实现了基本的Ping-Pong缓冲结构,但存在几个关键问题:
1.1 缓冲区切换逻辑分析
memcpy(pBuff[current_buf], rd_rio_transfer.user_mmap_handle[0], mats_sz);
current_buf = (current_buf + 1) % 2;
- 正确点:使用了两个缓冲区并通过
current_buf索引进行切换 - 问题点:切换时机不明确,没有缓冲区状态管理(哪个正在被读/写)
1.2 数据流分析
rio_lower_dma_transfer(
mport_fd,
target_destid,
pBuff[(current_buf + 1) % 2], // 使用另一缓冲区
mats_sz,
rio_base_addr);
- 正确点:发送时使用了另一个缓冲区
- 问题点:没有确保接收缓冲区已完成填充
1.3 内存管理
if (posix_memalign((void**)&pBuff[0], 64, mats_sz) != 0 ||
posix_memalign((void**)&pBuff[1], 64, mats_sz) != 0)
- 正确点:内存对齐处理得当(64字节对齐)
- 问题点:缓冲区大小固定为256字节,可能不适合实际数据量
二、为什么性能反而下降?
2.1 主要性能瓶颈
-
不必要的内存拷贝:
memcpy(pBuff[current_buf], rd_rio_transfer.user_mmap_handle[0

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



