OpenCL Fixes

Still not fully working and hardcoded device number
This commit is contained in:
mailchuck 2015-10-02 15:04:16 +02:00 committed by Peter Surda
parent 8043f1ae60
commit 9075f3f5e6
2 changed files with 22 additions and 20 deletions

View File

@ -1,31 +1,28 @@
import numpy #!/usr/bin/env python2.7
from struct import pack, unpack from struct import pack, unpack
import time import time
import hashlib import hashlib
import random import random
import pyopencl as cl import os
hash_dt = numpy.dtype([('target', numpy.uint64), ('v', numpy.str_, 73)])
ctx = False ctx = False
queue = False queue = False
program = False program = False
try: try:
if (len(cl.get_platforms()) > 0): import numpy
ctx = cl.create_some_context() import pyopencl as cl
queue = cl.CommandQueue(ctx) hash_dt = numpy.dtype([('target', numpy.uint64), ('v', numpy.str_, 73)])
if (len(cl.get_platforms()) > 0):
#f = open('/usr/src/PyBitmessage/src/kernel.cl', 'r') ctx = cl.create_some_context()
import os queue = cl.CommandQueue(ctx)
print "working directory: " + os.getcwd() full_path = os.path.dirname(os.path.realpath(__file__))
# time.sleep(5) f = open(os.path.join(full_path, 'kernel.cl'), 'r')
f = open('kernel.cl', 'r') fstr = ''.join(f.readlines())
fstr = ''.join(f.readlines()) program = cl.Program(ctx, fstr).build(options="")
program = cl.Program(ctx, fstr).build()
except Exception as e: except Exception as e:
print "opencl fail:" + str(e) print "opencl fail:" + str(e)
# time.sleep(5) ctx = False
ctx = False
def has_opencl(): def has_opencl():
return (ctx != False) return (ctx != False)
@ -43,7 +40,7 @@ def do_opencl_pow(hash, target):
dest_buf = cl.Buffer(ctx, cl.mem_flags.WRITE_ONLY, output.nbytes) dest_buf = cl.Buffer(ctx, cl.mem_flags.WRITE_ONLY, output.nbytes)
kernel = program.kernel_sha512 kernel = program.kernel_sha512
worksize = kernel.get_work_group_info(cl.kernel_work_group_info.WORK_GROUP_SIZE, cl.get_platforms()[0].get_devices()[0]) worksize = kernel.get_work_group_info(cl.kernel_work_group_info.WORK_GROUP_SIZE, cl.get_platforms()[0].get_devices()[1])
kernel.set_arg(0, hash_buf) kernel.set_arg(0, hash_buf)
kernel.set_arg(1, dest_buf) kernel.set_arg(1, dest_buf)

View File

@ -73,7 +73,7 @@ def _doFastPoW(target, initialHash):
return result[0], result[1] return result[0], result[1]
time.sleep(0.2) time.sleep(0.2)
def _doGPUPow(target, initialHash): def _doGPUPoW(target, initialHash):
print "GPU POW\n" print "GPU POW\n"
nonce = openclpow.do_opencl_pow(initialHash.encode("hex"), target) nonce = openclpow.do_opencl_pow(initialHash.encode("hex"), target)
trialValue, = unpack('>Q',hashlib.sha512(hashlib.sha512(pack('>Q',nonce) + initialHash).digest()).digest()[0:8]) trialValue, = unpack('>Q',hashlib.sha512(hashlib.sha512(pack('>Q',nonce) + initialHash).digest()).digest()[0:8])
@ -83,7 +83,12 @@ def _doGPUPow(target, initialHash):
def run(target, initialHash): def run(target, initialHash):
target = int(target) target = int(target)
if shared.safeConfigGetBoolean('bitmessagesettings', 'opencl') and openclpow.has_opencl(): if shared.safeConfigGetBoolean('bitmessagesettings', 'opencl') and openclpow.has_opencl():
return _doGPUPow(target, initialHash) # trialvalue1, nonce1 = _doGPUPoW(target, initialHash)
# trialvalue, nonce = _doFastPoW(target, initialHash)
# print "GPU: %s, %s" % (trialvalue1, nonce1)
# print "Fast: %s, %s" % (trialvalue, nonce)
# return [trialvalue, nonce]
return _doGPUPoW(target, initialHash)
elif frozen == "macosx_app" or not frozen: elif frozen == "macosx_app" or not frozen:
return _doFastPoW(target, initialHash) return _doFastPoW(target, initialHash)
else: else: