大佬教程收集整理的这篇文章主要介绍了c – 从阵列中对特定短路模式进行矢量化提取,并插入新阵列,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
白色的值被丢弃.我的数组大小总是2的幂.这是模糊的想法,未实现:
unsigned short size = 1 << 8; unsigned short* data = new unsigned short[size]; ... unsigned short* newdata = new unsigned short[size >>= 1]; unsigned int* uintdata = (unsigned int*) data; unsigned int* uintnewdata = (unsigned int*) newdata; for (unsigned short uintsize = size >> 1,i = 0; i < uintsize; ++i) { uintnewdata[i] = (uintdata[i * 2] & 0xFFFF0000) | (uintdata[(i * 2) + 1] & 0x0000FFFF); }
我开始时有这样的事情:
static const __m128i startmask128 = _mm_setr_epi32(0xFFFF0000,0x00000000,0xFFFF0000,0x00000000); static const __m128i endmask128 = _mm_setr_epi32(0x00000000,0x0000FFFF,0x0000FFFF); __m128i* data128 = (__m128i*) data; __m128i* newdata128 = (__m128i*) newdata;
我可以用掩码迭代地执行_mm_and_si128以获取我正在寻找的值,与_mm_or_si128结合,并将结果放在Newdata128 [i]中.但是,我不知道如何将“压缩”在一起并删除白色的值.似乎我能做到这一点,我根本不需要面具.
怎么办?
无论如何,最终我也想要做与此操作相反的操作,并创建一个两倍大小的新数组并在其中展开当前值.
我还将在白色块中插入新值,我必须迭代地使用原始数据中的每对短路来计算.此计算不可矢量化,但结果值的插入应该是.我怎样才能将当前值“展开”到新数组中,插入计算值的最佳方法是什么?我应该为每个128位迭代计算它们并将它们放入它们自己的临时块(64位?128位?),然后做一些大量插入的东西?或者它们应该直接放入我的目标__m128i,因为看起来成本应该相当于放入一个临时值?如果是这样,怎么能在不搞乱我的其他价值的情况下做到这一点?
我最喜欢使用SSE2操作.
以上是大佬教程为你收集整理的c – 从阵列中对特定短路模式进行矢量化提取,并插入新阵列全部内容,希望文章能够帮你解决c – 从阵列中对特定短路模式进行矢量化提取,并插入新阵列所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。