Я проводил исследования потоковых наборов данных, превышающих объем памяти, доступный на GPU, устройству для базовых вычислений.Одним из основных ограничений является тот факт, что шина PCIe обычно ограничена 8 ГБ / с, а объединение ядра может помочь в повторном использовании данных и в том, что они могут использовать общую память и локальность в графическом процессоре.Большинство исследовательских работ, которые я обнаружил, очень трудно понять, и большинство из них реализуют слияние в сложных приложениях, таких как https://ieeexplore.ieee.org/document/6270615.Я прочитал много статей, и они ВСЕ НЕ МОГУТ ОБЪЯСНИТЬ несколько простых шагов по слиянию двух ядер.
Мой вопрос: как на самом деле работает синтез? .Какие шаги нужно пройти, чтобы изменить нормальное ядро на слитое ядро?Кроме того, необходимо ли иметь более одного ядра, чтобы объединить его, поскольку слияние - это просто причудливый термин для устранения некоторых проблем, связанных с памятью, и использования локальности и общей памяти.
Мне нужно понять, как ядроFusion используется для базовой программы CUDA, например, для умножения матриц или для сложения и вычитания ядер.Действительно простой пример (код не верный, но должен дать представление) как:
int *device_A;
int *device_B;
int *device_C;
cudaMalloc(device_A,sizeof(int)*N);
cudaMemcpyAsync(device_A,host_A, N*sizeof(int),HostToDevice,stream);
KernelAdd<<<block,thread,stream>>>(device_A,device_B); //put result in C
KernelSubtract<<<block,thread,stream>>>(device_C);
cudaMemcpyAsync(host_C,device_C, N*sizeof(int),DeviceToHost,stream); //send final result through the PCIe to the CPU