Помощь новичкам

Как он вообще в Паскале работает?

Графика через Graph3D работает далеко не так шустро, как низкоуровневые интерфейсы DirectX, OpenGL или Vulkan, т.к. она реализована через очень высокоуровневые библиотеки Windows WPF и .NET (хотя все-таки заметно быстрее, чем старый GraphABC через Windows GDI), т.е. существуют очень высокие накладные расходы на подготовку, конвертацию и передачу данных в GPU для последующего рендеринга. Думаю, новое железо вам тут радикально не поможет.

А по-другому с 3D работать гораздо сложнее. Се ля ви…

3 лайка
uses OpenGL;//готово

Вот, к примеру, говнокод за который мне стыдно, который умудряется рисовать 40к треугольников и тратит на это всего лишь 10-20% процессорного времени. А считая на сколько этот код ужасен - можно наверняка оптимизировать, чтоб тратило процентов 3-5. Как минимум не использовать прямоугольные массивы…

У меня уже на 1 шарике тормозит, мне нужно хотя бы 20 шариков с линиями и чуть чуть текста, без тормозов по 10 сек.

ехх :frowning:

Отключил блок нейросети и т.д. , залетало все сразу… :frowning: по-видимому основная программа грузит. У меня там прямоугольных массивов много, но без них даже не знаю как можно обойтись, каждая ячейка там нужна.

Судя по всему, проблема вообще не в том, как и через что рендерятся ваши 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. Это, что могу сказать, после беглого просмотра. Позже - потом посмотрю.