Bladeren bron

Add stream-aware kernel launch entry points

master
Jan Svabenik 2 dagen geleden
bovenliggende
commit
0fe1e2efbc
2 gewijzigde bestanden met toevoegingen van 16 en 3 verwijderingen
  1. +2
    -0
      internal/demod/gpudemod/gpudemod_windows.go
  2. +14
    -3
      internal/demod/gpudemod/native/exports.cu

+ 2
- 0
internal/demod/gpudemod/gpudemod_windows.go Bestand weergeven

@@ -18,7 +18,9 @@ typedef int (__stdcall *gpud_stream_sync_fn)(gpud_stream_handle stream);
typedef int (__stdcall *gpud_upload_fir_taps_fn)(const float* taps, int n);
typedef int (__stdcall *gpud_launch_freq_shift_fn)(const gpud_float2* in, gpud_float2* out, int n, double phase_inc, double phase_start);
typedef int (__stdcall *gpud_launch_fm_discrim_fn)(const gpud_float2* in, float* out, int n);
typedef int (__stdcall *gpud_launch_fir_stream_fn)(const gpud_float2* in, gpud_float2* out, int n, int num_taps, gpud_stream_handle stream);
typedef int (__stdcall *gpud_launch_fir_fn)(const gpud_float2* in, gpud_float2* out, int n, int num_taps);
typedef int (__stdcall *gpud_launch_decimate_stream_fn)(const gpud_float2* in, gpud_float2* out, int n_out, int factor, gpud_stream_handle stream);
typedef int (__stdcall *gpud_launch_decimate_fn)(const gpud_float2* in, gpud_float2* out, int n_out, int factor);
typedef int (__stdcall *gpud_launch_am_envelope_fn)(const gpud_float2* in, float* out, int n);
typedef int (__stdcall *gpud_launch_ssb_product_fn)(const gpud_float2* in, float* out, int n, double phase_inc, double phase_start);


+ 14
- 3
internal/demod/gpudemod/native/exports.cu Bestand weergeven

@@ -49,20 +49,31 @@ __global__ void gpud_freq_shift_kernel(
out[idx].y = v.x * si + v.y * co;
}

GPUD_API int GPUD_CALL gpud_launch_freq_shift_cuda(
GPUD_API int GPUD_CALL gpud_launch_freq_shift_stream_cuda(
const float2* in,
float2* out,
int n,
double phase_inc,
double phase_start
double phase_start,
gpud_stream_handle stream
) {
if (n <= 0) return 0;
const int block = 256;
const int grid = (n + block - 1) / block;
gpud_freq_shift_kernel<<<grid, block>>>(in, out, n, phase_inc, phase_start);
gpud_freq_shift_kernel<<<grid, block, 0, (cudaStream_t)stream>>>(in, out, n, phase_inc, phase_start);
return (int)cudaGetLastError();
}

GPUD_API int GPUD_CALL gpud_launch_freq_shift_cuda(
const float2* in,
float2* out,
int n,
double phase_inc,
double phase_start
) {
return gpud_launch_freq_shift_stream_cuda(in, out, n, phase_inc, phase_start, 0);
}

__global__ void gpud_fm_discrim_kernel(
const float2* __restrict__ in,
float* __restrict__ out,


Laden…
Annuleren
Opslaan