Обработка Большого mxArrays в Файлах MEX на C

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

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

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

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

Используя 64-битный 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 или другая переменная, которая может слишком быть малой.

Смотрите также

| |