#ifndef _OPENCL_H_
#define _OPENCL_H_

#ifdef __cplusplus
extern "C" {
#endif

// IntelやAMDのGPUでZeroCopyするにはメモリー境界をこの値にしないといけない
#define MEM_UNIT 4096

extern int OpenCL_method;

int init_OpenCL(unsigned int unit_size, int *src_max);
int free_OpenCL(void);
void info_OpenCL(char *buf, int buf_size);

int gpu_copy_blocks(
	unsigned char *data,
	unsigned int unit_size,
	int src_num);

int gpu_multiply_blocks(
	int src_num,			// Number of multiplying source blocks
	unsigned short *mat,	// Matrix of numbers to multiply by
	unsigned short *mat2,	// Set to calculate 2 blocks at once
	unsigned char *buf,		// Products go here
	unsigned int len);		// Byte length

int gpu_finish(void);

#ifdef __cplusplus
}
#endif

#endif
