|
Модераторы: Poseidon, Snowy, bems, MetalFan |
|
Prok12 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.11.2011 Репутация: 3 Всего: 3 |
Необходимо как можно быстрее упаковать динамический одномерный массив (1D) в динамический трёхмерный (3D). И обратно. Зачем? Вычислительный модуль на CPU работает с трёхмерными массивами большой размерности. Примерно, 1000х2000х10. Так и нагляднее код научной задачи получается, да и быстрее так обращение к элементам массива происходит (проверено). Ведь 3D динамический массив - это по сути указатель --> на массив указателей --> на массив указателей. Сейчас часть трудоёмкого кода переписана на языке OpenCL - для расчётов на GPU. Пример подключения OpenCL прямо к коду Delphi XE2 (Win64) дал в соседней ветке форума - системной. Но! В буферы памяти GPU можно передавать и забирать после расчётов только одномерные массивы. Как показали тестовые расчёты, основное время тратится не на передачу одномерных массивов туда-сюда (CPU-GPU) через шину PCI E, а именно на упаковку-распаковку 3D массива в 1D (передача на GPU) и обратно 1D в 3D после чтения 1D массива из буфера GPU: т.е. заметное время тратится программой на хосте (CPU), написанной на Delphi XE2.
------- Сейчас, например, упаковка в одномерный массив перед передачей оного на GPU тупо сделана в виде тройного цикла (пишу условно):
Аналогично - распаковка 3D ---> 1D массив. Причём внешний цикл по i даже разбит на выч.потоки-нити (Delphi-Threads) на CPU. Всё равно: дооолго! Потому как подобная операция упаковки/распаковки выполняется тысячи раз. Как можно ускорить подобную операцию? Как бы задать эквивалентность элементов 1D и 3D массивов... Типа: адреса сразу перед началом всего расчёта сопоставить. Или может как то через MemoryStream можно быстро копировать? Просто Move здесь не пройдёт - ведь как уже говорил, 3D - это массив указателей. Это сообщение отредактировал(а) Prok12 - 10.3.2016, 17:28 |
|||
|
||||
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |