Agustin Perez Paladini | 24 Jul 18:36 2015
Picon

mignw 4.8.1 + variadic tempalte args

Buenas, estoy teniendo un problema y no entiendo que esta pasando exactamente...
Basicamente el problema es que un objeto desaparece completamente del codigo dependiendo de un argumento en la construccion de un objeto temporal sin tirar ningun warning ni error.
El codigo lo compile en win 8.1 con: g++ -o test test.cpp  -std=c++11 -Wall

El codigo:

#include <iostream>
#include <string>
#include <functional>
#include <tuple>


struct A {
A(int a = 0) {std::cout << "A::A()\n";}
A(const A&) {std::cout << "A::A(const A&)\n";}
A(A&&) {std::cout << "A::A(A&&)\n";}
};

struct B {
B(int a = 0) {std::cout << "B::B()\n";}
B(const B&) {std::cout << "B::B(const B&)\n";}
B(B&&) {std::cout << "B::B(B&&)\n";}

};


template<typename... Types>
struct Test {
    typedef std::tuple<Types...> vtype;
    vtype elements;
    
    Test(const Types&... args) : elements(std::make_tuple(args...))
    {   
        std::cout << "1 sizeof: " << sizeof...(args) << "\n";                
    }
    
    Test(Types&&... args) : elements(std::make_tuple(args...))
    {   
        std::cout << "2 sizeof: " << sizeof...(args) << "\n";  
    }
    Test() = delete;
    
    ~Test() {std::cout << "~Test()\n";}
};

int main(void)
{
    std::cout << "\nstart\n";    
    Test<A, B> test(A(1), B());
    std::cout << "\nend\n";
    return 0;
}

eso compila bien perfecto sin errores ni warnings y el output de eso es:

start
B::B()
A::A()
B::B(const B&)
A::A(const A&)
2 sizeof: 2

end
~Test()


Ahora si cambiamos esta linea:

Test<A, B> test(A(1), B());

por:

Test<A, B> test(A(), B());

compila tambien sin errores ni warnings pero el output es

start

end

Viendo el assambly basicamente no existe el objeto test (y el compiler ni si quiera tira un error ni un warning ni nada).. Asumo que esta relacionado con "SFINAE" pero capaz que no...

alguna idea?

Muchas gracias de antemano,
Salu!

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
RFOG | 22 Jul 13:10 2015
Picon

Variables de clase en std::thread

Esta no es mi semana, leches.

Os cuento.

Creo un thread de la siguiente manera:

m_thread = new std::thread(&EngineBase::ThreadFunction, this);


Hasta donde yo llego, al pasar this estoy pasando su propio objeto, por lo que el ThreadFunction es el de la propia instancia de this.

Sin embargo, las variables de clase (como por ejemplo un atomic<bool> que tengo para detener el thread) son una copia (lo sé porque miro la dirección de memoria).

Es decir, que thread copia mi objeto en lugar de usarlo.

Lo entendería si hiciera

m_thread = new std::thread(&EngineBase::ThreadFunction, *this);


¿En qué me estoy equivocando?

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Fernando Cacciola | 21 Jul 23:03 2015
Picon

Aguante stutrup :)

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
RFOG | 20 Jul 14:12 2015
Picon

Paso variable de argumentos

Lo más seguro que es una chorrada, pero llevo un buen rato y no consigo sacarle punta.

Tengo un método que recibe un número variable de argumentos, "a la C":

void Logger::Warning(std::wstring str, ...)
{
 va_list ap;
 va_start(ap, str);
 AppendImpl(LoggerLevels::Warning, str, ap);
 va_end(ap);
}

La firma de AppendImpl es

 void AppendImpl(LoggerLevels::Levels level, std::wstring str,va_list arglist);

Dentro de ella llamo a wvsprintf, pero la cadena formateada es basura.

Es decir, necesito pasar un número variable de argumentos con dos niveles de anidación... Yo no los proceso para nada, el trabajo se lo dejo a wvsprintf.

Con un nivel de anidación, es decir a la altura de Warning, sí que funciona, pero con dos no.

¿Cómo se hace?

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Daniel Uranga | 7 Jul 06:06 2015
Picon

[en C puro] *(char**) vs (char*)

tengo el siguiente código:

if( *(char**)vm->start == jit_handle_trap )

pregunto para estar seguro, sabiendo que vm->start es un puntero a
algo, el código anterior no deberia ser equivalente a:

