R 言語では、列優先の配列が使用されます。for ループの順序を変更すると、パフォーマンスが向上します。このようにすると、より連続した形でメモリにアクセスできるため、CPU キャッシュの利点が得られます。
for(y in 1:dim) //outer is y now
{
for(x in 1:dim) //now x is count inside
{
matrix[x,y]=exp(-entrywise.norm(data[,x]-data[,y],2))
}
}
あなたの「マトリックス」は2D配列ですよね?
さらに速度が必要な場合は、内部ループの一部をアンロールして、CPU の分岐負荷を減らし、キャッシング/プリフェッチを改善できます。
for(y in 1:dim)
{
for(x in 1:(dim/8)) //lets imagine dimension is a multiple of 8
{
matrix[x,y]=exp(-entrywise.norm(data[,x]-data[,y],2))
matrix[x+1,y]=exp(-entrywise.norm(data[,x+1]-data[,y],2))
matrix[x+2,y]=exp(-entrywise.norm(data[,x+2]-data[,y],2))
matrix[x+3,y]=exp(-entrywise.norm(data[,x+3]-data[,y],2))
matrix[x+4,y]=exp(-entrywise.norm(data[,x+4]-data[,y],2))
matrix[x+5,y]=exp(-entrywise.norm(data[,x+5]-data[,y],2))
matrix[x+6,y]=exp(-entrywise.norm(data[,x+6]-data[,y],2))
matrix[x+7,y]=exp(-entrywise.norm(data[,x+7]-data[,y],2))
}
}