C ++-将所有分配的双精度数组对齐为32个字节

时间:2019-06-28 13:30:04

标签: c++ arrays alignment new-operator avx

我有一个很大的代码,我想通过AVX指令优化某些操作。根据我的测试,改进应该达到4倍。

但是,代码使用带有新运算符的普通旧数组(没有std :: vector)。

double * tmp = new double[size];

问题是,对于AVX,我需要将所有双精度数组都对齐到32字节边界。解决方案是用new(或MSVC中的aligned_alloc)替换所有_aligned_malloc,并用适当的版本替换发布功能。问题是我必须遍历所有代码并找到所有new,希望不要忘记一个,将来每个人都不要忘记使用对齐的定位器。

还有其他方法吗?我曾考虑过仅对new重载double运算符,但是我不确定这是否是正确的方法,如果是,那么如何正确/安全地执行此操作。

由于某些将数组作为输入参数的外部纯C语言库,因此无法使用对齐的定位器切换到std::vector

1 个答案:

答案 0 :(得分:4)

还有其他方法吗?是的,from django_filters import FilterSet from polls.models import Question, Choice from django_filters import rest_framework class ChoiceFilter(FilterSet): for field in Choice._meta.get_fields(): field = rest_framework.CharFilter(lookup_expr='icontains') #question = rest_framework.CharFilter(lookup_expr='icontains') #this works want to generalize this class Meta: model = Choice fields = '__all__' _mm_loadu_*,其中_mm_storeu_*代表未对齐。