как добавить target_feature и включить поддержку avx2 в языке rust?
Пишу для себя реализацию игры в жизнь, хочу использовать инструкции avx2 для ускорения вычислений, однако не могу понять, как включить поддержку avx2. Беру пример из документации:
#[cfg(
all(
any(target_arch = "x86", target_arch = "x86_64"),
target_feature = "avx2"
)
)]
fn foo() {
#[cfg(target_arch = "x86")]
use std::arch::x86::_mm256_add_epi64;
#[cfg(target_arch = "x86_64")]
use std::arch::x86_64::_mm256_add_epi64;
unsafe {
//_mm256_add_epi64(...); // Мой код будет допустим здесь
}
}
Однако rust-analyzer выдает вот такое:
И при компиляции данная функция просто не генерируется. Как добавить targer_feature=avx2?
Текущая конфигурация rustc cfg выглядит так:
PS C:\Users\artur\rustProjects\life> rustc --print=cfg
debug_assertions
panic="unwind"
target_arch="x86_64"
target_endian="little"
target_env="gnu"
target_family="windows"
target_feature="fxsr"
target_feature="sse"
target_feature="sse2"
target_has_atomic="16"
target_has_atomic="32"
target_has_atomic="64"
target_has_atomic="8"
target_has_atomic="ptr"
target_os="windows"
target_pointer_width="64"
target_vendor="pc"
windows
А текущий target триплет это x86_64-pc-windows-gnu
Как мне включить возможность использования avx2 для моего проекта?
Ответы (1 шт):
Разобрался сам. Добавил в .cargo/config.toml:
.cargo/config.toml
[build]
rustflags = "-C target-feature=+avx2,+avx"
target = ["x86_64-pc-windows-gnu"]
Так же важно: нужный мне функционал работает только в nightly версии rust. Поэтому пришлось перейти на нее.
target Пришлось указать, потому что после перехода в nightly rust вместо gnu проект начал компилироваться на msvc, вместо MinGW, так что пришлось указать целевой триплет в config.toml