Потоки ATI провалились на AMD 7970 серии - PullRequest
0 голосов
/ 05 марта 2012

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

1 Ответ

1 голос
/ 06 марта 2012

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

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

...