Skip to content

Commit 6479aab

Browse files
committed
Added an option to use host-allocated dataset
1 parent be5d405 commit 6479aab

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed

RandomX_OpenCL/RandomX_OpenCL.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ int main(int argc, char** argv)
4444
uint32_t bfactor = 5;
4545
uint32_t high_precision = 1;
4646
bool portable = false;
47+
bool dataset_host_allocated = false;
4748
bool validate = false;
4849

4950
for (int i = 1; i < argc; ++i)
@@ -64,12 +65,14 @@ int main(int argc, char** argv)
6465
high_precision = 0;
6566
else if (strcmp(argv[i], "--portable") == 0)
6667
portable = true;
68+
else if (strcmp(argv[i], "--dataset_host") == 0)
69+
dataset_host_allocated = true;
6770
else if (strcmp(argv[i], "--validate") == 0)
6871
validate = true;
6972
}
7073

7174
if (strcmp(argv[1], "--mine") == 0)
72-
return test_mining(platform_id, device_id, intensity, start_nonce, workers_per_hash, bfactor, high_precision, portable, validate) ? 0 : 1;
75+
return test_mining(platform_id, device_id, intensity, start_nonce, workers_per_hash, bfactor, high_precision, portable, dataset_host_allocated, validate) ? 0 : 1;
7376
else if (strcmp(argv[1], "--test") == 0)
7477
return tests(platform_id, device_id, intensity) ? 0 : 1;
7578

RandomX_OpenCL/miner.cpp

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ along with RandomX OpenCL. If not, see <http://www.gnu.org/licenses/>.
3131

3232
using namespace std::chrono;
3333

34-
bool test_mining(uint32_t platform_id, uint32_t device_id, size_t intensity, uint32_t start_nonce, uint32_t workers_per_hash, uint32_t bfactor, uint32_t high_precision, bool portable, bool validate)
34+
bool test_mining(uint32_t platform_id, uint32_t device_id, size_t intensity, uint32_t start_nonce, uint32_t workers_per_hash, uint32_t bfactor, uint32_t high_precision, bool portable, bool dataset_host_allocated, bool validate)
3535
{
3636
std::cout << "Initializing GPU #" << device_id << " on OpenCL platform #" << platform_id << std::endl << std::endl;
3737

@@ -104,14 +104,18 @@ bool test_mining(uint32_t platform_id, uint32_t device_id, size_t intensity, uin
104104
intensity -= (intensity & 63);
105105

106106
const size_t dataset_size = randomx_dataset_item_count() * RANDOMX_DATASET_ITEM_SIZE;
107-
ALLOCATE_DEVICE_MEMORY(dataset_gpu, ctx, dataset_size);
108-
109-
std::cout << "Allocated " << (dataset_size / 1048576.0) << " MB dataset" << std::endl;
107+
cl_int err;
108+
cl_mem dataset_gpu = nullptr;
109+
if (!dataset_host_allocated)
110+
{
111+
dataset_gpu = clCreateBuffer(ctx.context, CL_MEM_READ_ONLY, dataset_size, nullptr, &err);
112+
CL_CHECK_RESULT(clCreateBuffer);
113+
std::cout << "Allocated " << (dataset_size / 1048576.0) << " MB dataset on GPU" << std::endl;
114+
}
110115
std::cout << "Initializing dataset...";
111116

112117
randomx_dataset *myDataset;
113118
bool large_pages_available = true;
114-
cl_int err;
115119
{
116120
auto t1 = high_resolution_clock::now();
117121

@@ -162,11 +166,21 @@ bool test_mining(uint32_t platform_id, uint32_t device_id, size_t intensity, uin
162166
}
163167
}
164168

165-
CL_CHECKED_CALL(clEnqueueWriteBuffer, ctx.queue, dataset_gpu, CL_TRUE, 0, dataset_size, randomx_get_dataset_memory(myDataset), 0, nullptr, nullptr);
169+
if (!dataset_host_allocated)
170+
{
171+
CL_CHECKED_CALL(clEnqueueWriteBuffer, ctx.queue, dataset_gpu, CL_TRUE, 0, dataset_size, randomx_get_dataset_memory(myDataset), 0, nullptr, nullptr);
172+
}
166173

167174
std::cout << "done in " << (duration_cast<nanoseconds>(high_resolution_clock::now() - t1).count() / 1e9) << " seconds" << std::endl;
168175
}
169176

177+
if (dataset_host_allocated)
178+
{
179+
dataset_gpu = clCreateBuffer(ctx.context, CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR, dataset_size, randomx_get_dataset_memory(myDataset), &err);
180+
CL_CHECK_RESULT(clCreateBuffer);
181+
std::cout << "Using host-allocated " << (dataset_size / 1048576.0) << " MB dataset" << std::endl;
182+
}
183+
170184
ALLOCATE_DEVICE_MEMORY(scratchpads_gpu, ctx, intensity * (SCRATCHPAD_SIZE + 64));
171185
std::cout << "Allocated " << intensity << " scratchpads\n" << std::endl;
172186

RandomX_OpenCL/miner.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,4 @@ along with RandomX OpenCL. If not, see <http://www.gnu.org/licenses/>.
1919

2020
#pragma once
2121

22-
bool test_mining(uint32_t platform_id, uint32_t device_id, size_t intensity, uint32_t start_nonce, uint32_t workers_per_hash, uint32_t bfactor, uint32_t high_precision, bool portable, bool validate);
22+
bool test_mining(uint32_t platform_id, uint32_t device_id, size_t intensity, uint32_t start_nonce, uint32_t workers_per_hash, uint32_t bfactor, uint32_t high_precision, bool portable, bool dataset_host_allocated, bool validate);

0 commit comments

Comments
 (0)