Блог пользователя removed1

Автор removed1, 16 лет назад, По-русски

По следам обсуждения

http://codeforces.me/comments/264#comment-3078

На c# умножаем две квадратных матрицы. В одном случае - каждая матрица хранится в массиве массивов, в другом - в двухмерном массиве.

[дисклеймер: эти измерения подобны измерению числа оборотов двигателя на холостом ходу, а не средней скорости автомобиля в условиях гонки, и т.п., проводились один раз и т.п.]

Я взял код maslowmw, изменил size на 500, убрал распечатку времени (что дает несущественную разницу) и понес гонять его в Topcoder Practice Room. К моему удивлению, действительно в той версии дотнета, что установлена на топкодере, двухмерный массив оказался медленнее массива массивов. Меня это заинтересовало и я решил провести измерения других вариантов. Вот они, а выводы делайте сами.

c#:
[i][j]: 1.328s 

[i][j]: 1.156s % size = const int
[i,j]: 1.516s
[i*size+j]: 0.875s

[i*size+j]:  0.703s % size = const int

c++:
int [][]: 0.266s % const int, global
int **: 0.791s
[i*size+j]: 0.286s % where size = const int
[i*size+j]: 0.695s % where size = input parameter
vector<vector<int>> : 0.478s % where size = const int
vector<vector<int>> : 0.608s % where size = input parameter

java:
[i][j]: 1.927s
[i*size+j]: 1.306s

p.s. мэнтайнерам сайта: создайте FAQ по оформлению. и еще, при переходе из почты по ссылке на русский коммент, а активен английский, то коммент разумеется не видно, что запутывает.


  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Спасибо за ссылку, интересно.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Можно увеличить скорость, сделав цикл по j самым внутренним. В этом случае время для c++ int [][] будет 0.205. Впрочем, пропорции наверное останутся прежними.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
странный ваш тест..и притом совсем неправдоподобный...попробуйте замерять настоящее время, т.е. там где происходит всё это суммирование. У меня на компе при таком тестировании Java проигрывает не более чем на 25 %.
  • 16 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    О том, что такая проверка нестрогая, я предупредил с самого начала.

    И умышленно тестировал именно на топкодере, чтобы никаких "А У МЕНЯ, А У МЕНЯ" не возникало.

16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
А теперь переключи компилятор С++ на релиз.. :)