我按顺序生成一个数字,然后在一个永不改变的数组中查找。因此,如果这个数组如何停留在生成的线程缓存中会很方便。
unsigned int unordered_set[65535];
void init_set( unsigned int *a) {
...
}
unsigned int generate_number() {
...
}
unsigned int find_number(unsigned int a) {
unsigned int result=0;
#pragma omp parallel for
for(unsigned int i=0; i<65535;i++) {
if (unordered_set[i]==a)
result=i;
}
return result
}
void main() {
unsigned int x;
/* Fill the array with unique numbers */
init_set(unordered_set);
while(x>0) {
/*This loop can only be done sequentially */
x=generate_number();
unsigned int r=find_number(x);
if (r>0)
printf ("Found: %d %d",x,r);
}
}
我想这在上面的代码中永远不会发生。每次调用find_number时,数组unordered_set会一次又一次地加载到线程缓存中。可以做些什么来确保数组保持在缓存中?