Le goulot d'étranglement dans mon programme calcule le signe d'un nombre pour tous les nombres dans un tableau, lorsque la taille du tableau est très grande. Je montre les deux approches que j'ai essayées ci-dessous, toutes deux avec des résultats similaires. J'ai 16GB de RAM, et le tableau occupe ~ 5GB. Le problème que je vois est la fonction de signe prend beaucoup de RAM + mémoire virtuelle. Quelqu'un sait-il un moyen de réduire les besoins en mémoire et accélérer ce processus pour mettre le signe de l'entrée de tableau dans la sortie du tableau (voir ci-dessous)?Matlab: existe-t-il un moyen d'accélérer le calcul du signe d'un nombre?
L'utilisation d'une boucle for avec les commandes if ou switch ne manque pas de mémoire, mais prend une heure pour se terminer (bien trop longtemps).
size = 1e9; % size of large array (just an example, could be larger)
output = int8(zeros(size,1)-1); % preallocate to -1
input = single(rand(size,1)); % create random array between 0 and 1
scalar = single(0.5); % just a scalar number, set to 0.5 (midpoint) for example
% approach 1 (comment out when using approach 2)
output = int8(sign(input - scalar)); % this line of code uses a ton of RAM and virtual memory
% approach 2
output(input>scalar) = 1; % this line of code uses a ton of RAM and virtual memory
output(input==scalar) = 0; % this line of code uses a ton of RAM and virtual memory
Merci d'avance pour toute suggestion.
Avez-vous essayé une implémentation C en utilisant un fichier MEX? –
Quelle plage de valeurs attendez-vous dans votre tableau actuel de valeurs à simple précision? – gnovice
N'a pas essayé un fichier MEX. – ggkmath