четверг, 22 января 2009 г.

Получение SPE идентификатора при построении вычислительной системы с использованием ALF на процессоре IBM CELL

Внезапно обнаружил, что используя бибилиотеку ALF как-то невозможно узнать идентификатор ядра, на котором выполняется workblock.
Например, библиотеки libspe или libspe2 предполагают автоматическую передачу идентификатора вычислительного ядра процессора CELL программному коду, выполняющемуся на нем, в то время как ALF ограничивает ресурсы программы, выполняющейся на вычислительном ядре исключительно контекстом рабочего блока и задачи, определяемыми пользователем в управляющем ядре PPE [*].
Таким образом, получается невозможным построение вычилсительной системы с нетривиальными связями между вычислительными ядрами процессора. Например, систолический алгоритм умножения матриц с передачей промежуточных результатов из одного вычислительного ядра в другое реализовать невозможно, сохраняя функциональность ALF.
Интересно, существует ли возможность какого-то совместного использования libspe2 и ALF. Что бы как-нибудь передать-таки идентификатор при создании вычислительной гранулы ALF, аналогично функции spe_create_thread из libspe2?

По материалам из:
1. Accelerated Library Framework for Cell Broadband Engine Programmer’s Guide and API Reference Version 3.0
2. SPE Runtime Management Library Version 1.2
3. SPE Runtime Management Library Version 2.2
4. SPE Runtime Management Library Version 1 to Version 2 Migration Guide