Модули для работы с OpenCL и OpenGL

А вы не могли бы уменьшить количество перегруженных методов в вашем модуле?

А то по 500 перегрузок с дикой тучей параметров сильно замедляют компиляцию этого модуля и сборку проекта.

Честно говоря, это стало сильно нас напрягать.

Я написал об этом в самом начале, ещё в пуле, добавившем эти тучи перегрузок. Вы проигнорировали + по сравнению с временем работы тестировщика - компиляция OpenGL.pas вообще незаметна, поэтому и решил что это не первостепенная проблема.

А что стало первостепенной проблемой в моих глазах - это race condition при практически любых действиях в OpenCLABC на определённых реализациях OpenCL.dll. В спецификации нигде не было указано что при создании асинхронных очередей могут быть созданы синхронные, без каких либо предупреждений и ошибок, поэтому я реализовал слепо основываясь на асинхронных очередях.

Что исправлять в OpenGL - прекрасно понятно. Надо пройтись по всем функциям, найти их описания в интернете и оставить только те перегрузки, которые полезны. Ну, если это срочно - могу сейчас добавить ворнинг в мой сборщик, для функций с >N перегрузками и в первую очередь исправить все функции, вызывающие этот ворнинг.

И нет, удалить все перегрузки определённых функций это не вариант, всё же весь смысл нового OpenGL - в том чтоб он не был огрызком, в отличии от предшественника.

1 лайк

каво?

Ну, чистите. Потому что время компиляции вашего модуля - 800 секунд. Это много. Это связано с перегрузками. Код, который у нас за это отвечает, не содержит сложностей и вряд ли поддаётся оптимизации. Возможно, и на C# такая же картина при 500 перегрузках с тучей параметров.

Я думаю, вы неверно понимаете предназначение стандартной библиотеки. На мой взгляд, 500 перегрузок - это грязно.

Как вариант, могу вам предложить сделать dll-ку и включать её в поставку PascalABC.NET. Оставлять в таком виде модуль нельзя - он существенно замедляет сборку проекта

TestRunner тоже в оптимизации нуждается

Ого. Даже у меня на слабеньком ноуте прыгает между 500 и 600, но к 800 никогда не подходило…

То есть в принципе с кол-вом объявлений функций (всех вместе) или именно из за того что у некоторых функций много перегрузок? И - на сколько это подтверждённая информация?

Нет, 500 перегрузок не должно быть. Они сгенерированны автоматически, программой которую я написал для перевода C++ кода на паскаль. T * pname можно считать как указатель, var-параметр и как массив. Когда таких параметров много - получаем 3^(кол-во параметров с *) перегрузок.

В принципе это вариант. Ну, я всё же для начала посмотрю ещё как будет если подчистить функции с большим кол-вом перегрузок…

И сразу вспомнилась мне своеобразно русифицированная операционка CP/M одной из первых болгарских персоналок “Правец”, интимно сообщающая: “Ворнинг ми бумага джаммед”. Такие вот траблЫ в душе получаются…

3 лайка

Иван смотрел в профилировщике. function_eq_params_and_result - жрёт всё время

Именно 500

Ну не прям именно… И, что важнее, я имел в виду что это временно и неправильно, а не то что так много получиться не должно было. Я первый кто их видел, когда они появились.

Ворнинги я добавил, и вот мне показывает что есть несколько функций на 486 перегрузок и 1 функция с 972 перегрузками. Ну а править буду уже завтра, потому что надо вчитываться в спецификацию расширений.

В итоге в список срочной чистки попало всё это (при макс перегрузок=15)
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glMultiDrawElementsBaseVertex" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glGetProgramResourceiv" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (486) overloads of "glGetDebugMessageLogARB" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (18) overloads of "glSpecializeShaderARB" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glGetPerfMonitorCountersAMD" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (972) overloads of "glGetPerfCounterInfoINTEL" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (162) overloads of "glGetPerfQueryInfoINTEL" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (81) overloads of "glDrawCommandsStatesNV" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (81) overloads of "glDrawCommandsStatesAddressNV" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (81) overloads of "glListDrawCommandsStatesClientNV" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (81) overloads of "glPointAlongPathNV" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glGetProgramResourcefvNV" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (54) overloads of "glGetActiveUniformARB" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (54) overloads of "glGetActiveAttribARB" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (162) overloads of "glGetDebugMessageLogAMD" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glWaitSemaphoreEXT" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glSignalSemaphoreEXT" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (54) overloads of "glGetTransformFeedbackVaryingEXT" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glMultiModeDrawArraysIBM" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glMultiModeDrawElementsIBM" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (81) overloads of "glAsyncCopyBufferSubDataNVX" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (81) overloads of "glAsyncCopyImageSubDataNVX" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (54) overloads of "glGetActiveVaryingNV" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glColor4fNormal3fVertex3fvSUN" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glTexCoord2fColor4ubVertex3fvSUN" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glTexCoord2fColor3fVertex3fvSUN" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glTexCoord2fNormal3fVertex3fvSUN" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (81) overloads of "glTexCoord2fColor4fNormal3fVertex3fvSUN" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (81) overloads of "glTexCoord4fColor4fNormal3fVertex4fvSUN" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glReplacementCodeuiColor4ubVertex3fvSUN" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glReplacementCodeuiColor3fVertex3fvSUN" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glReplacementCodeuiNormal3fVertex3fvSUN" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (81) overloads of "glReplacementCodeuiColor4fNormal3fVertex3fvSUN" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glReplacementCodeuiTexCoord2fVertex3fvSUN" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (81) overloads of "glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (243) overloads of "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glXChooseFBConfig" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glXGetSyncValuesOML" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glXWaitForMscOML" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glXWaitForSbcOML" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glXChooseFBConfigSGIX" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (81) overloads of "glXQueryChannelRectSGIX" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (81) overloads of "glXQueryChannelDeltasSGIX" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (81) overloads of "wglChoosePixelFormatARB" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (81) overloads of "wglChoosePixelFormatEXT" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "wglGetGammaTableI3D" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "wglSetGammaTableI3D" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "wglAssociateImageBufferEventsI3D" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "wglQueryFrameTrackingI3D" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "wglGetSyncValuesOML" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "wglWaitForMscOML" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "wglWaitForSbcOML" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (486) overloads of "glGetDebugMessageLogKHR" func
Template[OpenGL]: TemplateCommand[GL\PackFuncs.pas]: WARNING: too many (27) overloads of "glMultiDrawElementsBaseVertexEXT" func

