![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
php / delphi
Форумчанин
Регистрация: 10.06.2007
Сообщений: 175
|
![]()
Прошу помочь разобраться.
Предыстория вопроса: Значит, есть у меня массив двумерный (of real), площадью > 1e6. В рекурентной формуле интенсивно пользуюсь его элементами. Поскольку читаю его последовательно, то можно оптимизировать обращение к массиву. (Определить указатель, и читать как из файла, смещая указатель) Простейший пример реализации этого алгоритма: Код:
Собственно вопрос: Внутри цикла, на i-й итерации, необходимо обратиться к трем элементам u[i-1], u[i], u[i+1]. Не могу сообразить как указать явно указать смещение вперед/назад относительно my_pointer. Охота что-то вроде my_pointer-$08, my_pointer, my_pointer+$08 чтобы эти конструкции можно было подставить в одно выражение (Требуется извлечь максимальную эффективность! ) Можно, конечно, определить дополнительную переменную и получится что-то вроде Код:
Работа с указателями, конечно, у Дельфина довольно специфична
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 02.01.2010
Сообщений: 254
|
![]()
Возможно, так подойдет:
Код:
|
![]() |
![]() |
![]() |
#3 |
php / delphi
Форумчанин
Регистрация: 10.06.2007
Сообщений: 175
|
![]()
Спасибо )) Отличный способ. Все как положено - жесткое приведение типов. Не мог сообразить, к какому же типу нужно привести указатели ))
Изучаю соответствующий ассемблерный код ![]() Кста, а почему Cardinal-то ? Это из каких-то соображений, или просто так? Он вроде переменной длины?
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра. Последний раз редактировалось InternetStranger; 09.02.2010 в 00:24. |
![]() |
![]() |
![]() |
#4 | ||
Форумчанин
Регистрация: 02.01.2010
Сообщений: 254
|
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#5 | |
php / delphi
Форумчанин
Регистрация: 10.06.2007
Сообщений: 175
|
![]()
Да это я глупость какую-то прочитал на сайте одном. не так понял.
Цитата:
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра. |
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 02.01.2010
Сообщений: 254
|
![]()
Это они видимо говорят о том, что, когда выйдет delphi, способная генерировать код для 64-битной архитектуры, в ней Cardinal может стать 8-байтовым целочисленным типов без знака.
|
![]() |
![]() |
![]() |
#7 |
php / delphi
Форумчанин
Регистрация: 10.06.2007
Сообщений: 175
|
![]()
Протестировал на скорость выполнения.
К сожалению, компилятор не правильно понимает, чего от него хотят (может я просто не так спрашивал)). В любом случае, следующий способ хоть и не очень удобен, но явно эффективнее: Код:
PS: За предложенный алгоритм тоже спасибо. ![]() maxionans.reputacia.inc(+1);
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра. |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 02.01.2010
Сообщений: 254
|
![]()
А можно поинтересоваться отчего такая щепетильность к оптимизации выполнения? У вас там гигабайты обрабатываемых данных или же вы пишете для калькулятора?
![]() |
![]() |
![]() |
![]() |
#9 |
php / delphi
Форумчанин
Регистрация: 10.06.2007
Сообщений: 175
|
![]() ![]() вот собственно моя задача Статья Под скромненькой фразой во введении "С помощью численных методов рассмотрена..." кроется многолетняя борьба за каждый такт, за каждый квант процессорного времени )) И все во имя отечественной науки. вот это тоже ради нее ![]()
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра. |
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 02.01.2010
Сообщений: 254
|
![]()
нет, я про калькулятор говорил не в том смысле, что вы создаете программу-калькулятор, а в том, что компьютер, для которого вы пишите, по производительности сравним с калькулятором.
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
обращение к элементам двумерного массива на С++ | серг | Помощь студентам | 16 | 05.12.2009 21:01 |
обращение к элементу таблицы в WebBrowser | nikola86 | Общие вопросы Delphi | 13 | 14.11.2009 00:55 |
Получить массив B, присвоив его k-му элементу значение 0, если все элементы [Pascal] | М@лышка | Помощь студентам | 10 | 12.10.2009 23:29 |
STL обращение к элементу list | sht0p0r | Общие вопросы C/C++ | 1 | 05.07.2009 21:22 |
Обращение из формы в dll к элементу главной формы (delphi) | a_n_n_a | Помощь студентам | 3 | 10.05.2009 04:00 |