add timing of the OpenCL compile functions...they're really slow here, almost 20seconds total...

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4449 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Shawn Hoffman 2009-10-22 03:53:47 +00:00
parent 7a2bad4efb
commit 5e3fdf5067
2 changed files with 70 additions and 54 deletions

View File

@ -19,17 +19,21 @@
#include "OpenCL.h"
#include "Common.h"
#include "Timer.h"
namespace OpenCL {
#if defined(HAVE_OPENCL) && HAVE_OPENCL
cl_device_id device_id = NULL;
cl_context g_context = NULL;
cl_command_queue g_cmdq = NULL;
#endif
namespace OpenCL
{
#if defined(HAVE_OPENCL) && HAVE_OPENCL
cl_device_id device_id = NULL;
cl_context g_context = NULL;
cl_command_queue g_cmdq = NULL;
#endif
bool g_bInitialized = false;
bool Initialize() {
bool Initialize()
{
if(g_bInitialized)
return true;
@ -66,23 +70,29 @@ bool Initialize() {
HandleCLError(err, "Failed to create a command commands!");
return false;
}
//PanicAlert("Initialized OpenCL fine!");
NOTICE_LOG(COMMON, "Initialized OpenCL!");
g_bInitialized = true;
return true;
#else
return false;
#endif
}
#if defined(HAVE_OPENCL) && HAVE_OPENCL
cl_context GetContext() {
cl_context GetContext()
{
return g_context;
}
cl_command_queue GetCommandQueue() {
cl_command_queue GetCommandQueue()
{
return g_cmdq;
}
cl_program CompileProgram(const char *Kernel) {
cl_program CompileProgram(const char *Kernel)
{
u32 compileStart = timeGetTime();
int err;
cl_program program;
program = clCreateProgramWithSource(OpenCL::g_context, 1, (const char **) & Kernel, NULL, &err);
@ -103,11 +113,13 @@ cl_program CompileProgram(const char *Kernel) {
return NULL;
}
NOTICE_LOG(COMMON, "OpenCL CompileProgram took %.3f seconds", (float)(timeGetTime() - compileStart) / 1000.0);
return program;
}
cl_kernel CompileKernel(cl_program program, const char *Function)
{
u32 compileStart = timeGetTime();
int err;
// Create the compute kernel in the program we wish to run
//
@ -117,11 +129,13 @@ cl_kernel CompileKernel(cl_program program, const char *Function)
HandleCLError(err, "Failed to create compute kernel!");
return NULL;
}
NOTICE_LOG(COMMON, "OpenCL CompileKernel took %.3f seconds", (float)(timeGetTime() - compileStart) / 1000.0);
return kernel;
}
#endif
void Destroy() {
void Destroy()
{
#if defined(HAVE_OPENCL) && HAVE_OPENCL
if(!g_context)
return;
@ -130,9 +144,10 @@ void Destroy() {
#endif
}
#if defined(HAVE_OPENCL) && HAVE_OPENCL
void HandleCLError(cl_int error, char* str)
{
#if defined(HAVE_OPENCL) && HAVE_OPENCL
char* name;
switch(error)
{
@ -191,7 +206,7 @@ void HandleCLError(cl_int error, char* str)
str = "";
PanicAlert("OpenCL error: %s %s (%d)", str, name, error);
}
#endif
}
};
}

View File

@ -40,15 +40,18 @@ typedef void *cl_command_queue;
typedef void *cl_program;
typedef void *cl_kernel;
typedef void *cl_mem;
typedef void *cl_int;
#endif
namespace OpenCL {
#if defined(HAVE_OPENCL) && HAVE_OPENCL
extern cl_device_id device_id;
extern cl_context g_context;
extern cl_command_queue g_cmdq;
#endif
namespace OpenCL
{
#if defined(HAVE_OPENCL) && HAVE_OPENCL
extern cl_device_id device_id;
extern cl_context g_context;
extern cl_command_queue g_cmdq;
#endif
bool Initialize();
@ -61,9 +64,7 @@ void Destroy();
cl_program CompileProgram(const char *Kernel);
cl_kernel CompileKernel(cl_program program, const char *Function);
#if defined(HAVE_OPENCL) && HAVE_OPENCL
void HandleCLError(cl_int error, char* str = 0);
#endif
};
}
#endif