27 перегрузок не так страшны, как 81, 162, 243, 486 и 972.

Если ты разобъёшь эти функции, то, я думаю, компиляция будет длиться меньше одной минуты.

1 лайк

Как красив болгарский язык! Просто пестня!

2 лайка

Это вообще волшебный язык… только вслушайтесь!

%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA

Если юмор ситуации непонятен, откройте спойлер

%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA

1 лайк

Каждый народ видит то, что хочет.

Я не понял в чём тут наезд.

Список планов на будущее находится в начале модуля, в регионе ToDo (прямо сейчас есть только у OpenCLABC, другим там по сути нечего писать).
Но большинство изменений это проблемы и идеи которые обнаруживаются сами собой со временем.

Чтоб писать чейнжлоги пока слишком мало изменений. Но в целом улучшения описанны в заголовке каждого пула.

Обязывать себя исправлять опередённое кол-во проблем я не буду. Единственно - в том же ToDo, в первом разделе (“сделать до пула”) находится список срочных проблем. А чрезмерная организованность ведёт к потере времени, так же как её недостаток.

Это ленивый вариант, я так делать не буду. Если кто то найдёт ошибку - я её исправлю как только смогу и скажу как подменить текущий модуль на модуль с исправлением.

По моему плохой пример, с чем можно спутать метки OpenCL и т.п.? Не с оригинальными библиотеками же)).

Ну, для тех кому оч надо - по коммитам доступны все версии. А что там с вин10 не знаю, меня последняя версия устраивает и обновления отключать не собираюсь. Боязнь обновлений давно пора ввести в официальный список фобий))).

Ну, всё это ещё может измениться, но пока модули находятся в альфа-подобном состоянии - писать чейнжлоги и сохранять старые версии не имеет смысла.

То что issue мало даёт не только эффект лёгкой обозримости.

Если разложить 2 файла на 10 папок в компьютере - доступ к ним не станет удобнее. Так же и тут. Разделение на категории должно происходит по мере увеличения объёма информации. А сейчас добавлении меток только уменьшит удобство поиска нужной issue.

А насчёт #2 - она нужна лично мне, чтоб когда исправляют issue компилятора - я в той issue сразу видел референс из #2 и там помечал чтоб потом исправить. Пользователю там нечего вообще смотреть.

1 лайк

Этот раздел находится 10 строчек под справкой. Кому надо - найдут.

1 лайк

Пожалуй, Серёге надо было сразу написать, что претензии принимаются только по неработоспособности кода и багам. Ты же разсмусоливаешь третий пост подряд бесполезную идею (заставить Серёгу иначе организовывать проект). В личке я уже понял, чего ты хочешь. Очень надеюсь, что дальнейшие претензии такого плана будут проигнорированы Сергеем. Смотреть в потолок более полезное времяпрепровождение, чем отвечать на попытки докопаться.

На этом форуме тоже есть ограничение времени редактирования, 1 месяц если я правильно помню. Во всяком случае первое сообщение я уже не могу редактировать.

Претензию эту я не игнорирую.
Я не делаю ничего по этому поводу потому что всё что ты сказал - слишком абстрактно.

Это самое конкретное что я от тебя услышал, и мне этой причины не достаточно чтоб делать ченжлоги для того, что ещё не приняло свою финальную форму (в этом и заключается альфа-подобное состояние).


далее после ночи (потому что я уже не соображал что пишу) и полного редактирования фрешнелом своего этого ответа

А зачем она кому то? В отличи от чейнжлогов, дающих знать что вкусненького подали, а что из под носа забрали - планы уже точно нужны только разработчику.

Нет, принимаются любые конструктивные.
А идея проигнорировать не конструктивные - довольно сладкая, но потом к этому он тоже докопается)).

А дочитать следующий абзац? Абстрактное = не_конкретное.