if( (char*)vm->start == jit_handle_trap )

?

El código original me tira "warning: dereferencing type-punned pointer
will break strict-aliasing rules", que creo es innecesario si todos
los punteros tienen el mismo tamaño, o no?

-- 
--

-- 
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error. 
En caso de duda visita "http://groups.google.com/group/cppba"
--- 
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

Juan Manuel Ollé | 3 Jul 14:50 2015
Picon

Stack y cuando se crean los objetos

Estuve tratando de encontrar algo en el estandar referiado a como y cuando se crean los objetos locales en el stack y no pude encontrar nada al respecto asi que les pregunto

Esto es exactamente lo mismo?

void f(bool b){
      if(b) return;
      char arr[10000];
/* someting else */
}

a esto

void f(bool b){
      char arr[10000];
      if(b) return;
/* someting else */
}

que pasaria si en lugar de char fuese un tipo definido por el usuario?


--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Daniel Uranga | 1 Jul 18:58 2015
Picon

(unknown)

Consulta: ¿Alguien sabe si hay algún switch de compilador para g++ que
permita hacer lo mismo que poner "using namespace <algo>" en el
código?"

estilo "g++ -using-namespace pepe main.cpp -o app"

Saludos

-- 
--

-- 
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error. 
En caso de duda visita "http://groups.google.com/group/cppba"
--- 
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

Carlos Bederián | 1 Jul 07:33 2015
Picon

Re: juego mental

ARM NEON si. PowerPC no. Usa el backend de LLVM para la mayoría de las arquitecturas (salvo para knights corner que usa icc afaik), así que si no soporta algo supongo que es por falta de interés.

No, no probé.

On Mon, Jun 29, 2015 at 7:05 PM Fernando Pelliccioni <fpelliccioni-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
Interesante, voy a ver si el compiler es free y hacer algunas pruebas. ¿Solo soporta Intel? ¿PowerPC y ARM?

¿Probaste SIMD de Nt2?


On Monday, June 29, 2015, Carlos Bederián <zzzoom-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
La variante de C que usa ISPC.

On Mon, Jun 29, 2015 at 5:33 PM Fernando Pelliccioni <fpelliccioni-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
2015-06-21 22:33 GMT-03:00 Carlos Bederián <zzzoom-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:

Porque es lo que hace PCMPGTD en x86. No me fijé si vectoriza de la otra forma, llegué a probar el ejemplo original con #pragma simd de OpenMP 4 en gcc 4.9 y nada.

Bah, si es crítico usaría _mm_cmpgt_epi32 directamente, u otro lenguaje...


¿Qué lenguaje usarías?
 

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Re: juego mental

Salvo que vengan los que dicen que si escribís código que dependa de la aritmética en complemento a 2 no es portable......:-)



On 23/06/2015 14:58, Jorge Atala wrote:
ademas el -1 es independiente de la plataforma, poniendo ff te atas a una sola :)

El 23 de junio de 2015, 3:06, Carlos Bederián <zzzoom <at> gmail.com> escribió:
No Rafael, la idea es aplicar alguna transformación sin branches que devuelva 0 en caso de que sea menor a 127, y el mismo valor en caso contrario. Después si sumamos esos 0 no nos importa, no afectan el resultado.
Como a todos los elementos les aplicamos las mismas operaciones independientemente de sus valores, la expresión se puede vectorizar.

On Mon, Jun 22, 2015 at 5:13 AM RFOG Gmail <rafael.ontivero-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
LMQMP (La Madre Que Me Parió - Expresión castiza de España que podría sustituir a WTF).

¿Y la explicación Ubuntu (para humanos)? :-P

Bueno, en serio, tuve que Googlear pero creo (y solo creo) que lo entiendo. Al hacer la comparativa sobre números (registros) en lugar del indirecto del contenido del vector, se usa la instrucción, y como 0 & lo_que_sea es 0, el optimizador debería comerse esa parte.


El 22/6/2015, a las 3:33, Carlos Bederián <zzzoom-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escribió:

Porque es lo que hace PCMPGTD en x86. No me fijé si vectoriza de la otra forma, llegué a probar el ejemplo original con #pragma simd de OpenMP 4 en gcc 4.9 y nada.

Bah, si es crítico usaría _mm_cmpgt_epi32 directamente, u otro lenguaje...


