Skip to content
  • Francisco Jerez's avatar
    intel/fs/bank_conflicts: Use posix_memalign() instead of overaligned new to obtain vector storage. · 1aa79d5e
    Francisco Jerez authored
    The weight_vector_type constructor was inadvertently assuming C++17
    semantics of the new operator applied on a type with alignment
    requirement greater than the largest fundamental alignment.
    Unfortunately on earlier C++ dialects the implementation was allowed
    to raise an allocation failure when the alignment requirement of the
    allocated type was unsupported, in an implementation-defined fashion.
    It's expected that a C++ implementation recent enough to implement
    P0035R4 would have honored allocation requests for such over-aligned
    types even if the C++17 dialect wasn't active, which is likely the
    reason why this problem wasn't caught by our CI system.
    
    A more elegant fix would involve wrapping the __SSE2__ block in a
    '__cpp_aligned_new >= 201606' preprocessor conditional and continue
    taking advantage of the language feature, but that would yield lower
    compile-time performance on old compilers not implementing it
    (e.g. GCC versions older than 7.0).
    
    Fixes: af2c3201 "intel/fs: Implement GRF bank conflict mitigation pass."
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104226
    
    
    Reported-by: default avatarJózef Kucia <joseph.kucia@gmail.com>
    Reviewed-by: default avatarIan Romanick <ian.d.romanick@intel.com>
    1aa79d5e