Как он вообще в Паскале работает?
Графика через Graph3D работает далеко не так шустро, как низкоуровневые интерфейсы DirectX, OpenGL или Vulkan, т.к. она реализована через очень высокоуровневые библиотеки Windows WPF и .NET (хотя все-таки заметно быстрее, чем старый GraphABC через Windows GDI), т.е. существуют очень высокие накладные расходы на подготовку, конвертацию и передачу данных в GPU для последующего рендеринга. Думаю, новое железо вам тут радикально не поможет.
А по-другому с 3D работать гораздо сложнее. Се ля ви…
uses OpenGL;//готово
Вот, к примеру, говнокод за который мне стыдно, который умудряется рисовать 40к треугольников и тратит на это всего лишь 10-20% процессорного времени. А считая на сколько этот код ужасен - можно наверняка оптимизировать, чтоб тратило процентов 3-5. Как минимум не использовать прямоугольные массивы…
У меня уже на 1 шарике тормозит, мне нужно хотя бы 20 шариков с линиями и чуть чуть текста, без тормозов по 10 сек.
ехх
Отключил блок нейросети и т.д. , залетало все сразу… по-видимому основная программа грузит. У меня там прямоугольных массивов много, но без них даже не знаю как можно обойтись, каждая ячейка там нужна.
Судя по всему, проблема вообще не в том, как и через что рендерятся ваши 3D шарики, а в вашем алгоритме, которым вы перегрузили процессор. Никакой OpenGL тут не поможет. Это в принципе неразумно – пытаться одновременно выполнять ресурсоемкие вычисления, загружая проц по полной, и ожидать плавной непрерывной отрисовки чего-либо.
Одна из причин низкого fps в “красивых” многопользовательских компьютерных игрушках, когда показывается толпа игроков в бою.
На сколько я помню, у него 2 ядра, поэтому таких проблем не должно быть, если и графика и вычисления будут работать только на своём собственном ядре.
Что-то я не пойму, пытаюсь искусственно загрузить проц. типа ч+1 ч-1 … 3д летает. включаю нейросеть - опять тормаза.
??? какие команды тормозят 3д ???
что такое ч+1 ч-1?
Но, хоть первую часть я не понял - если нейросеть у вас выполняется в несколько потоков - это может тормозить 3D. Надо чтоб всё что не 3D - выполнялось на 1 ядре, не больше. Иначе оно будет забирать процессорное время у 3D.
А за отрисовку разве не GPU в первую очередь отвечает?
Можно ли как-то через OpenGL организовать параллельную работу с массивами на GPU?
x+=1; x-=1; т.е. загрузил проц вычислительным мусором.
Не думаю, что это поможет – у него там очень громоздкие динамические структуры данных, а жестко в процессе исполнения привязать какое-то одно ядро для JIT и особенно для активного управления памятью виртуальной машины невозможно. Реализация WPF также многопоточная и его потоки тоже распределяются по ядрам автоматом.
Строчки while true do;
достаточно)) Но это только 1 ядро. А вот на несколько:
begin
var proc_c := System.Environment.ProcessorCount;//Это число ядер у компьютера
loop proc do
(new System.Threading.Thread(procedure->while true do)).Start;
end.
Это уже должно сожрать все 100% процессорного времени.
Для этого нужно запустить поток в режиме System.Threading.ApartmentState.STA
и потом ещё вроде можно как то выбрать номер ядра, на котором выполнять этот поток предпочтительнее.
Давно хотел задать вопрос, возможно, глупый. Как быстрее читать/писать массив: последовательно по элементам или случайным образом(не последовательно)? На сколько велика разница?
Ну, если делать последовательно через цикл for - убирается проверка индекса.
А приведите ка примеры алгоритмов непоследовательного чтения…
Проверил код и обалдел. Последовательное чтение даёт прирост скорости в 9 раз!Speed.cs (1,3 КБ) Компилятор - C# Shell на Android(Кстати, категорически рекомендую программу C# Shell(offline C# compiler). Она позволяет запускать на телефоне коды на C#, разрабатывать их и компилировать под Windows и всё это в офлайне.)
Я бы использовал System.Diagnostics.Stopwatch. Это, что могу сказать, после беглого просмотра. Позже - потом посмотрю.