OpenCL Fixes
Still not fully working and hardcoded device number
This commit is contained in:
parent
8043f1ae60
commit
9075f3f5e6
|
@ -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)
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user