Will multi threading provide any performance boost?

Soy nuevo en la programación en general, así que tenlo en cuenta cuando respondas mi pregunta.

Tengo un programa que toma una gran matriz 3D (1 billón de elementos) y resume los elementos a lo largo de varios ejes para producir una matriz 2D de una proyección de cada lado de los datos. El problema aquí es que requiere mucha memoria ya que el programa está constantemente obteniendo información de la memoria, tanto de lectura como de escritura.

La pregunta es, ¿obtendré algún aumento en el rendimiento si multihilo el programa o terminaré encontrándome con un cuello de botella en el acceso a la RAM? Cuando digo multiproceso, solo me refiero a multihilo para 2 o 4 núcleos, no más.

Si ayuda, la configuración actual de mi computadora es 2.4ghz core2 quad, 1033 fsb, 4gb ram a 667mhz.

Gracias por adelantado,

- Fake

Editar:

Me parece que la gente aquí está mucho más interesada en esta pregunta que primero había esperado. Ampliaré la pregunta y publicaré algún código para aquellos que estén interesados.

En primer lugar, un poco de historia sobre mí para que entiendas de dónde vengo. Soy un estudiante graduado de ingeniería mecánica que de alguna manera logró elegir un tema que prácticamente no tuvo nada que ver con la ingeniería mecánica. Tomé 1 curso de introducción a Java (forzado) hace aproximadamente 5 años y nunca toqué la programación hasta hace aproximadamente un mes, cuando comencé mi tesis en serio. También tomé (una vez más forzado, todavía no sé por qué) un curso de electrónica e ingeniería informática, tratamos con microcontroladores (8 bits), su funcionamiento interno y algunos códigos ASM para ellos. Aparte de eso, no sé casi nada sobre programación.

Aquí está el código:

int dim = 1000;
int steps = 7 //ranges from 1 to  255

for (int stage = 1; stage < steps; stage++)
for (int j = 0; j < dim; j++)
    for (int i = 0; i < dim; i++)
    {
        sum = 0;
        for (int k = 0; k < dim; k++)
            if (partMap[(((i * dim) + k) * dim) + j] >= stage)
                sum++;

        projection[(j*dim) + i] = sum;
    } 

Esta sección de código opera solo en el eje z. Los datos principales, debido a la forma en que se construyeron, tienen un sistema de direccionamiento extraño, pero no tiene que preocuparse por eso. También hay otro código para hacer las proyecciones de otros lados del cubo, pero hacen cosas muy diferentes.

Respuestas a la pregunta(19)

Su respuesta a la pregunta