У меня есть Java-код, который требует интенсивных вычислений, которые я хотел бы переслать в C ++ с использованием JNI.
Моя основная задача состоит в том, чтобы все данные были сериализованы в памяти, а затем пересылать вычисления в GPU.
Так какданные получены в Java, но основные вычисления выполняются с использованием C ++, я думал о том, чтобы расположить все данные непрерывно в необработанном массиве (ByteBuffer
или необработанных байтах из Unsafe
), в той же структуре, что и объект C ++.
Например, предположим, у меня есть точка с x
и y
.В C ++ объект имеет размер 24 байта.8 байтов для (я думаю) VTable, 8 байтов для x
и 8 байтов для y
.
Так что в Java я бы расположил все данные в одной структуре и передал буфер в C ++ с помощью JNI, а в C ++ привел его к массиву точек.
Это сработало, и япозволяя себе предположить, что я всегда буду использовать один и тот же компилятор C ++, тот же JDK, ту же ОС и то же HW (по крайней мере, для проверки возможности решения).
Мой вопрос заключается в том, верны ли эти предположения, илиЕсть ли лучший способ передачи сериализованных данных между Java и C ++ (я должен использовать JNI, а не какой-нибудь IPC)?