On Sun, Jun 21, 2015, 9:59 AM RFOG Gmail <rafael.ontivero-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
Una pregunta:

¿Por qué 

sum += (vector[c] >= 128 ? -1 : 0) & vector[c];


y no

sum += (vector[c] >= 128 ? vector[c]: 0);

?


 
El 20/6/2015, a las 6:49, Carlos Bederián <zzzoom-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escribió:

Ah, no había leído lo de los flags. Para vectorizar uno querría calcular algo como:
sum += (vector[c] >= 128 ? -1 : 0) & vector[c];

Después rogamos que el compilador se percate, desenrolle en 4/8 y vectorice. Pero como no hay instrucción en SSE2 para comparación de packed unsigned int, todo es al pedo. Por eso decía de los ints, igual hay que ayudarlo bastante a gcc para que se entere.

On Fri, Jun 19, 2015 at 3:56 PM Jorge Atala <alanatala-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
tengo un haswell pero esta medido sobre un i7 920, creo que es viejito, debe ser un nehalem

El 19 de junio de 2015, 15:22, Carlos Bederián <zzzoom-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escribió:
Idea: probá de nuevo pero con int en vez de unsigned int.

On Fri, Jun 19, 2015 at 3:06 PM Fernando Pelliccioni <fpelliccioni <at> gmail.com> wrote:
Llegue tarde, estaba pensando lo mismo, pero no pude escribirlo antes (estaba lavando los platos ;))

El branch prediction facilita tener el "pipeline siempre full" (hablando burdamente).
Me imagino que Jorge debe tener un Haswell o un Sandy Bridge, creo que tienen un pipeline de 8 o 9 instrucciones, en un rato lo reviso en el manual.
Lo del intercambio de los loops es raro que GCC no lo haga, quizas algun flag especial??
Ahora leo la respuesta de SO.


2015-06-19 14:49 GMT-03:00 'Carlos Cattaneo' via CyC++ Buenos Aires <cppba-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>:
Sinceramente no conozco mucho sobre las instrucciones vectoriales.
Aunque me atrevo a hacer una pregunta de curioso:
Por qué hace falta que el vector esté ordenado si la operación "suma" es asociativa ?

Por otro lado se me hace difícil creer que el compilador asuma algo sobre el estado de una estructura de datos por el hecho de haber llamado a una función de una biblioteca (std::sort), aún cuando sea de la biblioteca standard.






On 19/06/2015 14:26, Nicolás Brailovsky wrote:
Mi pregunta viene porque la diferencia parece demasiado grande como para ser solamente branch prediction, y el vectorizador esta bastante inteligente estos dias. Si gcc puede deducir que el vector esta ordenado tranquilamente puede vectorizar esa operacion.

Nicolás Brailovsky


2015-06-19 19:11 GMT+02:00 'Carlos Cattaneo' via CyC++ Buenos Aires <cppba-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>:
Me imagino que es porque en el segundo caso el "branch prediction" casi siempre "acierta" (salvo un caso) ya que con el vector ordenado primero vienen los elementos menores que 128 y luego los mayores. Es decir, la condición del "if" está algunas veces en false al principio y luego todo el resto de las veces en true.




On 19/06/2015 13:11, Nicolás Brailovsky wrote:
Interesante. No tengo a mano un compilador para probar asi que pregunto: Flags de compilacion? Cambia la relacion entre f1 y f2 al desactivar optimizaciones? Y si desactivamos vectorizacion?



Nicolás Brailovsky


2015-06-19 15:18 GMT+02:00 Jorge Atala <alanatala-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
Buenas gente, mando algo para que charlemos un rato:

Supongan que la siguiente funcion recibe un vector de enteros aleatorios, y digamos que este vector tiene un 1<<15 elementos:

unsigned int function1(const std::vector<unsigned int>& vector) { unsigned int sum = 0; for (unsigned int i = 0; i < 100000; ++i) { for (unsigned c = 0; c < vector.size(); ++c) { if (vector[c] >= 128) sum += vector[c]; } } return sum; }


Y supongamos que a esa funcion le agrego un sort:

unsigned int function2(std::vector<unsigned int>& vector) { unsigned int sum = 0; std::sort(vector.begin(), vector.end()); for (unsigned int i = 0; i < 100000; ++i) { for (unsigned c = 0; c < vector.size(); ++c) { if (vector[c] >= 128) sum += vector[c]; } } return sum; }

