Как вызвать функцию устройства в другой DLL в ядре CUDAC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как вызвать функцию устройства в другой DLL в ядре CUDA

Сообщение Anonymous »

У меня есть DLL с экспортированной функцией устройства, и я пытаюсь написать исполняемый файл, который будет параллельно вызывать эту функцию на устройстве. Но я получаю ошибку компилятора в строке с вызовом ядра, и ошибка исчезает, если я закомментирую вызов функции DLL. Для создания DLL используется файл myfunc.cu:

Код: Выделить всё

#include "cuda_runtime.h"

__declspec(dllexport) __device__ double myfunc(double x) {
return x * x;  // Example function: square the input
}
Я создаю его с помощью:

Код: Выделить всё

nvcc -shared -o myfunc.dll myfunc.cu
Он создает файлы dll и lib.
Затем я вызываю программу kernel.cu:

Код: Выделить всё

#include 
#include "device_launch_parameters.h"

__device__ double myfunc(double x);

__global__ void kernel(double* a, double* c) {
int idx = blockIdx.x * blockDim.x + threadIdx.x;
c[idx] = myfunc(a[idx]);
}

int main() {
// ... (Host code to allocate memory, initialize data, and launch the kernel)

int num_elements = 10000;
double* a_h, * c_h;
double* a_d, * c_d;

// Allocate memory on the host
cudaMallocHost(&a_h, num_elements * sizeof(double));
cudaMallocHost(&c_h, num_elements * sizeof(double));

// Allocate memory on the device
cudaMalloc(&a_d, num_elements * sizeof(double));
cudaMalloc(&c_d, num_elements * sizeof(double));

// Copy data from host to device
cudaMemcpy(a_d, a_h, num_elements * sizeof(double), cudaMemcpyHostToDevice);

// Launch the kernel
kernel  (a_d, c_d);

// Copy results from device to host
cudaMemcpy(c_h, c_d, num_elements * sizeof(double), cudaMemcpyDeviceToHost);

// ... (Host code to use the results)

// Free memory
cudaFree(a_d);
cudaFree(c_d);
cudaFreeHost(a_h);
cudaFreeHost(c_h);

return 0;
}
Я создал это в Visual Studio 2022 в проекте, который запускался по умолчанию для среды выполнения CUDA, и добавил myfunc.lib во входные данные компоновщика.
На линии

Код: Выделить всё

kernel  (a_d, c_d);
Я получаю сообщение об ошибке «ожидалось выражение» с красной волнистой линией под третьим

Подробнее здесь: https://stackoverflow.com/questions/792 ... uda-kernel
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»