Mars M
-
Постов
63 -
Зарегистрирован
-
Посещение
-
Победитель дней
4
Активность репутации
-
Mars M получил реакцию от Andrey Efimov в Узнать размер видеопамяти
Подниму тему. CUDA конечно хорош(а?), но только для nvidia.
Наткнулся тут на работу с OpenCL в делфи http://www.delphisources.ru/forum/showthread.php?t=28188
Там по ссылке в первом сообщение в принципе все есть что нужно. Кому оттуда не удобно перезалил все файлы https://yadi.sk/d/t3mPqlJT3HnfiX
Вот пример использования https://yadi.sk/d/bmDKXZ0k3Hnfny
Проверял на картах nvidia и ati, конечно же карты должны поддерживать OpenCL.
Если в MyOpenCL.pas чего то не хватает, можно взять это в CL.pas из GLScene https://sourceforge.net/p/glscene/code/HEAD/tree/trunk/Source/ParallelAPIs/
Я например добавил константу CL_DEVICE_LOCAL_MEM_SIZEэ
А можно использовать родные CL.pas и CL_Platform.pas, в первом архиве есть пример использования.
В архиве как раз есть рабочий пример вычислений
-
Mars M получил реакцию от Andrey Efimov в Узнать размер видеопамяти
Вот так вот вроде работает:
Только нужно будет закомментировать строчку
assert(sizeof(TCudaDeviceProp) = 540, 'sizeof(TCudaDeviceProp) <> 540');
-
Mars M получил реакцию от Равиль Зарипов (ZuBy) в Узнать размер видеопамяти
Вот так вот вроде работает:
Только нужно будет закомментировать строчку
assert(sizeof(TCudaDeviceProp) = 540, 'sizeof(TCudaDeviceProp) <> 540');
-
Mars M отреагировална Евгений Корепов в Узнать размер видеопамяти
Вместо утреннего кофе, уперся рогом и сделал получение информации через CUDA, тесовый проект прилагаю.
В режиме отладки работает отлично, вижу размер видеопамяти, но потом вылетает с access violation (при обращении к визуальным компонентам или просто при продолжении работы). В чем дело понять не могу, сначала грешил на FMX, но проект на VCL выдает те же симптомы. Очень, очень странные дела...
Код простой, используется cudaRT.pas из CUDA wraper Паскуда https://code.google.com/archive/p/pascuda/source/default/source и cudart32_65.dll идущая вместе с драйверами NVIDIA
Var CudaDeviceProp : TCudaDeviceProp; hDevice: Integer; GPUMemorySize : Cardinal; LMessage : String; begin hDevice:=0; if CudaGetDeviceProperties(CudaDeviceProp, hDevice)=ceSuccess then begin GPUMemorySize:=CudaDeviceProp.TotalGlobalMem div 1024 div 1024; LMessage:=Format('GPU Memory size = %d Mb', [GPUMemorySize]); Memo.Lines.Add(LMessage); end;
test099 Cuda Info VCL.7z
-
Mars M получил реакцию от Евгений Корепов в TVertexBuffer, TIndexBuffer максимальный\рекомендованный размер
Теперь вот окончательно разобрался что к чему
Ошибку в коде что я писал уже появилась после того как я код переделал что бы буферы векторов и индексов делить на части.
Думая что ошибка найдена я вернул все к первоначальному виду и тут та же проблема.
В общем наткнулся в исходниках fmx на метод Create для индексного буфера.
TIndexBuffer.Create(const ALength: Integer; const AFormat: TIndexFormat = TIndexFormat.UInt16); Из которого стала понятна причина проблемы
При создании буфера указал TIndexFormat.UInt32 и первоначальный код заработал без проблем.
Возможно плохо искал, но сколько инет перерыл не попадалось про это. Хотя на gamedev.ru читал про тоже самое но касательно OpenGL, но не обратил внимание
-
Mars M отреагировална Rusland в Посоветуйте функционал для приложения
Периодически членам партии в пушах присылать призывы поддержать материально (из своего кармана) какое-нибудь благое начинание типа скинуться на: ремонт дороги, школы, больницы...
-
-
Mars M отреагировална Равиль Зарипов (ZuBy) в [Статья] Онлайн-сервисы в помощь разработчику по дизайну
Ссылка: http://blog.rzaripov.kz/2017/01/blog-post.html
Автор: Зарипов Равиль @ZuBy
Описание: Онлайн-сервисы в помощь разработчику по дизайну
-
Mars M отреагировална Error в [Статья] VCL, избавляемся от мерцания, раз и навсегда
Ссылка: https://habrahabr.ru/post/318876/
Автор: Error
Описание:
Delphi и C++Builder разработчики, использующие VCL не по наслышке знают о вездесущей проблеме мерцания контролов.
Мерцание происходит при перерисовке, вследствие того, что сначала отрисовываеться фон компонента, и только потом сам компонент.
И если в случае с наследниками от TWinControl частичным решением проблемы является установка свойства DoubleBuffered в True, что заставляет контрол отрисовываться в буфере(однако DoubleBuffered работает тоже не идеально, к прим.: контрол перестает быть прозрачным), то в случае с TGraphicControl решение с DoubleBuffered просто невозможно, из-за отсутствия у TGraphicControl окна, установка же DoubleBuffered в True у родителя не помогает, из-за того что отрисовка вложенных TGraphicControl-ов происходит уже после прорисовки родителя в буфере.
Обычно остается только одно — смириться с мерцанием, и максимально упростить отрисовку для минимизации эффекта, или использовать по возможности исключительно TWinControl-ы, что не всегда возможно и удобно.
Однажды намучившись с мерцанием, я не выдержал и решил решить эту проблему, раз и навсегда!
...
-
Mars M получил реакцию от HyperZen в Как правильно передать полученные значения в потоке в главную форму приложения?
Вот еще вариант