Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,9 @@ jobs:
-lOpenCL \
-O3 \
-pthread \
-march=native \
-DCL_HPP_TARGET_OPENCL_VERSION=300 \
-DBOINC -Iboinc/ -Lboinc/lib/lin -lcuda -lboinc_api -lboinc
-march=sandybridge \
-DCL_HPP_TARGET_OPENCL_VERSION=200 \
-DBOINC -Iboinc/ -Lboinc/lib/lin -lcuda -lboinc_api -lboinc -lboinc_opencl

- uses: actions/upload-artifact@v4
with:
Expand All @@ -97,14 +97,16 @@ jobs:
steps:
- uses: actions/checkout@v2
- uses: msys2/setup-msys2@v2
with:
msystem: MSYS
- name: setup
run: |
msys2 -c 'wget https://github.com/GPUOpen-LibrariesAndSDKs/OCL-SDK/files/1406216/lightOCLSDK.zip -O amdocl.zip'
jar xf amdocl.zip
- name: build
run: |
echo "D:\a\diamond-ore-veins\diamond-ore-veins\lib\x86_64\;D:\a\diamond-ore-veins\diamond-ore-veins\include\" >> $GITHUB_PATH
g++ -w -static -m64 -Ofast -lstdc++ .\opencl_main.cpp -o ${{ github.event.repository.name }}-opencl.exe -LD:\a\diamond-ore-veins\diamond-ore-veins\lib\x86_64\ -ID:\a\diamond-ore-veins\diamond-ore-veins\include\ -ID:\a\diamond-ore-veins\diamond-ore-veins\boinc\ -ID:\a\diamond-ore-veins\diamond-ore-veins\boinc\win\ -LD:\a\diamond-ore-veins\diamond-ore-veins\boinc\lib\win\ -lboinc_api -lboinc -lboinc_opencl -lOpenCL -D_WIN64 -DWIN64 -D_WIN32 -DWIN32 -DCL_HPP_ENABLE_EXCEPTIONS
g++ -w -static -m64 -Ofast -lstdc++ .\opencl_main.cpp -o ${{ github.event.repository.name }}-opencl.exe -LD:\a\diamond-ore-veins\diamond-ore-veins\lib\x86_64\ -ID:\a\diamond-ore-veins\diamond-ore-veins\include\ -ID:\a\diamond-ore-veins\diamond-ore-veins\boinc\ -ID:\a\diamond-ore-veins\diamond-ore-veins\boinc\win\ -LD:\a\diamond-ore-veins\diamond-ore-veins\boinc\lib\win\ -lboinc_api -lboinc -lboinc_opencl -lOpenCL -DBOINC -D_WIN64 -DWIN64 -D_WIN32 -DWIN32 -DCL_HPP_ENABLE_EXCEPTIONS

dir

Expand Down
Binary file removed boinc/lib/win/boinc.lib
Binary file not shown.
Binary file removed boinc/lib/win/boinc_api.lib
Binary file not shown.
Binary file removed boinc/lib/win/boinc_graphics2.lib
Binary file not shown.
Binary file removed boinc/lib/win/boinc_opencl.lib
Binary file not shown.
Binary file added boinc/lib/win/libboinc.a
Binary file not shown.
Binary file added boinc/lib/win/libboinc_api.a
Binary file not shown.
Binary file added boinc/lib/win/libboinc_graphics2.a
Binary file not shown.
Binary file added boinc/lib/win/libboinc_opencl.a
Binary file not shown.
6 changes: 3 additions & 3 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@

g++ -o cl opencl_main.cpp -lOpenCL \
-O3 \
-march=native \
-DCL_HPP_TARGET_OPENCL_VERSION=300 \
-DBOINC -Iboinc/ -Lboinc/lib/lin -lcuda -lboinc_api -lboinc
-march=sandybridge \
-DCL_HPP_TARGET_OPENCL_VERSION=200 \
-Iboinc/ -Lboinc/lib/lin -lcuda -lboinc_api -lboinc_opencl -lboinc
1 change: 1 addition & 0 deletions main.cu
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include <inttypes.h>

#ifdef BOINC
#include "boinc_opencl.h"
#include "boinc_api.h"
#if defined _WIN32 || defined _WIN64
#include "boinc_win.h"
Expand Down
124 changes: 60 additions & 64 deletions opencl_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ using namespace std::chrono;

#ifdef BOINC
#include "boinc_api.h"
#include "boinc_opencl.h"
#if defined _WIN32 || defined _WIN64
#include "boinc_win.h"
#endif
Expand Down Expand Up @@ -161,13 +162,6 @@ inline float rng_next_float(__private RNG *rng) {
return xNextFloat(&rng->internal);
}

inline double rng_next_double(__private RNG *rng) {
int i = (int)rng_next(rng, 26);
int j = (int)rng_next(rng, 27);
u64 k = ((u64)i << 27) + (u64)j;
return (double)k * 1.110223e-16;
}

inline int rng_next_between_inclusive(__private RNG *rng, int i, int j) {
return rng_next_int(rng, (u32)(j - i + 1)) + i;
}
Expand Down Expand Up @@ -282,7 +276,8 @@ __kernel void seed_kernel(u64 offset, __global u64 *out, volatile __global u32 *
(void)rng_next_int(&rng, 3);
(void)rng_next_int(&rng, 3);
for (int j = 0; j < 8; j++) {
(void)rng_next_double(&rng);
(void)rng_next(&rng, 26);
(void)rng_next(&rng, 26);
}
}

