У меня есть программа (не моя - загруженная из i-net), созданная на потоках ATI (точнее - на ручье lang - файл * .br).Существует скрипт python (см. Ниже), который компилирует его в файл * .il с помощью компилятора Brook, предоставляемого ATI streams SDK.После этого скрипт архивирует его в файл * .Z.Make-файл 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-й серии со следующей ошибкой
В фоновом режиме обнаружена неподдерживаемая программная конструкция
Вот скрипт Python
#!/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
Вопрос: что мне сделать, чтобы программа "поддерживалась"?PS Есть одна проблема - я вообще не знаю эту технологию (ручей, потоки ATI, OpenCL).Вот почему советы типа «ты должен попробовать то или иное» бесполезны.Мне нужно предпринять конкретные действия - измените это, и вы добьетесь успеха :) Спасибо.