OpenCL Fixes

Still not fully working and hardcoded device number
This commit is contained in:
mailchuck 2015-10-02 15:04:16 +02:00
parent 7ee299919e
commit 4ab255d430
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: