pokrenem C# program i njemu je trebalo 56 sekundi da sve to izracuna,
Mono 3 minuta i 35 sekundi
Javi treba 21-26 sekundi ( u zavisnosti da li pokrenem kao client ili server ili pod Vistom ili linux-om),
gcc (4.1.2) bez optimizacije 1 minut i 50 sec,
gcc -O2 17 sec, sve to pokrecem na AMD 5000+.
Pa se pitam u cemu je fazon da .NJET to tako sporo radi , da nema mozda neki turbo switch posto java vise nego duplo brze mnozi matrice.
using System;
namespace Proba
{
class Program
{
static private int SIZE = 100;
static void Main(string[] args)
{
DateTime d1 = DateTime.Now;
for (int i = 0; i < 10; i++)
{
test();
}
DateTime d2 = DateTime.Now;
TimeSpan t1 = d2 - d1;
System.Console.WriteLine(t1.ToString());
}
public static void test()
{
int n = 1000;
int [,]m1 = mkmatrix(SIZE, SIZE);
int [,]m2 = mkmatrix(SIZE, SIZE);
int [,]mm = new int[SIZE,SIZE];
for (int i = 0; i < n; i++) {
mmult(SIZE, SIZE, m1, m2, mm);
}
}
public static int[,] mkmatrix(int rows, int cols) {
int count = 1;
int[,] m = new int[rows, cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
m[i,j] = count++;
}
}
return (m);
}
public static void mmult(int rows, int cols, int[,] m1, int[,] m2,
int[,] m3)
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
int val = 0;
for (int k = 0; k < cols; k++)
{
val += m1[i,k] * m2[k,j];
}
m3[i,j] = val;
}
}
}
}
}
public class MatMult {
static int SIZE = 100;
public static void main(String args[]) {
long t1 = System.currentTimeMillis();
for (int i = 1; i < 10; i++)
test();
System.out.println(System.currentTimeMillis() - t1);
}
public static void test() {
int n = 1000;
int m1[][] = mkmatrix(SIZE, SIZE);
int m2[][] = mkmatrix(SIZE, SIZE);
int mm[][] = new int[SIZE][SIZE];
for (int i = 0; i < n; i++) {
mmult(SIZE, SIZE, m1, m2, mm);
}
}
public static int[][] mkmatrix(int rows, int cols) {
int count = 1;
int m[][] = new int[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
m[i][j] = count++;
}
}
return (m);
}
public static void mmult(int rows, int cols, int[][] m1, int[][] m2,
int[][] m3) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
int val = 0;
for (int k = 0; k < cols; k++) {
val += m1[i][k] * m2[k][j];
}
m3[i][j] = val;
}
}
}
}