我有以下代码段,它是应用程序中的热点。由于for
矢量相关性,循环未矢量化。有没有办法重写这个循环以使其运行得更快。
#define NUM_KEYS (1L << 20)
#define NUM_BUCKETS (1L << 10)
int i,k;
int shift = (1L << 11);
int key_array[NUM_KEYS],key_buff[NUM_KEYS];
int bucket_ptrs[NUM_BUCKETS];
for( i=0; i<NUM_KEYS; i++ )
{
k = key_array[i];
key_buff[bucket_ptrs[k >> shift]++] = k;
}
我尝试的一种方法是创建一个临时数组来保存key_array
.
for( i=0; i<NUM_KEYS; i++ )
{
key_arrays[i] = key_array[i] >> shift;
}
for( i=0; i<NUM_KEYS; i++ )
{
k = key_array[i];
j = key_arrays[i];
key_buff[bucket_ptrs[j]++] = k;
}
在这里,第一个循环被矢量化。但总体来说性能并没有什么提升。