Questions tagged «simd»

12
如何使用SSE4.2和AVX指令编译Tensorflow?
这是从运行脚本以检查Tensorflow是否正常运行时收到的消息: I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so.5 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use …


8
将64位整数中的压缩8位整数并行减1,SWAR不带硬件SIMD
如果我有一个64位整数,那么我会将其解释为具有8个元素的打包8位整数数组。我需要1在处理溢出时从每个压缩整数中减去常数,而一个元素的结果不会影响另一个元素的结果。 我现在有这段代码,它可以工作,但是我需要一个解决方案,它可以并行地对每个压缩的8位整数进行减法,并且不进行内存访问。在x86上,我可以使用类似的SIMD指令psubb,以并行方式减去打包的8位整数,但是我正在编码的平台不支持SIMD指令。(在这种情况下为RISC-V)。 因此,我正在尝试执行SWAR(寄存器中的SIMD)以手动取消a的字节之间的进位传播uint64_t,从而执行以下操作: uint64_t sub(uint64_t arg) { uint8_t* packed = (uint8_t*) &arg; for (size_t i = 0; i < sizeof(uint64_t); ++i) { packed[i] -= 1; } return arg; } 我认为您可以使用按位运算符来执行此操作,但我不确定。我正在寻找不使用SIMD指令的解决方案。我正在寻找一种可移植的C或C ++解决方案,或者只是其背后的理论,以便我可以实现自己的解决方案。
77 c++  c  bit-manipulation  simd  swar 

1
使std :: vector分配内存的现代方法
在以下问题是相关的,但答案是旧的,并且从用户评论马克Glisse表明有因为C ++ 17的新方法这个问题可能没有得到充分讨论。 我正在尝试使对齐的内存对于SIMD正常工作,同时仍然可以访问所有数据。 在Intel上,如果创建类型为float的向量__m256,并将大小减小8倍,则会使内存对齐。 例如 std::vector<__m256> mvec_a((N*M)/8); 以一种有点怪异的方式,我可以将指向矢量元素的指针强制转换为float,这使我可以访问各个float值。 取而代之的是,我希望具有一个std::vector<float>正确对齐的,因此可以在__m256不进行段错误的情况下加载到其他SIMD类型中。 我一直在研究aligned_alloc。 这可以给我一个正确对齐的C样式数组: auto align_sz = static_cast<std::size_t> (32); float* marr_a = (float*)aligned_alloc(align_sz, N*M*sizeof(float)); 但是我不确定如何执行此操作std::vector<float>。赋予std::vector<float>所有权marr_a 似乎是不可能的。 我已经看到一些建议,我应该编写一个自定义分配器,但这似乎需要大量工作,也许对于现代C ++,有更好的方法吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.