Потоки ATI не работали на AMD серии 7970

У меня есть прога (не моя - скачана из инета) сделанная на 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). Поэтому советы типа «попробуй то-то и то-то» бесполезны. Мне нужно сделать конкретное действие - измените это, и у вас все получится :) Спасибо.


person borisbn    schedule 05.03.2012    source источник


Ответы (1)


AFAIK Radeon HD7970 построен на архитектуре GCN, поэтому, если вы используете brook для генерации кода IL, JIT на южном острове может не знать, как сгенерировать правильную ISA для используемого вами оборудования, поэтому, если вы хотите продолжать использовать brook+, тогда вам нужно подождать, пока обновленная версия Brook+ не будет выпущена на sourceforge, которая может сгенерировать IL, который будет преобразован в правильную ISA (GCN).

Другой вариант — использовать AMD APP SDK 2.6 и переписать свой код в OpenCL.

person kiranputtur    schedule 06.03.2012
comment
Грустно. Я видел sourceforge - последний ручей+ от 2009-го года. Другой вариант (OpenCL) использовать не могу, так как не знаю ни ручья, ни OpenCL... Тем не менее спасибо. - person borisbn; 06.03.2012