driver-opencl.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #ifndef BFG_DRIVER_OPENCL
  2. #define BFG_DRIVER_OPENCL
  3. #include <float.h>
  4. #include <stdbool.h>
  5. #include "CL/cl.h"
  6. #ifdef HAVE_SENSORS
  7. #include <sensors/sensors.h>
  8. #endif
  9. #include "miner.h"
  10. #define MIN_SHA_INTENSITY -10
  11. #define MAX_SHA_INTENSITY 14
  12. #define MIN_SCRYPT_INTENSITY 8
  13. #define MAX_SCRYPT_INTENSITY 31
  14. #ifdef USE_SCRYPT
  15. #define MIN_INTENSITY (opt_scrypt ? MIN_SCRYPT_INTENSITY : MIN_SHA_INTENSITY)
  16. #define MAX_INTENSITY (opt_scrypt ? MAX_SCRYPT_INTENSITY : MAX_SHA_INTENSITY)
  17. #define MAX_GPU_INTENSITY MAX_SCRYPT_INTENSITY
  18. #else
  19. #define MIN_INTENSITY MIN_SHA_INTENSITY
  20. #define MAX_INTENSITY MAX_SHA_INTENSITY
  21. #define MAX_GPU_INTENSITY MAX_SHA_INTENSITY
  22. #endif
  23. enum opencl_binary_usage {
  24. OBU_DEFAULT = 0,
  25. OBU_LOAD = 1,
  26. OBU_SAVE = 2,
  27. OBU_LOADSAVE = 3,
  28. OBU_NONE = 4,
  29. };
  30. static const float intensity_not_set = FLT_MAX;
  31. struct opencl_device_data {
  32. bool mapped;
  33. int virtual_gpu;
  34. int virtual_adl;
  35. unsigned long oclthreads;
  36. float intensity;
  37. char *_init_intensity;
  38. bool dynamic;
  39. cl_uint vwidth;
  40. size_t work_size;
  41. char *kernel_file;
  42. cl_ulong max_alloc;
  43. enum opencl_binary_usage opt_opencl_binaries;
  44. #ifdef USE_SCRYPT
  45. int opt_lg, lookup_gap;
  46. size_t opt_tc, thread_concurrency;
  47. size_t shaders;
  48. #endif
  49. struct timeval tv_gpustart;
  50. int intervals;
  51. #ifdef HAVE_ADL
  52. bool has_adl;
  53. struct gpu_adl adl;
  54. int gpu_engine;
  55. int min_engine;
  56. int gpu_fan;
  57. int min_fan;
  58. int gpu_memclock;
  59. int gpu_memdiff;
  60. int gpu_powertune;
  61. float gpu_vddc;
  62. #endif
  63. #ifdef HAVE_SENSORS
  64. const sensors_chip_name *sensor;
  65. #endif
  66. };
  67. extern double oclthreads_to_intensity(unsigned long oclthreads, bool is_sha256d);
  68. extern unsigned long intensity_to_oclthreads(double intensity, bool is_sha256d);
  69. extern unsigned long xintensity_to_oclthreads(double xintensity, cl_uint max_compute_units);
  70. extern bool opencl_set_intensity_from_str(struct cgpu_info *, const char *newvalue);
  71. struct opencl_work_data {
  72. cl_uint ctx_a; cl_uint ctx_b; cl_uint ctx_c; cl_uint ctx_d;
  73. cl_uint ctx_e; cl_uint ctx_f; cl_uint ctx_g; cl_uint ctx_h;
  74. cl_uint cty_a; cl_uint cty_b; cl_uint cty_c; cl_uint cty_d;
  75. cl_uint cty_e; cl_uint cty_f; cl_uint cty_g; cl_uint cty_h;
  76. cl_uint merkle; cl_uint ntime; cl_uint nbits;
  77. cl_uint fW0; cl_uint fW1; cl_uint fW2; cl_uint fW3; cl_uint fW15;
  78. cl_uint fW01r; cl_uint fcty_e; cl_uint fcty_e2;
  79. cl_uint W16; cl_uint W17; cl_uint W2;
  80. cl_uint PreVal4; cl_uint T1;
  81. cl_uint C1addK5; cl_uint D1A; cl_uint W2A; cl_uint W17_2;
  82. cl_uint PreVal4addT1; cl_uint T1substate0;
  83. cl_uint PreVal4_2;
  84. cl_uint PreVal0;
  85. cl_uint PreW18;
  86. cl_uint PreW19;
  87. cl_uint PreW31;
  88. cl_uint PreW32;
  89. /* For diakgcn */
  90. cl_uint B1addK6, PreVal0addK7, W16addK16, W17addK17;
  91. cl_uint zeroA, zeroB;
  92. cl_uint oneA, twoA, threeA, fourA, fiveA, sixA, sevenA;
  93. #ifdef USE_SCRYPT
  94. struct work *work;
  95. #endif
  96. };
  97. extern void opencl_early_init();
  98. extern char *print_ndevs_and_exit(int *ndevs);
  99. extern void *reinit_gpu(void *userdata);
  100. extern char *set_gpu_map(char *arg);
  101. extern const char *set_gpu_engine(char *arg);
  102. extern const char *set_gpu_fan(char *arg);
  103. extern const char *set_gpu_memclock(char *arg);
  104. extern const char *set_gpu_memdiff(char *arg);
  105. extern const char *set_gpu_powertune(char *arg);
  106. extern const char *set_gpu_threads(char *arg);
  107. extern const char *set_gpu_vddc(char *arg);
  108. extern const char *set_temp_overheat(char *arg);
  109. extern const char *set_intensity(char *arg);
  110. extern const char *set_vector(char *arg);
  111. extern const char *set_worksize(char *arg);
  112. #ifdef USE_SCRYPT
  113. extern const char *set_shaders(char *arg);
  114. extern const char *set_lookup_gap(char *arg);
  115. extern const char *set_thread_concurrency(char *arg);
  116. #endif
  117. extern enum cl_kernels select_kernel(const char *);
  118. extern const char *opencl_get_kernel_interface_name(const enum cl_kernels);
  119. extern const char *opencl_get_default_kernel_filename(const enum cl_kernels);
  120. extern const char *set_kernel(char *arg);
  121. extern void write_config_opencl(FILE *);
  122. void manage_gpu(void);
  123. extern void opencl_dynamic_cleanup();
  124. extern void pause_dynamic_threads(int gpu);
  125. extern bool have_opencl;
  126. extern int opt_platform_id;
  127. extern bool opt_opencl_binaries;
  128. extern struct device_drv opencl_api;
  129. #endif /* __DEVICE_GPU_H__ */