【发布时间】:2018-08-11 05:00:55
【问题描述】:
我发现 _mm256_log_ps 不能与 GCC7 一起使用。关于 stackoverflow 的最常见建议是使用 ICC 或利用 OpenCL SDK。
下载SDK并解压RPM文件后,有3个.so文件:__ocl_svml_l9.so、__ocl_svml_e9.so、__ocl_svml_h8.so
有人可以教我如何使用这些 .so 文件调用 _mm256_log_ps 吗?
谢谢。
【问题讨论】:
-
如果您的计算可以在 GPU 上高效完成,请使用 OpenCL。如果您只想要一个 AVX2
log函数,请使用现有的实现,它可以为您提供所需的速度/准确性权衡。例如How many clock cycles does cost AVX/SSE exponentiation on modern x86_64 CPU? 有一些库可能具有矢量化的全精度版本,包括 glibclibmvec。但为了更快的低精度,请参阅Efficient implementation of log2(__m256d) in AVX2(我的回答提到浮点数和双精度数) -
相关:Fastest Implementation of Exponential Function Using AVX 对
exp有一个快速近似实现 floatexpfor__m256。 -
@PeterCordes 感谢您提供信息。实际上我已经尝试过 avx_mathfun.h 但是
log256_ps在 log(N -
我也尝试使用
-lmvec -lm。它将编译但在运行时中止并显示找不到_ZGVeN16v___expf_finite -
啊,是的,处理极端情况(或不处理)是另一个领域是另一个权衡。如果您的用例从来没有负输入,您甚至不需要检查它们,从而使其更快。然后因为你在做位黑客,有一个问题是你是否只看符号位,并将
-0.0与负数混为一谈,或者你是否将其视为 IEEE 比较完全等于+0.0并返回-Inf。您似乎真的想调用一个实际的库函数,而不是仅仅选择一个可以内联并且不会浪费时间做任何您不想要的事情的自定义实现。