Added two versions of channel convolution and noise generation: - accelerated via threadpool - accelerated using CUDA The main difference between this and previous versions of channel convolution implementations is that these functions take a real-world approach to input/output where both could be split unevenly over a set of buffers, e.g. ring buffers used in vrtsim. The CUDA-accelerated version only works on systems with unified memory, e.g. NVidia DGX Spark or GH
50 lines
1.5 KiB
C
50 lines
1.5 KiB
C
/*
|
|
* SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
|
*/
|
|
|
|
#ifndef _CHANNEL_CONVOLUTION_H_
|
|
#define _CHANNEL_CONVOLUTION_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
#include "common/platform_types.h"
|
|
|
|
#ifdef CUDA_ENABLE
|
|
void *cuda_channel_pipeline_init(int max_samples);
|
|
void cuda_channel_pipeline_shutdown(void *context_handle);
|
|
void cuda_channel_pipeline(void *context_handle,
|
|
const cf_t **channel,
|
|
const c16_t **tx_sig0,
|
|
const c16_t **tx_sig1,
|
|
int num_samples_tx_sig0,
|
|
c16_t **rx_sig0,
|
|
c16_t **rx_sig1,
|
|
int num_samples_rx_sig0,
|
|
int num_samples,
|
|
int channel_length,
|
|
int nb_tx,
|
|
int nb_rx,
|
|
float noise_power);
|
|
#endif
|
|
void channel_pipeline_init(float noise_power);
|
|
void channel_pipeline_shutdown(void);
|
|
void channel_pipeline(void *tpool,
|
|
const cf_t **channel,
|
|
const c16_t **tx_sig0,
|
|
const c16_t **tx_sig1,
|
|
int num_samples_tx_sig0,
|
|
c16_t **rx_sig0,
|
|
c16_t **rx_sig1,
|
|
int num_samples_rx_sig0,
|
|
int num_samples,
|
|
int channel_length,
|
|
int nb_tx,
|
|
int nb_rx,
|
|
float noise_power);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|