Обработка больших mxArrays в файлах MEX на C

Двоичные файлы MEX, созданные на 64-разрядных платформах, могут обрабатывать 64-разрядные mxArrays. Эти большие массивы данных могут иметь до 248-1 элемент. Максимальное количество элементов разреженного mxArray может иметь значение 248-2.

Использование следующих инструкций также создает независимые от платформы двоичные файлы MEX.

Ваше системное строение может повлиять на эффективность MATLAB®. Требование к 64-разрядному процессору позволяет вам создать mxArray и доступ к данным в нем. Однако системная память, в частности размер оперативной и виртуальной памяти, определяют скорость, с которой MATLAB обрабатывает mxArray. Чем больше доступной памяти, тем быстрее обработка.

Объем оперативной памяти также ограничивает объем данных, которые можно обработать за один раз в MATLAB. Для руководства по вопросам памяти смотрите Стратегии эффективного использования памяти.

Использование 64-Bit API

Сигнатуры функций API, показанных в следующей таблице, используют mwSize или mwIndex типы для работы с 64-разрядной mxArray. Переменные, используемые в исходном коде для вызова этих функций, должны быть правильным типом.

C mxArray Функции, использующие mwSize/ mwIndex

mxCalcSingleSubscriptmxGetJc
mxCallocmxGetM
mxCreateCellArraymxGetN
mxCreateCellMatrixmxGetNumberOfDimensions
mxCreateCharArraymxGetNumberOfElements
mxCreateCharMatrixFromStringsmxGetNzmax
mxCreateDoubleMatrixmxGetProperty
mxCreateLogicalArraymxGetString
mxCreateLogicalMatrixmxMalloc
mxCreateNumericArraymxRealloc
mxCreateNumericMatrixmxSetCell
mxCreateSparsemxSetDimensions
mxCreateSparseLogicalMatrixmxSetField
mxCreateStructArraymxSetFieldByNumber
mxCreateStructMatrixmxSetIr
mxGetCellmxSetJc
mxGetDimensionsmxSetM
mxGetElementSizemxSetN
mxGetFieldmxSetNzmax
mxGetFieldByNumbermxSetProperty
mxGetIr 

Пример

Пример, arraySize.c в matlabroot/ extern/examples/mex, показывает требования к памяти больших mxArrays. Чтобы увидеть пример, откройте arraySize.c в редакторе MATLAB.

Эта функция требует одного положительного скалярного числового входа, который она использует для создания квадратной матрицы. Он проверяет размер входа, чтобы убедиться, что ваша система теоретически может создать матрицу этого размера. Если вход действителен, он отображает размер mxArray в килобайтах.

Создайте этот файл MEX.

mex arraySize.c

Запустите файл MEX.

arraySize(2^10)
Dimensions: 1024 x 1024
Size of array in kilobytes: 1024

Если в вашей системе недостаточно памяти для создания массива, MATLAB отображает Out of memory ошибка.

Можно экспериментировать с этой функцией, чтобы проверить эффективность и пределы обработки больших массивов в вашей системе.

Предупреждение с использованием отрицательных значений

При использовании 64-битного API, mwSize и mwIndex эквивалентны size_t в C/C + +. Этот тип не подписан, в отличие от int, который является типом, используемым в 32-битном API. Будьте осторожны, чтобы не передать какие-либо отрицательные значения функциям, которые берут mwSize или mwIndex аргументы. Не приводите отрицательные int значений в mwSize или mwIndex; возвращенное значение невозможно предсказать. Вместо этого измените код, чтобы избежать использования отрицательных значений.

Создание кросс-платформенных приложений

Если вы разрабатываете программы, которые могут работать как на 32-битной, так и на 64-битных архитектурах, обратите внимание на верхний предел значений для mwSize и mwIndex. 32-битное приложение читает эти значения и присваивает их переменным, объявленным как int в C/C + +. Будьте осторожны, чтобы избежать назначения большогоmwSize или mwIndex значение для int или другой переменной, которая может быть слишком маленькой.

См. также

| |