Различные ошибки при загрузке библиотеки Metal в Python (ошибка сегментации, ошибка шины, уничтожено,...)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Различные ошибки при загрузке библиотеки Metal в Python (ошибка сегментации, ошибка шины, уничтожено,...)

Сообщение Anonymous »

Я пытаюсь использовать шейдер металла в Python. Поскольку я застрял с загрузкой библиотеки, я написал очень простой пример:

Код: Выделить всё

#include 
using namespace metal;

kernel void helloWorldKernel(device uint *output [[ buffer(0) ]],
uint id [[ thread_position_in_grid ]]) {
// Assign a constant value to the output buffer
output[id] = 42; // This sets the value at index id to 42
}
Скомпилировал его с помощью (обратите внимание на флаг fcikernel, который, по-видимому, необходим, в XCode я бы иначе получил сообщение «символы не найдены для цели: air64-apple-ios12.0.0» после обновления xcode в xcode 12"

Код: Выделить всё

xcrun -sdk macosx metal -fcikernel -c test.metal -o test.air
xcrun -sdk macosx metallib test.air -o test.metallib
Вот как я пытаюсь загрузить библиотеку в свой класс Python:
def init(self):# Создайте устройство Metal
self.device = MTLCreateSystemDefaultDevice()
если self.device имеет значение None:
вызовите исключение («Metal не поддерживается на этом устройстве».)

Код: Выделить всё

# Load the Metal library from the metallib file
metallib_path = "test.metallib"  # Ensure this path is correct
try:
with open(metallib_path, "rb") as f:
metallib_data = f.read()
except IOError as e:
raise Exception(f"Failed to read the Metal library file: {e}")

print('Load the Metal library')
# Load the Metal library
error = objc.nil  # We need to capture the error if it occurs
self.library, error = self.device.newLibraryWithData_error_(metallib_data, objc.nil)
if self.library is None:
raise Exception(f"Failed to load Metal library. Error: {error}")
Теперь я запускаю скрипт Python с помощью:

Код: Выделить всё

python test.py -framework Metal
Я получаю несколько сообщений об ошибках после «Загрузить библиотеку Metal», я запускаю приведенную выше строку несколько раз, иногда получаю разные сообщения, всегда одно из них:

Убито: 9
Ошибка сегментации: 11
Ошибка шины: 10

Но в какой-то момент я получаю следующее:

Исключение: не удалось загрузить библиотеку Metal. Ошибка: Ошибка
Domain=MTLLibraryErrorDomain Code=1 «Неверный файл библиотеки (неожиданный
конец файла)» UserInfo={NSLocalizedDescription=Неверный файл библиотеки
(неожиданный конец файла)

Библиотека есть, она не пустая, ошибок компилятора не возникает. И похоже, что у меня тут какие-то проблемы с памятью. Но я полностью застрял.
//UPDATE
Следует упомянуть: я попытался сослаться на сам файл Metal, например, на эту хорошую отправную точку:
https://gist.github.com/alvinwan/f7bb0c ... 944fc5c679
Он использует newLibraryWithSource_options_error_ вместо newLibraryWithData_error_. Который загрузит исходный файл, но в конечном итоге остановится с этой ошибкой:

ошибка: символы не найдены для цели «air64-apple-macosx14.6.0»

То же самое происходит, когда я компилирую его в XCode без каких-либо изменений в настройке сборки. Мне нужно добавить флаг -fcikernel, тогда исходники будут скомпилированы до конца.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ault-bus-e
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»