私は _mm512_cvt_roundpd_epi64 を使用していますが、次のようなコンパイラ エラーが発生し続けています。
/dump/1/alicpp2/built/gcc-7.3.0-7u2/gcc-7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/include/avx512dqintrin.h:1574:14: エラー: 不適切な丸めオペランド __R);
これが私のコードです:
#include <iostream>
#include <immintrin.h>
void Date64Align(int64_t* dst, int64_t* src, size_t length) {
constexpr int dop = 512 / 64;
int64_t starting_epoch_milliseconds_ = 1513728000;
int32_t granularity_milliseconds_ = 3600;
__m512i start = _mm512_set1_epi64(starting_epoch_milliseconds_);
__m512i granularity = _mm512_set1_epi64(granularity_milliseconds_);
double temp = (double)granularity_milliseconds_;
__m512d granularity_double = _mm512_set1_pd(temp);
for (int i = 0; i < length / dop; ++i) {
// load the src (load X into SIMD register
__m512i data = _mm512_load_epi64(src);
// X - starting_epoch_milliseconds_
data = _mm512_sub_epi64(data, start);
// convert X to double
__m512d double_data;
double_data = _mm512_cvt_roundepi64_pd(data, _MM_FROUND_TO_NEAREST_INT);
// X = X / Y in double
double_data = _mm512_div_pd(double_data, granularity_double);
// Convert X to int64
data = _mm512_cvt_roundpd_epi64(double_data, _MM_FROUND_NO_EXC);
data = _mm512_mullo_epi64(data, granularity);
// store X
_mm512_store_epi64(dst, data);
src += dop;
dst += dop;
}
}
int main() {
return 0;
}
そして私のCMakeFileLists.txt:
cmake_minimum_required(VERSION 3.11)
project(untitled3)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb -msse4.2 -mavx512f -
mavx512dq")
add_executable(untitled3 main.cpp)
AVX512 ライブラリに精通していて、私の質問に答えてくれる人はいますか?