MICにデータ構造をオフロードするときに問題が発生します。私は、次のディレクティブをMICにオフロードしていますMIC(Xeon Phi)にロードされたエラーがロードされたアレイを反復するエラー
:
#pragma offload target(mic:mic_no)\
inout(is_selected : length(query_sequences_count)ALLOC)\
in(a:length(a_size) ALLOC)\
in(a_disp:length(offload_db_count)ALLOC)
しかし、私はオフロード領域内で実行しようとした場合:
//loads next 64 characters of a into datadb
__m512i datadb __attribute__ ((aligned(64)));
datadb = _mm512_load_epi32(a+iter_db+a_disp[j]);
これは、次のエラーが発生します。
Offload error:process on the device 0 was terminated by signal 11(SIGSEGV)
しかし、代わりに、次のような別の配列にaの内容をコピーすると:
char db[64];
for(window_db_iter = 0; window_db_iter < 64; window_db_iter++)
db[window_db_iter] = *(a+iter_db+a_disp[j]+window_db_iter);
//Now this works fine
datadb = _mm512_load_epi32(db);
正しい長さのオフロードであることを確認しました.a_sizeはaのサイズで、a_dispも正しいことを確認しました。また、a+iter_db+a_disp[j]
は常にメモリの境界内にとどまります。私の推測は、メモリをMICにコピーするプロセスと関係していると思います。何か案は?
ありがとうございます!