Обработка Большого mxArrays
в Файлах MEX на CБинарные файлы MEX основывались на 64-битных платформах, может обработать 64-битный mxArray
s. Эти большие массивы данных могут иметь до 248-1 элемента. Максимальное количество элементов разреженный mxArray
может иметь 248-2.
Используя следующие инструкции создает платформенно независимые бинарные файлы MEX также.
Ваша конфигурация системы может влиять на производительность MATLAB®. 64-битное требование процессора позволяет вам создать mxArray
и данные о доступе в нем. Однако системная память, в частности размер Оперативной и виртуальной памяти, определяет скорость, на которой MATLAB обрабатывает mxArray
. Чем больше доступной памяти, тем быстрее обработка.
Сумма RAM также ограничивает объем данных, который можно обработать одновременно в MATLAB. Для руководства на проблемах памяти см. Стратегии Эффективного использования Памяти.
Подписи API-функций, показанных в следующей таблице, используют mwSize
или mwIndex
типы, чтобы работать с 64-битным mxArray
. Переменные, которые вы используете в своем исходном коде, чтобы вызвать эти функции, должны быть правильным типом.
C mxArray
Функции Используя mwSize
/mwIndex
mxCalcSingleSubscript | mxGetJc |
mxCalloc | mxGetM |
mxCreateCellArray | mxGetN |
mxCreateCellMatrix | mxGetNumberOfDimensions |
mxCreateCharArray | mxGetNumberOfElements |
mxCreateCharMatrixFromStrings | mxGetNzmax |
mxCreateDoubleMatrix | mxGetProperty |
mxCreateLogicalArray | mxGetString |
mxCreateLogicalMatrix | mxMalloc |
mxCreateNumericArray | mxRealloc |
mxCreateNumericMatrix | mxSetCell |
mxCreateSparse | mxSetDimensions |
mxCreateSparseLogicalMatrix | mxSetField |
mxCreateStructArray | mxSetFieldByNumber |
mxCreateStructMatrix | mxSetIr |
mxGetCell | mxSetJc |
mxGetDimensions | mxSetM |
mxGetElementSize | mxSetN |
mxGetField | mxSetNzmax |
mxGetFieldByNumber | mxSetProperty |
mxGetIr |
Пример, arraySize.c
в
, показывает требования к памяти большого matlabroot
/extern/examples/mexmxArray
s. Чтобы видеть пример, откройте 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
или другая переменная, которая может слишком быть малой.