Великая битва 4х языков программирования на простейшей задачке
Приветсвую, булкомэны!
Думаю многие хотели бы сделать свой майнкрафт с ГСЧ и крупнопиксельными женщинами. И вот хотелось бы узнать на каком языке это лучше всего делать. Под лучше я понимаю два критерия: - эффективность работы программиста - эффективность работы программы Исходя из первого пункта всякие С/С++ были выкинуты из перечня возможных твердой рукой и без всякого сожаления. Objective C проваливает оба пункта и мы тоже с ним прощаемся. Оставшиеся кандидаты: .NET Framework Java Blitz3D PHP (ради лулзов) Erlang (ради эпичности) |
Ответ: Великая битва 4х языков программирования на простейшей задачке
Итак, задача:
выделяем трехмерный массив целых чисел 512х128х512 есть счетчик, целое число обходим массив, пишем в ячейку значение счетчика, увеличиваем счетчик на единицу. всё. Вот такая ерундовая задачка. На разных языках были написаны тесты. Спасибо таким товарищам: Romanzes'у за вариант на Java Phantom'у за вариант на PHP Randomize'у за вариант на BlitzMAX Все задачки тестировались на ноутбуке с такой конфигурацией: Core i3 2100MHz, 4Gb RAM, Win7 64bit. |
Ответ: Великая битва 4х языков программирования на простейшей задачке
Первым будем мерять производительность старичка Blitz3D, как наиболее близкого обитателям форума.
Код:
allocStart = MilliSecs() Результаты: время выделения памяти под массив: 327 мс время заполнения массива: 716 мс Ну, неплохо для начала. |
Ответ: Великая битва 4х языков программирования на простейшей задачке
теперь потестируем .NET 4 - технологию, отвечающую за скриптинг в движке Unity3D (это не совсем верно, т.к. в Unity используется Mono - аналог .NET Framework)
Код:
using System; время выделения массива: 0 мс время заполения: 187 мс Вот так, старичок Блиц нервно курит в стороне. Всё таки новые технологии явно лучше. Прямо проникаешься производительностью дотнета. |
Ответ: Великая битва 4х языков программирования на простейшей задачке
Следующим пунктом идет Java 7. Технология, стоящая за оригинальным Minecraft.
Код:
package bigarrayjava; время выделения памяти под массив: 265 мс время заполения массива: 41 мс Гордость и величие дотнета померкли и скукожились. Java выигрывает на заполнении массива в более чем 4 раза. Так и хочется спросить, Нотч, почему Майнкрафт так тормозит??? |
Ответ: Великая битва 4х языков программирования на простейшей задачке
|
Ответ: Великая битва 4х языков программирования на простейшей задачке
А у меня на блитз другой результат alloc 76 ms fill 1179 ms это плохо да?
естественно не сравнивая с .NET 4, может ещё что-то в памяти сидит. |
Ответ: Великая битва 4х языков программирования на простейшей задачке
ffinder, может объединить сообщения? Просто сейчас тут понафлудят и будут посты раскидны ажбы как.
|
Ответ: Великая битва 4х языков программирования на простейшей задачке
Настало время ЭПИЧНОЙ ЭПИЧНОСТИ!
На самом деле нет. Я так пошутил. В Эрланге нет изменяемых массивов. Массивы сделаны через деревья. И еще Эрланг это интерпретатор. Поэтому я не стал парится, и просто написал в консоли: Код:
{{StartMega, StartSecs, StartMicro}, VoxelData, {StopMega, StopSecs, StopMicro}} = {now(), [X || X <- lists:seq(0, 512*128*512)], now()}. А самые внимательные заметили, что в названии темы 4 языка, а в списке тестируемых - 5. Как же так? Просто PHP съел гигабайт памяти и вылетел не решив поставленную задачу:-D Вот так, двумя эпически громкими, кхм, ну, пусть будет раскатами грома, закончилась битва языков. |
Ответ: Великая битва 4х языков программирования на простейшей задачке
Вложений: 1
Мой тест на BlitzMax:
PHP код:
Fill: 258ms Машина для теста: AMD Athlon 1.81GHz 1Gb RAM Windows 7 x86 |
Ответ: Великая битва 4х языков программирования на простейшей задачке
тестовая программа Randomize'а дает такой результат:
выделение памяти: 45 мс заполнение массива: 75 мс |
Ответ: Великая битва 4х языков программирования на простейшей задачке
В .Net, используй в циклах ++x а не x++.
Также, используй StopWatch для корректного замера времени на операцию. И используй Jagged Array, он будет где-то в 2-3 раза быстрее. |
Ответ: Великая битва 4х языков программирования на простейшей задачке
Цитата:
В данном конкретном случае можно немного оптимизировать :) Код:
Local Time1% = MilliSecs() ЗЫ Твой вариант: аллокация ~244мс, заполнение ~5740мс проц P-4 Prescott 3Ghz ЗЫЫ Да и еще, помоему для minecraft-like игр юзать 3д массивы - чистое нубство :) |
Ответ: Великая битва 4х языков программирования на простейшей задачке
Цитата:
Цитата:
|
Ответ: Великая битва 4х языков программирования на простейшей задачке
Цитата:
Код:
Const Width% = 512 Цитата:
Цитата:
Можно использовать octree или BVH, ибо 3д массив не адаптивен, на пустых пространствах много памяти тратится бесполезно. Память выделять из пула. Хранить смещения вместо указателей, это немного уменьшит узлы дерева. Дерево обновлять локально - скользить вверх\вниз по веткам. Периодически перестраивать дерево уменьшая фрагментацию памяти, сложно конечно, но думаю возможно. Использовать выравнивание памяти. Попытать автора вот этой штуки :-) Еще что-нибудь, надо подумать :-) ЗЫ Sparse voxel octree заюзать *trollface* А вообще я не пойму смысла такого "бенчмарка", тут практически нечего тестировать, какой нафиг запись в массив, напишите реализацию какого-нить достаточно сложного мат. алгоритма и на нем тестируйте, еще бы сложение двух переменных потестировали :-D |
Часовой пояс GMT +4, время: 12:14. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot