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


#41

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

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

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


#42

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

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

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

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


#43

каво?


#44

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

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

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


#45

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


#46

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

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

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

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


#47

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


#48

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


#49

Именно 500


#50

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

Ворнинги я добавил, и вот мне показывает что есть несколько функций на 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


#51

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

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


#52

#53

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


#54

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

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

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

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


#55

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