Expand All @@ -295,12 +290,22 @@ int main(int argc, char **argv) {
uint64_t block_min = 0;
uint64_t block_max = 0;
uint64_t checked = 0;
int device = 0;
cl_device_id cl_device = 0;
cl_platform_id platform = 0;
cl_int err;

int non_boinc_device = 0;
int non_boinc_platform = 0;

for (int i = 1; i < argc; i += 2) {
const char *param = argv[i];
if (strcmp(param, "-d") == 0 || strcmp(param, "--device") == 0) {
device = atoi(argv[i + 1]);
} else if (strcmp(param, "-s") == 0 || strcmp(param, "--start") == 0) {
sscanf(argv[i + 1], "%llu", &non_boinc_device);
}
else if (strcmp(param, "-p") == 0 || strcmp(param, "--platform") == 0) {
sscanf(argv[i + 1], "%llu", &non_boinc_platform);
}
else if (strcmp(param, "-s") == 0 || strcmp(param, "--start") == 0) {
sscanf(argv[i + 1], "%llu", &block_min);
} else if (strcmp(param, "-e") == 0 || strcmp(param, "--end") == 0) {
sscanf(argv[i + 1], "%llu", &block_max);
Expand All @@ -320,33 +325,20 @@ int main(int argc, char **argv) {
boinc_init_options(&options);
APP_INIT_DATA aid;
boinc_get_init_data(aid);
if (aid.gpu_device_num >= 0) {
//If BOINC client provided us a device ID
device = aid.gpu_device_num;
fprintf(stderr,"boinc gpu %i gpuindex: %i \n", aid.gpu_device_num, device);
} else {
//If BOINC client did not provide us a device ID
device = -5;
for (int i = 1; i < argc; i += 2) {
//Check for a --device flag, just in case we missed it earlier, use it if it's available. For older clients primarily.
if(strcmp(argv[i], "--device") == 0){
sscanf(argv[i + 1], "%i", &device);
}

}
if(device == -5){
//Something has gone wrong. It pulled from BOINC, got -1. No --device parameter present.
fprintf(stderr, "Error: No --device parameter provided! Defaulting to device 0...\n");
device = 0;
}
fprintf(stderr,"stndalone gpuindex %i (aid value: %i)\n", device, aid.gpu_device_num);
}

int retval = boinc_get_opencl_ids(&cl_device, &platform);
if (retval != CL_SUCCESS) {
fprintf(stderr, "Error occurred obtaining opencl_ids from boinc: %d\n", err);
}
if (cl_device != nullptr && platform != nullptr) {
//If BOINC client provided us a device ID
fprintf(stderr, "boinc gpu %i platform: %i \n", cl_device, platform);
}

FILE *checkpoint_data = boinc_fopen("checkpoint.txt", "rb");
if(!checkpoint_data){
//No checkpoint file was found. Proceed from the beginning.
fprintf(stderr, "No checkpoint to load\n");

}
else{
//Load from checkpoint. You can put any data in data_store that you need to keep between runs of this program.
Expand All @@ -359,53 +351,57 @@ int main(int argc, char **argv) {
fclose(checkpoint_data);
boinc_end_critical_section();
}
#endif
// cudaSetDevice(device);
// opencl setup start

cl_int err;

std::vector<cl::Platform> all_platforms;
err = cl::Platform::get(&all_platforms);
if (err != CL_SUCCESS) {
fprintf(stderr, "OpenCL error: %d\n", err);
exit(1);
}
cl::Device device(cl_device);
#else
std::vector<cl::Platform> all_platforms;
err = cl::Platform::get(&all_platforms);
if (err != CL_SUCCESS) {
fprintf(stderr, "OpenCL error: %d\n", err);
exit(1);
}

if (all_platforms.size() < 1) {
fprintf(stderr, "No OpenCL platform found!\n");
exit(1);
}
if (all_platforms.size() < 1) {
fprintf(stderr, "No OpenCL platform found!\n");
exit(1);
}

std::vector<cl::Device> all_devices;
err = all_platforms[0].getDevices(CL_DEVICE_TYPE_ALL, &all_devices);
if (err != CL_SUCCESS) {
fprintf(stderr, "OpenCL error: %d\n", err);
exit(1);
}
std::vector<cl::Device> all_devices;
err = all_platforms[non_boinc_platform].getDevices(CL_DEVICE_TYPE_ALL, &all_devices);
if (err != CL_SUCCESS) {
fprintf(stderr, "OpenCL error: %d\n", err);
exit(1);
}

if (all_devices.size() < 1) {
fprintf(stderr, "No OpenCL device found!\n");
exit(1);
}
if (all_devices.size() < 1) {
fprintf(stderr, "No OpenCL device found!\n");
exit(1);
}

cl::Device cl_device;
cl::Device device = all_devices[non_boinc_device];
#endif
// cudaSetDevice(device);
// opencl setup start
printf("starting...\n");

cl::Context ctx;
cl::Program program;

cl_device = all_devices[device];
ctx = cl::Context({cl_device});
// cl_device = all_devices[device];
ctx = cl::Context({device});

cl::Program::Sources sources;
sources.push_back({kernel_source, strlen(kernel_source)});
program = cl::Program(ctx, sources);
err = program.build({cl_device});
err = program.build({device});
if (err != CL_SUCCESS) {
std::string buildLog = program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(device);
std::cerr << "Build Log:\n" << buildLog << std::endl;

fprintf(stderr, "OpenCL error: %d\n", err);
exit(1);
}

cl::CommandQueue queue(ctx, cl_device);
cl::CommandQueue queue(ctx, device);

cl::Buffer cl_out(ctx, CL_MEM_READ_WRITE, sizeof(uint64_t) * 512);
cl::Buffer result_count(ctx, CL_MEM_READ_WRITE, sizeof(uint32_t));
Expand Down
Loading