У меня есть прога (не моя - скачана из инета) сделанная на ATI потоках (точнее - на ручном языке - файл *.br). Существует скрипт python (см. ниже), который компилирует его в файл *.il с помощью компилятора brook, предоставляемого ATI streams SDK. После этого скрипт заархивирует его в файл *.Z. Makefile C-программы содержит этот код
my_kernel_dp11.o: my_kernel_dp11.Z
ld -s -r -o my_kernel_dp11.o -b binary my_kernel_dp11.Z
а затем он связан с основным исполняемым файлом. Данные из этого obj-файла считываются C-программой в какой-то буфер, а затем вызываются функцией calclCompile (насколько я понимаю, это функция OpenCL). Он отлично работает на AMD HD серии 6970, но не работает на AMD HD серии 7970 со следующей ошибкой.
В серверной части обнаружена неподдерживаемая конструкция программы
Вот скрипт на питоне
#!/usr/bin/python
import sys
import zlib
import os
def makebrz(dp_bits):
try:
os.unlink("a_slice_dpX_a_slicer.il")
except OSError:
pass
dpdefs=""
for i in range(dp_bits-11):
dpdefs = dpdefs + " -D DP_BIT_%i" % (i+12,)
print "DP_DEFS: ", dpdefs
os.system("/usr/local/atibrook/sdk/bin/brcc -k -pp %s a_slice_dpX.br" % (dpdefs,) )
f = open("a_slice_dpX_a_slicer.il")
if f==None:
print "Could not read ", sys.argv[1]
sys.exit(-1)
data = f.read()
f.close()
oname = "../my_kernel_dp%i.Z" % (dp_bits,)
data2 = zlib.compress(data)
fo = open( oname, "wb" )
fo.write(data2)
fo.close()
#os.system("ld -s -r -o ../%s.o -b binary %s" % (oname[:-2],oname))
makebrz(11)
makebrz(12)
makebrz(13)
makebrz(14)
А вот программа http://dl.dropbox.com/u/46469564/a_slice_dpX.br
Вопрос: что мне сделать, чтобы программа "поддерживала"? P.S. Есть одна проблема - я вообще не знаю эту технологию (ручейки, ATI streams, OpenCL). Поэтому советы типа «попробуй то-то и то-то» бесполезны. Мне нужно сделать конкретное действие - измените это, и у вас все получится :) Спасибо.