blob: eefca21a044278daf5d1a197145d123f85eb4718 [file] [log] [blame]
//TODO: copyrights
#ifndef __CPU_DEVICE_H__
#define __CPU_DEVICE_H__
#define MAX_THREAD_AMOUNT 16
#include <list>
#include <mutex>
#include "opencl.h"
#include "device_interface.h"
#include "Resource.hpp"
namespace Devices
{
class CPUDevice : public DeviceInterface
{
public:
CPUDevice();
~CPUDevice();
/**
* \brief Initialize the CPU device
*
* This function creates the worker threads and get information about
* the host system for the \c numCPUs() and \c cpuMhz functions.
*/
void init();
cl_int info(cl_device_info param_name,
size_t param_value_size,
void *param_value,
size_t *param_value_size_ret) const;
DeviceBuffer *createDeviceBuffer(MemObject *buffer, cl_int *rs);
DeviceProgram *createDeviceProgram(Program *program);
DeviceKernel *createDeviceKernel(Kernel *kernel,
llvm::Function *function);
cl_int initEventDeviceData(Event *event);
void freeEventDeviceData(Event *event);
void pushEvent(Event *event);
Event *getEvent(bool &stop);
float cpuMhz() const; /*!< \brief Speed of the CPU in Mhz */
private:
unsigned int p_num_events;
float p_cpu_mhz;
sw::Thread *p_workers[MAX_THREAD_AMOUNT];
std::mutex eventListResource;
sw::Event *p_events_cond;
std::list<Event *> p_events;
bool p_stop, initialized;
};
//class GPUDevice : public DeviceInterface
//{
//public:
// GPUDevice();
// ~GPUDevice();
//
// /**
// * \brief Initialize the CPU device
// *
// * This function creates the worker threads and get information about
// * the host system for the \c numCPUs() and \c cpuMhz functions.
// */
// void init();
//
// cl_int info(cl_device_info param_name,
// size_t param_value_size,
// void *param_value,
// size_t *param_value_size_ret) const;
//
// DeviceBuffer *createDeviceBuffer(MemObject *buffer, cl_int *rs);
// DeviceProgram *createDeviceProgram(Program *program);
// DeviceKernel *createDeviceKernel(Kernel *kernel,
// llvm::Function *function);
//
// cl_int initEventDeviceData(Event *event);
// void freeEventDeviceData(Event *event);
//
// void pushEvent(Event *event);
// Event *getEvent(bool &stop);
//
// unsigned int numCPUs() const; /*!< \brief Number of logical CPU cores on the system */
// float cpuMhz() const; /*!< \brief Speed of the CPU in Mhz */
//
//private:
// unsigned int p_cores, p_num_events;
// float p_cpu_mhz;
// pthread_t *p_workers;
//
// std::list<Event *> p_events;
// pthread_cond_t p_events_cond;
// pthread_mutex_t p_events_mutex;
// bool p_stop, p_initialized;
//};
}
#endif