Eigen 内存对齐

https://eigen.tuxfamily.org/dox/group__TopicStlContainers.html
这个上面已经说的很清楚了,如果使用现代c++特性,对齐问题无需考虑


https://cloud.tencent.com/developer/article/1631792
最后那道题目,如果是两个char, 那么占用的字节数是2.
如果是一个char,一个int,占用的字节数是 8.

In [c++17], this macro is empty.
http://eigen.tuxfamily.org/dox/group__TopicStructHavingEigenMembers.html

http://library.isr.ist.utl.pt/docs/roswiki/eigen(2f)Troubleshooting.html


https://zhuanlan.zhihu.com/p/93824687
验证0x7ffeef431ef0 除以 0x20的确不能被整除,之前有一个误解,以为内存对齐是看变量地址的差值,实际上就直接看每个变量的首地址即可。不用求差,方便很多
使用了__attribute__ ((aligned (32))) double input1[4] = {1, 1, 1, 1}之后,0x7ffc5ca2e640/0x20=0x3FFE2E51732其地址可以被32整除了

Eigen::aligned_allocator的使用,分别使用c++98和c++17进行测试

C++ versionCodeAddress16字节对齐
C++ 98std::vector<Eigen::Vector4f > c0x7ffd071f4e28No
C++ 98std::vector<Eigen::Vector3f, Eigen::aligned_allocator<Eigen::Vector3f > > c0x7ffd397b3cb0Yes
C++ 17std::vector<Eigen::Vector4f > c0x7ffd46101478No
C++ 17std::vector<Eigen::Vector3f, Eigen::aligned_allocator<Eigen::Vector3f > > c0x7ffd46101480Yes

(判断是否16字节对齐,只要用地址除以0x10即可) 使用字节对齐,只有两个坏处,每一处使用需要使用标记+会浪费一点内存空间。 并没有出现eigen官网中出现的自动对齐的情况,说明我的Eigen库并没有那么新。所以保险起见,应该还是要加上的。


查看eigen是否使用了向量化
https://eigen.tuxfamily.org/index.php?title=FAQ#Vectorization
对于这一段代码:

EIGEN_ASM_COMMENT("begin");
u = v + w;
EIGEN_ASM_COMMENT("end");

对应的汇编代码:

	movaps	(%rdx), %xmm0
	addps	(%rsi), %xmm0
	movaps	%xmm0, (%rdi)

当使用vector3f的时候,不管对不对齐,其对应的汇编代码均为:

	movq	32(%rsp), %rax
	movss	(%rax), %xmm0
	addss	12(%rax), %xmm0
	movss	%xmm0, 60(%rsp)
	movss	4(%rax), %xmm0
	addss	16(%rax), %xmm0
	movss	%xmm0, 64(%rsp)
	movss	8(%rax), %xmm0
	addss	20(%rax), %xmm0
	movss	%xmm0, 68(%rsp)

也就是说,Vector3f也是使用了SSE加速的。只不过更复杂,验证一下,假设用同样的次数,Vector4f的是不是要比Vector3f要快。验证结论:

uint64_t test_time = 1e17
vec3f cost time 554.156 ms
vec4f cost time 345.562 ms

实际上,加了Eigen::aligned_allocatorEigen::Vector3f 并没有什么用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手持电烙铁的侠客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值