La primera pregunta es: Cual de las dos funciones es mas performante en cuestion de tiempo?

Despues de pensar la pregunta, se puede pasar a la segunda, que incluye la respuesta, por eso esta mas abajo:








































Solucion:

en un core I7 920 <at> 3.5GHz:

function1 : 11.777 segundos
function2 : 2.352 segundos

Segunda pregunta: Porque ? :)

Saludos!


Jorge



--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.


--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.


--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.


--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.


--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

dgutson . | 21 Jun 05:45 2015
Picon

Chivo. Curso c++

Sres.

Disculpen que utilice este foro para ésto. Voy a dar un curso de C y C++ en Córdoba en Julio. Interesados x favor completen el formulario pero no respondan este mail para no crear más spam.
Asimismo agradezco difusión.
El cupo es de 10 personas.

Gracias,

    Daniel.

---------- Mensaje reenviado ----------
De: <danielgutson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Fecha: 21/6/2015 0:39
Asunto: Curso c++
Para: <Danielgutson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc:

If you have trouble viewing or submitting this form, you can fill it out in Google Forms.

Curso c++

* Required
Powered by
This content is neither created nor endorsed by Google.
Report Abuse - Terms of Service - Additional Terms

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Jorge Atala | 19 Jun 20:04 2015
Picon

Re: juego mental

No se que tan agresiva sea la optimizacion de vectorizacion, pero en este caso no creo que aplicarla sea una buena idea, ya que hay dependencias, la cuestion es evitar el branch, como dije recien

El 19 de junio de 2015, 15:01, Fernando Pelliccioni <fpelliccioni-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escribió:
Salvo que esté omitiendo algo, la vectorizacion es igual si el array (std::vector) esta ordenado o no.

2015-06-19 14:26 GMT-03:00 Nicolás Brailovsky <nicolasbrailo-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
Mi pregunta viene porque la diferencia parece demasiado grande como para ser solamente branch prediction, y el vectorizador esta bastante inteligente estos dias. Si gcc puede deducir que el vector esta ordenado tranquilamente puede vectorizar esa operacion.

Nicolás Brailovsky


2015-06-19 19:11 GMT+02:00 'Carlos Cattaneo' via CyC++ Buenos Aires <cppba <at> googlegroups.com>:
Me imagino que es porque en el segundo caso el "branch prediction" casi siempre "acierta" (salvo un caso) ya que con el vector ordenado primero vienen los elementos menores que 128 y luego los mayores. Es decir, la condición del "if" está algunas veces en false al principio y luego todo el resto de las veces en true.




On 19/06/2015 13:11, Nicolás Brailovsky wrote:
Interesante. No tengo a mano un compilador para probar asi que pregunto: Flags de compilacion? Cambia la relacion entre f1 y f2 al desactivar optimizaciones? Y si desactivamos vectorizacion?



Nicolás Brailovsky


2015-06-19 15:18 GMT+02:00 Jorge Atala <alanatala-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:
Buenas gente, mando algo para que charlemos un rato:

Supongan que la siguiente funcion recibe un vector de enteros aleatorios, y digamos que este vector tiene un 1<<15 elementos:

unsigned int function1(const std::vector<unsigned int>& vector) { unsigned int sum = 0; for (unsigned int i = 0; i < 100000; ++i) { for (unsigned c = 0; c < vector.size(); ++c) { if (vector[c] >= 128) sum += vector[c]; } } return sum; }


Y supongamos que a esa funcion le agrego un sort:

unsigned int function2(std::vector<unsigned int>& vector) { unsigned int sum = 0; std::sort(vector.begin(), vector.end()); for (unsigned int i = 0; i < 100000; ++i) { for (unsigned c = 0; c < vector.size(); ++c) { if (vector[c] >= 128) sum += vector[c]; } } return sum; }

La primera pregunta es: Cual de las dos funciones es mas performante en cuestion de tiempo?

Despues de pensar la pregunta, se puede pasar a la segunda, que incluye la respuesta, por eso esta mas abajo:








































Solucion:

en un core I7 920 <at> 3.5GHz:

function1 : 11.777 segundos
function2 : 2.352 segundos

Segunda pregunta: Porque ? :)

Saludos!


Jorge



--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe <at> googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
--
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
---
Has recibido este mensaje porque estás suscrito al grupo "CyC++ Buenos Aires" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a cppba+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Gmane