Код: Выделить всё
#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
}
Код: Выделить всё
xcrun -sdk macosx metal -fcikernel -c test.metal -o test.air
xcrun -sdk macosx metallib test.air -o test.metallib
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 test.py -framework 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