mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-11 15:27:53 +00:00
Revert "Preinitialise the devices only once on startup."
This reverts commit 071a0ad2f1
.
This commit is contained in:
parent
b1289a0159
commit
cf543507c6
3
main.c
3
main.c
@ -4040,9 +4040,6 @@ int main (int argc, char *argv[])
|
|||||||
#ifdef HAVE_OPENCL
|
#ifdef HAVE_OPENCL
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
if (nDevs > 0)
|
|
||||||
preinit_devices();
|
|
||||||
|
|
||||||
/* start GPU mining threads */
|
/* start GPU mining threads */
|
||||||
for (j = 0; j < nDevs * opt_g_threads; j++) {
|
for (j = 0; j < nDevs * opt_g_threads; j++) {
|
||||||
int gpu = j % nDevs;
|
int gpu = j % nDevs;
|
||||||
|
209
ocl.c
209
ocl.c
@ -52,8 +52,6 @@ char *file_contents(const char *filename, int *length)
|
|||||||
return (char*)buffer;
|
return (char*)buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cl_uint numDevices;
|
|
||||||
|
|
||||||
int clDevicesNum() {
|
int clDevicesNum() {
|
||||||
cl_int status = 0;
|
cl_int status = 0;
|
||||||
|
|
||||||
@ -113,95 +111,6 @@ int clDevicesNum() {
|
|||||||
return numDevices;
|
return numDevices;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cl_platform_id platform = NULL;
|
|
||||||
static cl_device_id *devices;
|
|
||||||
|
|
||||||
int preinit_devices(void)
|
|
||||||
{
|
|
||||||
cl_int status;
|
|
||||||
cl_uint numPlatforms;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
status = clGetPlatformIDs(0, NULL, &numPlatforms);
|
|
||||||
if (status != CL_SUCCESS)
|
|
||||||
{
|
|
||||||
applog(LOG_ERR, "Error: Getting Platforms. (clGetPlatformsIDs)");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (numPlatforms > 0)
|
|
||||||
{
|
|
||||||
cl_platform_id* platforms = (cl_platform_id *)malloc(numPlatforms*sizeof(cl_platform_id));
|
|
||||||
status = clGetPlatformIDs(numPlatforms, platforms, NULL);
|
|
||||||
if (status != CL_SUCCESS)
|
|
||||||
{
|
|
||||||
applog(LOG_ERR, "Error: Getting Platform Ids. (clGetPlatformsIDs)");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(i = 0; i < numPlatforms; ++i)
|
|
||||||
{
|
|
||||||
char pbuff[100];
|
|
||||||
status = clGetPlatformInfo( platforms[i], CL_PLATFORM_VENDOR, sizeof(pbuff), pbuff, NULL);
|
|
||||||
if (status != CL_SUCCESS)
|
|
||||||
{
|
|
||||||
applog(LOG_ERR, "Error: Getting Platform Info. (clGetPlatformInfo)");
|
|
||||||
free(platforms);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
platform = platforms[i];
|
|
||||||
if (!strcmp(pbuff, "Advanced Micro Devices, Inc."))
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free(platforms);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (platform == NULL) {
|
|
||||||
perror("NULL platform found!\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 0, NULL, &numDevices);
|
|
||||||
if (status != CL_SUCCESS)
|
|
||||||
{
|
|
||||||
applog(LOG_ERR, "Error: Getting Device IDs (num)");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (numDevices > 0 ) {
|
|
||||||
devices = (cl_device_id *)malloc(numDevices*sizeof(cl_device_id));
|
|
||||||
|
|
||||||
/* Now, get the device list data */
|
|
||||||
|
|
||||||
status = clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, numDevices, devices, NULL);
|
|
||||||
if (status != CL_SUCCESS)
|
|
||||||
{
|
|
||||||
applog(LOG_ERR, "Error: Getting Device IDs (list)");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
applog(LOG_INFO, "List of devices:");
|
|
||||||
|
|
||||||
unsigned int i;
|
|
||||||
for(i=0; i<numDevices; i++) {
|
|
||||||
char pbuff[100];
|
|
||||||
status = clGetDeviceInfo(devices[i], CL_DEVICE_NAME, sizeof(pbuff), pbuff, NULL);
|
|
||||||
if (status != CL_SUCCESS)
|
|
||||||
{
|
|
||||||
applog(LOG_ERR, "Error: Getting Device Info");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
applog(LOG_INFO, "\t%i\t%s", i, pbuff);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else return -1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int advance(char **area, unsigned *remaining, const char *marker)
|
static int advance(char **area, unsigned *remaining, const char *marker)
|
||||||
{
|
{
|
||||||
char *find = memmem(*area, *remaining, marker, strlen(marker));
|
char *find = memmem(*area, *remaining, marker, strlen(marker));
|
||||||
@ -267,6 +176,7 @@ void patch_opcodes(char *w, unsigned remaining)
|
|||||||
_clState *initCQ(_clState *clState, unsigned int gpu)
|
_clState *initCQ(_clState *clState, unsigned int gpu)
|
||||||
{
|
{
|
||||||
cl_int status = 0;
|
cl_int status = 0;
|
||||||
|
cl_device_id *devices = clState->devices;
|
||||||
|
|
||||||
/* create a cl program executable for all the devices specified */
|
/* create a cl program executable for all the devices specified */
|
||||||
status = clBuildProgram(clState->program, 1, &devices[gpu], NULL, NULL, NULL);
|
status = clBuildProgram(clState->program, 1, &devices[gpu], NULL, NULL, NULL);
|
||||||
@ -316,10 +226,109 @@ _clState *initCl(unsigned int gpu, char *name, size_t nameSize)
|
|||||||
{
|
{
|
||||||
int patchbfi = 0;
|
int patchbfi = 0;
|
||||||
cl_int status = 0;
|
cl_int status = 0;
|
||||||
size_t nDevices;
|
unsigned int i;
|
||||||
|
|
||||||
_clState *clState = calloc(1, sizeof(_clState));
|
_clState *clState = calloc(1, sizeof(_clState));
|
||||||
|
|
||||||
|
cl_uint numPlatforms;
|
||||||
|
cl_platform_id platform = NULL;
|
||||||
|
status = clGetPlatformIDs(0, NULL, &numPlatforms);
|
||||||
|
if (status != CL_SUCCESS)
|
||||||
|
{
|
||||||
|
applog(LOG_ERR, "Error: Getting Platforms. (clGetPlatformsIDs)");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (numPlatforms > 0)
|
||||||
|
{
|
||||||
|
cl_platform_id* platforms = (cl_platform_id *)malloc(numPlatforms*sizeof(cl_platform_id));
|
||||||
|
status = clGetPlatformIDs(numPlatforms, platforms, NULL);
|
||||||
|
if (status != CL_SUCCESS)
|
||||||
|
{
|
||||||
|
applog(LOG_ERR, "Error: Getting Platform Ids. (clGetPlatformsIDs)");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i = 0; i < numPlatforms; ++i)
|
||||||
|
{
|
||||||
|
char pbuff[100];
|
||||||
|
status = clGetPlatformInfo( platforms[i], CL_PLATFORM_VENDOR, sizeof(pbuff), pbuff, NULL);
|
||||||
|
if (status != CL_SUCCESS)
|
||||||
|
{
|
||||||
|
applog(LOG_ERR, "Error: Getting Platform Info. (clGetPlatformInfo)");
|
||||||
|
free(platforms);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
platform = platforms[i];
|
||||||
|
if (!strcmp(pbuff, "Advanced Micro Devices, Inc."))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(platforms);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (platform == NULL) {
|
||||||
|
perror("NULL platform found!\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t nDevices;
|
||||||
|
cl_uint numDevices;
|
||||||
|
status = clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 0, NULL, &numDevices);
|
||||||
|
if (status != CL_SUCCESS)
|
||||||
|
{
|
||||||
|
applog(LOG_ERR, "Error: Getting Device IDs (num)");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
cl_device_id *devices;
|
||||||
|
if (numDevices > 0 ) {
|
||||||
|
devices = (cl_device_id *)malloc(numDevices*sizeof(cl_device_id));
|
||||||
|
clState->devices = devices;
|
||||||
|
|
||||||
|
/* Now, get the device list data */
|
||||||
|
|
||||||
|
status = clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, numDevices, devices, NULL);
|
||||||
|
if (status != CL_SUCCESS)
|
||||||
|
{
|
||||||
|
applog(LOG_ERR, "Error: Getting Device IDs (list)");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
applog(LOG_INFO, "List of devices:");
|
||||||
|
|
||||||
|
unsigned int i;
|
||||||
|
for(i=0; i<numDevices; i++) {
|
||||||
|
char pbuff[100];
|
||||||
|
status = clGetDeviceInfo(devices[i], CL_DEVICE_NAME, sizeof(pbuff), pbuff, NULL);
|
||||||
|
if (status != CL_SUCCESS)
|
||||||
|
{
|
||||||
|
applog(LOG_ERR, "Error: Getting Device Info");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
applog(LOG_INFO, "\t%i\t%s", i, pbuff);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gpu < numDevices) {
|
||||||
|
char pbuff[100];
|
||||||
|
status = clGetDeviceInfo(devices[gpu], CL_DEVICE_NAME, sizeof(pbuff), pbuff, &nDevices);
|
||||||
|
if (status != CL_SUCCESS)
|
||||||
|
{
|
||||||
|
applog(LOG_ERR, "Error: Getting Device Info");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
applog(LOG_INFO, "Selected %i: %s", gpu, pbuff);
|
||||||
|
strncpy(name, pbuff, nameSize);
|
||||||
|
} else {
|
||||||
|
applog(LOG_ERR, "Invalid GPU %i", gpu);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else return NULL;
|
||||||
|
|
||||||
cl_context_properties cps[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties)platform, 0 };
|
cl_context_properties cps[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties)platform, 0 };
|
||||||
|
|
||||||
clState->context = clCreateContextFromType(cps, CL_DEVICE_TYPE_GPU, NULL, NULL, &status);
|
clState->context = clCreateContextFromType(cps, CL_DEVICE_TYPE_GPU, NULL, NULL, &status);
|
||||||
@ -329,22 +338,6 @@ _clState *initCl(unsigned int gpu, char *name, size_t nameSize)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gpu < numDevices) {
|
|
||||||
char pbuff[100];
|
|
||||||
status = clGetDeviceInfo(devices[gpu], CL_DEVICE_NAME, sizeof(pbuff), pbuff, &nDevices);
|
|
||||||
if (status != CL_SUCCESS)
|
|
||||||
{
|
|
||||||
applog(LOG_ERR, "Error: Getting Device Info");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
applog(LOG_INFO, "Selected %i: %s", gpu, pbuff);
|
|
||||||
strncpy(name, pbuff, nameSize);
|
|
||||||
} else {
|
|
||||||
applog(LOG_ERR, "Invalid GPU %i", gpu);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check for BFI INT support. Hopefully people don't mix devices with
|
/* Check for BFI INT support. Hopefully people don't mix devices with
|
||||||
* and without it! */
|
* and without it! */
|
||||||
char * extensions = malloc(1024);
|
char * extensions = malloc(1024);
|
||||||
|
2
ocl.h
2
ocl.h
@ -18,11 +18,11 @@ typedef struct {
|
|||||||
cl_uint preferred_vwidth;
|
cl_uint preferred_vwidth;
|
||||||
size_t max_work_size;
|
size_t max_work_size;
|
||||||
size_t work_size;
|
size_t work_size;
|
||||||
|
cl_device_id *devices;
|
||||||
} _clState;
|
} _clState;
|
||||||
|
|
||||||
extern char *file_contents(const char *filename, int *length);
|
extern char *file_contents(const char *filename, int *length);
|
||||||
extern int clDevicesNum();
|
extern int clDevicesNum();
|
||||||
extern int preinit_devices(void);
|
|
||||||
extern _clState *initCQ(_clState *clState, unsigned int gpu);
|
extern _clState *initCQ(_clState *clState, unsigned int gpu);
|
||||||
extern _clState *initCl(unsigned int gpu, char *name, size_t nameSize);
|
extern _clState *initCl(unsigned int gpu, char *name, size_t nameSize);
|
||||||
#endif /* HAVE_OPENCL */
|
#endif /* HAVE_OPENCL */
|
||||||
|
Loading…
Reference in New Issue
Block a user