@@ -283,8 +283,10 @@ class HierarchicalNSW : public AlgorithmInterface<dist_t> {
283283// if (candidate_id == 0) continue;
284284#ifdef USE_SSE
285285#if HNSWLIB_USE_PREFETCH
286- _mm_prefetch ((char *) (visited_array + *(datal + j + 1 )), _MM_HINT_T0);
287- _mm_prefetch (getDataByInternalId (*(datal + j + 1 )), _MM_HINT_T0);
286+ if (j + 1 < size) {
287+ _mm_prefetch ((char *) (visited_array + *(datal + j + 1 )), _MM_HINT_T0);
288+ _mm_prefetch (getDataByInternalId (*(datal + j + 1 )), _MM_HINT_T0);
289+ }
288290#endif
289291#endif
290292 if (visited_array[candidate_id] == visited_array_tag) continue ;
@@ -393,9 +395,11 @@ class HierarchicalNSW : public AlgorithmInterface<dist_t> {
393395// if (candidate_id == 0) continue;
394396#ifdef USE_SSE
395397#if HNSWLIB_USE_PREFETCH
396- _mm_prefetch ((char *) (visited_array + *(data + j + 1 )), _MM_HINT_T0);
397- _mm_prefetch (data_level0_memory_ + (*(data + j + 1 )) * size_data_per_element_ + offsetData_,
398- _MM_HINT_T0); // //////////
398+ if (j + 1 < size) {
399+ _mm_prefetch ((char *) (visited_array + *(data + j + 1 )), _MM_HINT_T0);
400+ _mm_prefetch (data_level0_memory_ + (*(data + j + 1 )) * size_data_per_element_ + offsetData_,
401+ _MM_HINT_T0);
402+ }
399403#endif
400404#endif
401405 if (!(visited_array[candidate_id] == visited_array_tag)) {
@@ -1126,7 +1130,9 @@ class HierarchicalNSW : public AlgorithmInterface<dist_t> {
11261130 for (int i = 0 ; i < size; i++) {
11271131#ifdef USE_SSE
11281132#if HNSWLIB_USE_PREFETCH
1129- _mm_prefetch (getDataByInternalId (*(datal + i + 1 )), _MM_HINT_T0);
1133+ if (i + 1 < size) {
1134+ _mm_prefetch (getDataByInternalId (*(datal + i + 1 )), _MM_HINT_T0);
1135+ }
11301136#endif
11311137#endif
11321138 tableint cand = datal[i];
0 commit comments