@@ -283,8 +283,10 @@ class HierarchicalNSW : public AlgorithmInterface<dist_t> {
283
283
// if (candidate_id == 0) continue;
284
284
#ifdef USE_SSE
285
285
#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
+ }
288
290
#endif
289
291
#endif
290
292
if (visited_array[candidate_id] == visited_array_tag) continue ;
@@ -393,9 +395,11 @@ class HierarchicalNSW : public AlgorithmInterface<dist_t> {
393
395
// if (candidate_id == 0) continue;
394
396
#ifdef USE_SSE
395
397
#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
+ }
399
403
#endif
400
404
#endif
401
405
if (!(visited_array[candidate_id] == visited_array_tag)) {
@@ -1126,7 +1130,9 @@ class HierarchicalNSW : public AlgorithmInterface<dist_t> {
1126
1130
for (int i = 0 ; i < size; i++) {
1127
1131
#ifdef USE_SSE
1128
1132
#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
+ }
1130
1136
#endif
1131
1137
#endif
1132
1138
tableint cand = datal[i];
0 commit comments