From: miha-q <>
Date: Sun, 3 Mar 2024 01:52:16 +0000 (-0500)
Subject: Sat Mar  2 08:52:16 PM EST 2024
X-Git-Url: http://www.foleosoft.com/?a=commitdiff_plain;h=a4206ed7ee67d4cc0590e1cb64d911c79eca5350;p=QAnsel.git

Sat Mar  2 08:52:16 PM EST 2024
---

diff --git a/src/QAnsel.c b/src/QAnsel.c
index 11704fd..1d084c9 100644
--- a/src/QAnsel.c
+++ b/src/QAnsel.c
@@ -1372,7 +1372,6 @@ void main(int argc, char** argv)
 	#ifdef GPU_ENABLED
 	USE_GPU = GPU_init();
 	#endif
-	USE_GPU = 0;
 
 	RANDOM_FILE = fopen("/dev/TrueRNG0", "r");
 	if (!RANDOM_FILE) RANDOM_FILE = fopen("/dev/random", "r");
diff --git a/src/gpu.c b/src/gpu.c
index 991db40..50bebc0 100644
--- a/src/gpu.c
+++ b/src/gpu.c
@@ -66,10 +66,17 @@ void GPU_clean()
 
 void GPU_mmul(double* ptrR, double* ptrA, double* ptrB, size_t rowsA, size_t colsB, size_t shared)
 {
+	#define GPU_DEBUG
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	//Create buffers
 	size_t sizeA = rowsA * shared;
 	size_t sizeB = shared * colsB;
 	size_t sizeR = rowsA * colsB;
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	cl_int err;
 	cl_mem memA = clCreateBuffer(GPU_context, CL_MEM_READ_ONLY, sizeof(double) * sizeA, NULL, &err);
 	if (err != CL_SUCCESS)
@@ -77,12 +84,18 @@ void GPU_mmul(double* ptrR, double* ptrA, double* ptrB, size_t rowsA, size_t col
 		fprintf(stderr, "GPU fatal error: clCreateBuffer() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	cl_mem memB = clCreateBuffer(GPU_context, CL_MEM_READ_ONLY, sizeof(double) * sizeB, NULL, &err);
 	if (err != CL_SUCCESS)
 	{
 		fprintf(stderr, "GPU fatal error: clCreateBuffer() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	cl_mem memR = clCreateBuffer(GPU_context, CL_MEM_WRITE_ONLY, sizeof(double) * sizeR, NULL, &err);
 	if (err != CL_SUCCESS)
 	{
@@ -90,12 +103,18 @@ void GPU_mmul(double* ptrR, double* ptrA, double* ptrB, size_t rowsA, size_t col
 		exit(1);
 	}
 	//Populate buffers
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	err = clEnqueueWriteBuffer(GPU_command_queue, memA, CL_TRUE, 0, sizeof(double) * sizeA, ptrA, 0, NULL, NULL);
 	if (err != CL_SUCCESS)
 	{
 		fprintf(stderr, "GPU fatal error: clEnqueueWriteBuffer() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	err = clEnqueueWriteBuffer(GPU_command_queue, memB, CL_TRUE, 0, sizeof(double) * sizeB, ptrB, 0, NULL, NULL);
 	if (err != CL_SUCCESS)
 	{
@@ -103,18 +122,27 @@ void GPU_mmul(double* ptrR, double* ptrA, double* ptrB, size_t rowsA, size_t col
 		exit(1);
 	}
 	//Load and compile program
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	cl_program program = clCreateProgramWithSource(GPU_context, 1, (const char**)(&gpu_mmul_cl), (const size_t*)(&gpu_mmul_cl_len), &err);
 	if (err != CL_SUCCESS)
 	{
 		fprintf(stderr, "GPU fatal error: clCreateProgramWithSource() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	err = clBuildProgram(program, 1, &GPU_device_id, NULL, NULL, NULL);
 	if (err != CL_SUCCESS)
 	{
 		fprintf(stderr, "GPU fatal error: clBuildProgram() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	//Setup kernel
 	cl_kernel kernel = clCreateKernel(program, "gpu_mmul", &err);
 	if (err != CL_SUCCESS)
@@ -122,36 +150,54 @@ void GPU_mmul(double* ptrR, double* ptrA, double* ptrB, size_t rowsA, size_t col
 		fprintf(stderr, "GPU fatal error: clCreateKernel() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	err = clSetKernelArg(kernel, 0, sizeof(cl_mem), (void*)&memR);
 	if (err != CL_SUCCESS)
 	{
 		fprintf(stderr, "GPU fatal error: clSetKernelArg() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	err = clSetKernelArg(kernel, 1, sizeof(cl_mem), (void*)&memA);
 	if (err != CL_SUCCESS)
 	{
 		fprintf(stderr, "GPU fatal error: clSetKernelArg() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	err = clSetKernelArg(kernel, 2, sizeof(cl_mem), (void*)&memB);
 	if (err != CL_SUCCESS)
 	{
 		fprintf(stderr, "GPU fatal error: clSetKernelArg() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	err = clSetKernelArg(kernel, 3, sizeof(int), &rowsA);
 	if (err != CL_SUCCESS)
 	{
 		fprintf(stderr, "GPU fatal error: clSetKernelArg() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	err = clSetKernelArg(kernel, 4, sizeof(int), &colsB);
 	if (err != CL_SUCCESS)
 	{
 		fprintf(stderr, "GPU fatal error: clSetKernelArg() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	//Run the program
 	size_t work_size[] = {rowsA, colsB};
 	err = clEnqueueNDRangeKernel(GPU_command_queue, kernel, 2, NULL, work_size, NULL, 0, NULL, NULL);
@@ -160,6 +206,9 @@ void GPU_mmul(double* ptrR, double* ptrA, double* ptrB, size_t rowsA, size_t col
 		fprintf(stderr, "GPU fatal error: clEnqueueNDRangeKernel() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	//Wait for completion
 	err = clFlush(GPU_command_queue);
 	if (err != CL_SUCCESS)
@@ -167,12 +216,18 @@ void GPU_mmul(double* ptrR, double* ptrA, double* ptrB, size_t rowsA, size_t col
 		fprintf(stderr, "GPU fatal error: clFlush() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	err = clFinish(GPU_command_queue);
 	if (err != CL_SUCCESS)
 	{
 		fprintf(stderr, "GPU fatal error: clFinish() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	//Read results
 	err = clEnqueueReadBuffer(GPU_command_queue, memR, CL_TRUE, 0, sizeof(double) * sizeR, ptrR, 0, NULL, NULL);
 	if (err != CL_SUCCESS)
@@ -181,6 +236,9 @@ void GPU_mmul(double* ptrR, double* ptrA, double* ptrB, size_t rowsA, size_t col
 		exit(1);
 	}
 
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	//Clean up
 	err = clReleaseKernel(kernel);
 	if (err != CL_SUCCESS)
@@ -188,34 +246,52 @@ void GPU_mmul(double* ptrR, double* ptrA, double* ptrB, size_t rowsA, size_t col
 		fprintf(stderr, "GPU fatal error: clReleaseKernel() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	err = clReleaseProgram(program);
 	if (err != CL_SUCCESS)
 	{
 		fprintf(stderr, "GPU fatal error: clReleaseProgram() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	err = clReleaseMemObject(memA);
 	if (err != CL_SUCCESS)
 	{
 		fprintf(stderr, "GPU fatal error: clReleaseMemObject() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	err = clReleaseMemObject(memB);
 	if (err != CL_SUCCESS)
 	{
 		fprintf(stderr, "GPU fatal error: clReleaseMemObject() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	err = clReleaseMemObject(memR);
 	if (err != CL_SUCCESS)
 	{
 		fprintf(stderr, "GPU fatal error: clReleaseMemObject() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 	err = clReleaseMemObject(memR);
 	if (err != CL_SUCCESS)
 	{
 		fprintf(stderr, "GPU fatal error: clReleaseMemObject() failed.\n");
 		exit(1);
 	}
+	#ifdef GPU_DEBUG
+	printf("Line %d.\n", __LINE__);
+	#endif
 }
\ No newline at end of file