Я кодировал библиотеку шаблонов векторных выражений для ЦП, используя метапрограммирование шаблонов. Однако у меня возникают трудности при создании ядра графического процессора для данного выражения. Посоветуйте, пожалуйста, как я могу создать строку выражения (c = a + b) с учетом дерева выражений и список параметров для передачи в качестве аргументов ядра. Я читал о методах в документах, но с трудом помещаю их в код. Одна проблема заключается в том, что я не знаю, как хранить имена переменных (a, b, c), которые будут использоваться в выражении. Я думаю, что просто дать им случайные уникальные имена, такие как x0, x1, x2, может сработать. Фрагмент кода будет очень полезен. Спасибо
Вот шаблоны для ядра и фактическое ядро для c = a + b, взятые из «Шаблонов выражений CUDA» https://pdfs.semanticscholar.org/5d08/a871b72f12a7ee40aeb2a69bca27a23733db.pdf
extern "C" __global__ void kernel ( float∗ a ,
/∗ parameterlist ∗/ , unsigned int size ) {
idx = blockDim . x ∗ blockIdx . x + threadIdx . x ;
if ( idx < size ) {
a [ idx ] = / ∗ evaluation line ∗ / ;
}
}
Listing 4: The Kernel prototype.
extern "C" __global__ void kernel ( float∗ a ,
float* b, float* c , unsigned int size ) {
idx = blockDim . x ∗ blockIdx . x + threadIdx . x ;
if ( idx < size ) {
a [ idx ] = b [ idx ] + c [ idx ] ;
}
}
Listing 5: Kernel generated by compiling Listing 2.
Задача ещё не решена.
Других решений пока нет …