![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Не знаю как тему назвать.
У меня есть два параметра. Для заданного диапазона значений этих параметров нужно сгенерировать процедуры в compile-time! Сразу скажу, что прога работает на GPU, поэтому цель вынести как можно больше вычислений в compile-time (чтобы компилятор мог развернуть циклы), размер полученного объектника не имеет никакого значения. Имеет смысл заюзать шаблоны. Самая "тупая" реализация, которая написана на первое время выглядит так:
Очевидно, что она не подходит хотя бы потому что произведение коммутативная операция. Т.е. для пары параметров 11, 9: 11 * 9 = 99 = 9 * 11 = 99. А вычисления для (11, 9) и (9, 11) должны быть разные! Я знаю диапазоны изменения эти параметров и хочу для каждой пары сгенерировать свою реализацию. Есть идеи? Это сообщение отредактировал(а) W4FhLF - 12.10.2010, 11:24 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
W4FhLF
А сами параметры известны в compile-time? |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Они передаются параметрами (CSize, RSize) в функцию. Мне лишь известно, что они меняются в диапазоне 5-25 скажем. Т.е. может быть 400 комбинаций, для switch'a многовато и к тому же поскольку параметров два нужно писать вложенный switch. boostcoder, boost'a под этот компилятор (NVIDIA C/C++ Compiler) нет. А залазить в MPL самому страшно ![]() -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Это сообщение отредактировал(а) mes - 12.10.2010, 11:32 |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Можно сделать матрицу своих шаблонных колбеков. X и Y координаты - это соответственно значения первого и второго патаметров. К нам попадает пара значений - сразу вызываем обработчик.
Если диапазоны параметров XY не пересекаются, то можно существенно сократить матрицу, сделав X и Y соотвественно диапазонами этих параметров (т.е. 9..13, 13..19 и т.д.) - в таком случае к нам падает пара значений, находим к каким диапазонам они относятся, вызываем ячейку, им соответствующую. У вас параметры неизвестны в компайл-тайм, так что о полноценной компайл-тайм реализации речи идти не может. Добавлено через 2 минуты и 52 секунды Всякие шаблонные if опять же работает только для заранее известных значений. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Я учту, спасибо. Юзать буст там не пробовал. Они в последний год только начали добавлять поддержку С++ features, но всё равно очень многое из стандарта отсутствует. mes, а что с этим делать? Добавлено @ 11:37 А в ячейках хранить указатели на обработчики? Я к сожалению не могу вызывать функции по указателю (хотя эта возможность была добавлена в последнюю версию компилятора, но я юзаю предыдущую), но можно сделать доп. обёртку, в таком случае такой вариант подойдёт. Но мне обработчики вручную генерить?
Да, но я не против, чтобы компилятор сгенерил все возможные варианты. ![]() Это сообщение отредактировал(а) W4FhLF - 12.10.2010, 11:40 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Вам надо для всех 400 вариантов задать функцию, которая представлена шаблоном основывающимся на "координатах" CSize, RSize ?
или я неправильно понял задачу ? |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Мне надо задать 400 функций для всех комбинаций параметров CSize, RSize. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
W4FhLF, так может проще просто сгенерировать мега-свитч?
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
djamshud, писать внешний скрипт для этого? Буду это делать в том случае, если средствами языка и препроцессора не решу.
Это сообщение отредактировал(а) W4FhLF - 12.10.2010, 11:44 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот набросок на скорую руку : http://liveworkspace.org/code/113cae60cbf8...b9bd90b3c193ec8 ловите, и допиливаете под свои нужды ![]() |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
mes, да, то что нужно! Спасибо большое.
![]() -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
скорее всего опечатка, но на всякий случай уточню .. в данном диапазоне 442 ![]() и тогда не 20
а 21 ![]() а вместо одномерного массива как в примере. можно использовать двухмерный, для лучшей читабельности.. Это сообщение отредактировал(а) mes - 12.10.2010, 12:52 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |