Я написал код, предназначенный для очень быстрых вычислений. Я предполагаю, что знаю определенное число (потому что я могу смело предположить, что это < 15 и> 2. Не очень хороший способ реализовать что-то, но он позволяет разворачивать цикл и делает код намного быстрее)Несколько копий одной и той же функции в C
(Код был написан этот способ для практических соображений. Я знаю, что это не очень хороший способ написать код, но в этом случае так оно и должно быть)
Проблема: мне нужно изменить номер в #define
и скомпилировать снова и снова для каждого значения (с использованием Visual C++ 2010)
Я понял, что макросы могут быть способом, но я не мог понять, как это сделать. мой хромой попытка подали:
#define myCustomFunc(number) void myF_number() \
{ printf("%d",number); \
}
моя цель состоит в том, что что-то вроде этого:
create_myfunc(2);
create_myfunc(3);
create_myfunc(4);
будет расширяться:
void myFunc_2(...)
{ ... #pragma unroll
for (int i<0; i<2;i++)
...
}
void myFunc_3(...)
{ ... #pragma unroll
for (int i<0; i<3;i++)
...
}
и т.д. и иметь возможность вызывать эти функции из некоторые функции по их названию, включая постоянную в нем
if (x==2)
myFunc_2();
Но из того, что я понимаю, одна из проблем при выполнении такой вещи заключается в том, что такой код не расширяется, если он не находится внутри функции, просто дает ошибку.
Почему кто-то хочет сделать такую ужасную вещь ?! Независимо от вашей внешней проблемы, это не способ ее решения. Это затмевает простоту вашего кода. –
Кроме того, вы, вероятно, ошибаетесь в том, что цикл разворачивается, делая код быстрее. С отдельными развернутыми функциями у вас будет больше инструкций для извлечения и декодирования, использования большего количества кэша инструкций и в зависимости от того, что в коде, возможно, даже с более ошибочными ветвями и других подобных штрафов. –
Мой код не должен быть простым, он должен быть быстрым. Это написано в CUDA. Я не эксперт-программист, но я понимаю, что разворот цикла очень хорош в CUDA. Поверьте мне, я тоже этого не люблю, но мне нужен быстрый код, и это не нужно обобщать или использовать никем, кроме меня. – user1999728