Pagini recente » Cod sursa (job #1408979) | Cod sursa (job #2026547) | Cod sursa (job #2921753) | Cod sursa (job #97069) | Cod sursa (job #1594891)
///!!! Prefetch Test !!!
#include <fstream>
using namespace std;
ifstream f("triplete.in");
ofstream g("triplete.out");
int N,M,i,j,r;
unsigned int a[4100][150];//b[4100][150];
int x[67000],y[67000],c[4100];
int main()
{
f>>N>>M;
for(i=1;i<=4096;++i)
c[i]=1<<(i&31);
while(M--)
{
f>>x[M]>>y[M];if(x[M]>y[M])swap(x[M],y[M]);
a[x[M]][y[M]>>5]|=c[y[M]];
//b[y[M]][x[M]>>5]|=(1<<(x[M]&31));
}
for(i=0;x[i];++i)
{
__builtin_prefetch (&x[i+1], 0, 3);
__builtin_prefetch (&y[i+1], 0, 3);
__builtin_prefetch (&x[i+2], 0, 3);
__builtin_prefetch (&y[i+2], 0, 3);
for(j=0;(j<<5)<=N;++j)
{
r+=__builtin_popcount(a[x[i]][j]&a[y[i]][j]);
__builtin_prefetch (&a[x[i]][j+2], 0, 0);
__builtin_prefetch (&a[y[i]][j+2], 0, 0);
__builtin_prefetch (&a[x[i]][j+3], 0, 0);
__builtin_prefetch (&a[y[i]][j+3], 0, 0);
__builtin_prefetch (&a[x[i]][j+4], 0, 0);
__builtin_prefetch (&a[y[i]][j+4], 0, 0);
}
}
g<<r;
return 0;
}