Newsgroup: it.lavoro.informatica
Titolo: java vs c++ - omp

Per chi non lo sapesse OMP e' un consorzio che si prefigge la specifica 

di api per il parallelismo

https://www.openmp.org/


L'elenco dei compilatori e tools elencati che supportano le api omp e' 

elancato qui

https://www.openmp.org/resources/openmp-compilers-tools/


Tra questi il supporto java e' mancante, ma comunque esiste un 

precompilatore java

https://github.com/omp4j/omp4j


oppure sul sito

http://www.omp4j.org/


Peccato che questo compilatore sia buggato e limitato sul supporto dello 

std omp (la versione 5.0) per cui non lo consiglio per la produzione

Se esistono altri precompilatori omp per java la risposta e' che non mi 

risulta.

Dopo questa premessa un bel benchmark sulla somma delle celle di un 

array a 2 dimensioni (una matrice)

Il parallelismo viene sfruttato sulla somma delle celle di ogni riga.

Per la matrice ho costruito una semplice classe matrix2



 >------ java Matrix2 -------

package enoquick;



public class Matrix2<T>  {

	public Matrix2(int rows,int cols,T init) {

		m_rows=rows;

		m_cols=cols;

		m_vector=new java.util.ArrayList<T>(size());

		for (int i=0;i < size();++i)

			m_vector.add(init);

	}

	public int rows() { return m_rows;}

	public int cols() { return m_cols;}

	public void scalar(int row,int col,T v) {

		assert row < rows();

		assert col < cols();

		m_vector.set(index(row,col),v);

	}

	public T scalar(int row,int col) {

		assert row < rows();

		assert col < cols();

		return m_vector.get(index(row,col));



	}

	private int index(int r,int c) { return r*m_cols + c;}

	private int size() { return m_rows * m_cols;}

	private int m_rows;

	private int m_cols;

	private java.util.ArrayList<T> m_vector;

}



--- java Main

class Main {

	private static class Matrix extends enoquick.Matrix2<Long> {

		public Matrix(int rows,int cols,long value) {

			super(rows,cols,value);

		}

	};

	static long calc(int r,Matrix m) {

		long v=0;

		for (int c=0; c < m.cols();++c)

			v += m.scalar(r,c);

		return v;

	}

	static long now() {

		return System.currentTimeMillis();

	}

	public  static void main(String[] args) {

		final int rows=Integer.parseInt(args[0]);

		final int cols=Integer.parseInt(args[1]);

		final int nthreads=Integer.parseInt(args[2]);

		final Matrix m=new Matrix(rows,cols,1);	

		long sum=0;

		final long t1=now();

		if (nthreads == 0) {

			for (int r=0; r < m.rows();++r)

				for (int c=0; c < m.cols();++c)

					sum += m.scalar(r,c);

		}

		else {

				//omp parallel for	public(sum) threadNum(2)

				for (int r=0; r < m.rows();++r) {

					long t=calc(r,m);

					// omp critical

					sum += t;

				}

				/*for*/

		} //if

		final long t2=now();

	 	System.out.println("java rows:" + rows + " threads: " + nthreads + " 

sum: " + sum + " time: " + (t2 - t1) + "ms");

	}

}



--- c++ matrix2.h ---

#ifndef ENOQUICK_MATRIX2_H

#define ENOQUICK_MATRIX2_H

#include <cassert>

#include <vector>



namespace enoquick {

	template <typename T>

	class matrix2 final {

		public:

			using value_type=T;

		private:

			using  vector_t=std::vector<value_type>;

		public:

			using size_type=typename vector_t::size_type;

			matrix2(size_type rows,size_type cols,const value_type& init={});

			size_type rows()const noexcept { return m_rows;}

			size_type cols()const noexcept { return m_cols;}

			value_type& scalar(size_type row,size_type col)noexcept;

			const value_type& scalar(size_type row,size_type col)const noexcept;

		private:

			size_type index(size_type r,size_type c)const noexcept { return 

r*m_cols + c;}

			size_type m_rows;

			size_type m_cols;

			vector_t m_vector;

	};



	template <typename T>

	inline matrix2<T>::matrix2(size_type rows,size_type cols,const 

value_type& init)

		: m_rows(rows)

		, m_cols(cols)

		, m_vector(rows * cols,init)

	{

	}



	template <typename T>

	inline typename matrix2<T>::value_type& matrix2<T>::scalar(size_type 

r,size_type c)noexcept {

		assert(r < rows());

		assert(c < cols());

		return m_vector[index(r,c)];

	}



	template <typename T>

	inline const typename matrix2<T>::value_type& 

matrix2<T>::scalar(size_type r,size_type c)const noexcept {

		assert(r < rows());

		assert(c < cols());

		return m_vector[index(r,c)];

	}

} //namespace

#endif



--- c++ main

#include <string>

#include <iostream>

#include <sstream>

#include <chrono>

#include "matrix2.h"

#include <omp.h>



template <typename T>

inline T convert(const char* s) {

	T n;

	std::istringstream os(s);

	os >> n;

	return n;

}





using ck_t=std::chrono::high_resolution_clock::time_point;



static inline ck_t now()  {

	return std::chrono::high_resolution_clock::now();

}



static inline long diff(const ck_t& t1,const ck_t& t2) {

	return std::chrono::duration_cast<std::chrono::milliseconds>(t2 - 

t1).count();

}



using matrix_type=enoquick::matrix2<long>;

using size_type=matrix_type::size_type;

using scalar_type=matrix_type::value_type;



static scalar_type calc(size_type r,const matrix_type& m) {

	scalar_type v={};

	for (size_type c={}; c < m.cols();++c)

		v += m.scalar(r,c);

	return v;

}



int main(int argc,char** argv) {

	++argv;

	const auto rows=convert<size_type>(*argv++);

	const auto cols=convert<size_type>(*argv++);

	const auto nthreads=convert<int>(*argv++);

	const matrix_type m{rows,cols,scalar_type{1}};

	scalar_type sum={};

	const auto t1=now();	

	if (!nthreads) {

		for (size_type r={}; r < m.rows();++r)

			for (size_type c={}; c < m.cols();++c)

				sum += m.scalar(r,c);

	}

	else {

		omp_set_num_threads(nthreads);

#pragma omp parallel shared(sum)	

		{

#pragma omp for

			for (auto r=size_type(); r < m.rows();++r) {

				auto s=calc(r,m);

#pragma omp atomic update

				sum += s;

			}				

		}

	}

	const auto t2=now();

  	std::cout << "c++  rows:" << rows << " threads: " << nthreads << " 

sum: " << sum << " time: " << diff(t1,t2)  << "ms" << std::endl;

}

---



--- script di lancio m.sh

#!/bin/bash

JAVA_HOME=/opt/jdk1.8.0_192

export PATH="$JAVA_HOME/bin:$PATH"

export LD_LIBRARY_PATH="$JAVA_HOME/lib:$LD_LIBRARY_PATH"

rm -f a.out *.class *.o MainP.java enoquick/*

javac -version

set -e

javac -d . Matrix2.java

javac -cp . Main.java

java  -jar omp4j.jar -d tmp -cp .:omp4j.jar  -n   Main.java

#adjust the source for omp4j bug

cat tmp/Main.java | perl -pe 

's/\/\*for\*\//sum=ompContext\.local_sum;/;s/DynamicExecutor\(2\)/DynamicExecutor(nthreads)/' 

 > MainP.java

javac -O -cp .:omp4j.jar MainP.java

g++-8 --version

g++-8 -O3 -fopenmp -std=c++17 -Wall -DNDEBUG main.cpp

columns=10000000

for rows in  1 2 3 4 5 6 7 8 9 10

do

	for threads in  0 1 2 3 4 5 6 7 8 9 10 11 12 13

	do

		[ $threads  -gt $(( $rows + 3 )) ] && continue

		java -disableassertions -disablesystemassertions Main  $rows $columns 

$threads

		./a.out $rows $columns  $threads

	done

done

-- la CPU

$lscpu | grep CPU

CPU op-mode(s):      32-bit, 64-bit

CPU(s):              4

On-line CPU(s) list: 0-3

CPU family:          6

Model name:          Intel(R) Core(TM) i5-4460  CPU @ 3.20GHz

CPU MHz:             798.202

CPU max MHz:         3400,0000

CPU min MHz:         800,0000

NUMA node0 CPU(s):   0-3



--- esecuzione

$ m.sh | tee log.txt

g++-8 (Ubuntu 8.2.0-1ubuntu2~18.04) 8.2.0

Copyright (C) 2018 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.



java rows:1 threads: 0 sum: 10000000 time: 17ms

c++  rows:1 threads: 0 sum: 10000000 time: 6ms

java rows:1 threads: 1 sum: 10000000 time: 21ms

c++  rows:1 threads: 1 sum: 10000000 time: 5ms

java rows:1 threads: 2 sum: 10000000 time: 21ms

c++  rows:1 threads: 2 sum: 10000000 time: 5ms

java rows:1 threads: 3 sum: 10000000 time: 20ms

c++  rows:1 threads: 3 sum: 10000000 time: 5ms

java rows:1 threads: 4 sum: 10000000 time: 21ms

c++  rows:1 threads: 4 sum: 10000000 time: 6ms

java rows:2 threads: 0 sum: 20000000 time: 32ms

c++  rows:2 threads: 0 sum: 20000000 time: 12ms

java rows:2 threads: 1 sum: 20000000 time: 47ms

c++  rows:2 threads: 1 sum: 20000000 time: 11ms

java rows:2 threads: 2 sum: 20000000 time: 25ms

c++  rows:2 threads: 2 sum: 20000000 time: 8ms

java rows:2 threads: 3 sum: 20000000 time: 23ms

c++  rows:2 threads: 3 sum: 20000000 time: 9ms

java rows:2 threads: 4 sum: 20000000 time: 24ms

c++  rows:2 threads: 4 sum: 20000000 time: 8ms

java rows:2 threads: 5 sum: 20000000 time: 23ms

c++  rows:2 threads: 5 sum: 20000000 time: 9ms

java rows:3 threads: 0 sum: 30000000 time: 39ms

c++  rows:3 threads: 0 sum: 30000000 time: 18ms

java rows:3 threads: 1 sum: 30000000 time: 54ms

c++  rows:3 threads: 1 sum: 30000000 time: 15ms

java rows:3 threads: 2 sum: 30000000 time: 49ms

c++  rows:3 threads: 2 sum: 30000000 time: 14ms

java rows:3 threads: 3 sum: 30000000 time: 27ms

c++  rows:3 threads: 3 sum: 30000000 time: 12ms

java rows:3 threads: 4 sum: 30000000 time: 26ms

c++  rows:3 threads: 4 sum: 30000000 time: 13ms

java rows:3 threads: 5 sum: 30000000 time: 26ms

c++  rows:3 threads: 5 sum: 30000000 time: 12ms

java rows:3 threads: 6 sum: 30000000 time: 26ms

c++  rows:3 threads: 6 sum: 30000000 time: 12ms

java rows:4 threads: 0 sum: 40000000 time: 46ms

c++  rows:4 threads: 0 sum: 40000000 time: 24ms

java rows:4 threads: 1 sum: 40000000 time: 62ms

c++  rows:4 threads: 1 sum: 40000000 time: 21ms

java rows:4 threads: 2 sum: 40000000 time: 56ms

c++  rows:4 threads: 2 sum: 40000000 time: 17ms

java rows:4 threads: 3 sum: 40000000 time: 52ms

c++  rows:4 threads: 3 sum: 40000000 time: 17ms

java rows:4 threads: 4 sum: 40000000 time: 34ms

c++  rows:4 threads: 4 sum: 40000000 time: 17ms

java rows:4 threads: 5 sum: 40000000 time: 30ms

c++  rows:4 threads: 5 sum: 40000000 time: 17ms

java rows:4 threads: 6 sum: 40000000 time: 32ms

c++  rows:4 threads: 6 sum: 40000000 time: 17ms

java rows:4 threads: 7 sum: 40000000 time: 32ms

c++  rows:4 threads: 7 sum: 40000000 time: 17ms

java rows:5 threads: 0 sum: 50000000 time: 54ms

c++  rows:5 threads: 0 sum: 50000000 time: 31ms

java rows:5 threads: 1 sum: 50000000 time: 70ms

c++  rows:5 threads: 1 sum: 50000000 time: 26ms

java rows:5 threads: 2 sum: 50000000 time: 62ms

c++  rows:5 threads: 2 sum: 50000000 time: 22ms

java rows:5 threads: 3 sum: 50000000 time: 56ms

c++  rows:5 threads: 3 sum: 50000000 time: 21ms

java rows:5 threads: 4 sum: 50000000 time: 38ms

c++  rows:5 threads: 4 sum: 50000000 time: 22ms

java rows:5 threads: 5 sum: 50000000 time: 36ms

c++  rows:5 threads: 5 sum: 50000000 time: 21ms

java rows:5 threads: 6 sum: 50000000 time: 56ms

c++  rows:5 threads: 6 sum: 50000000 time: 21ms

java rows:5 threads: 7 sum: 50000000 time: 63ms

c++  rows:5 threads: 7 sum: 50000000 time: 21ms

java rows:5 threads: 8 sum: 50000000 time: 56ms

c++  rows:5 threads: 8 sum: 50000000 time: 21ms

java rows:6 threads: 0 sum: 60000000 time: 61ms

c++  rows:6 threads: 0 sum: 60000000 time: 37ms

java rows:6 threads: 1 sum: 60000000 time: 77ms

c++  rows:6 threads: 1 sum: 60000000 time: 31ms

java rows:6 threads: 2 sum: 60000000 time: 59ms

c++  rows:6 threads: 2 sum: 60000000 time: 25ms

java rows:6 threads: 3 sum: 60000000 time: 61ms

c++  rows:6 threads: 3 sum: 60000000 time: 25ms

java rows:6 threads: 4 sum: 60000000 time: 58ms

c++  rows:6 threads: 4 sum: 60000000 time: 25ms

java rows:6 threads: 5 sum: 60000000 time: 57ms

c++  rows:6 threads: 5 sum: 60000000 time: 25ms

java rows:6 threads: 6 sum: 60000000 time: 63ms

c++  rows:6 threads: 6 sum: 60000000 time: 25ms

java rows:6 threads: 7 sum: 60000000 time: 57ms

c++  rows:6 threads: 7 sum: 60000000 time: 25ms

java rows:6 threads: 8 sum: 60000000 time: 57ms

c++  rows:6 threads: 8 sum: 60000000 time: 25ms

java rows:6 threads: 9 sum: 60000000 time: 38ms

c++  rows:6 threads: 9 sum: 60000000 time: 25ms

java rows:7 threads: 0 sum: 70000000 time: 67ms

c++  rows:7 threads: 0 sum: 70000000 time: 43ms

java rows:7 threads: 1 sum: 70000000 time: 84ms

c++  rows:7 threads: 1 sum: 70000000 time: 37ms

java rows:7 threads: 2 sum: 70000000 time: 69ms

c++  rows:7 threads: 2 sum: 70000000 time: 30ms

java rows:7 threads: 3 sum: 70000000 time: 69ms

c++  rows:7 threads: 3 sum: 70000000 time: 30ms

java rows:7 threads: 4 sum: 70000000 time: 68ms

c++  rows:7 threads: 4 sum: 70000000 time: 29ms

java rows:7 threads: 5 sum: 70000000 time: 58ms

c++  rows:7 threads: 5 sum: 70000000 time: 29ms

java rows:7 threads: 6 sum: 70000000 time: 57ms

c++  rows:7 threads: 6 sum: 70000000 time: 30ms

java rows:7 threads: 7 sum: 70000000 time: 38ms

c++  rows:7 threads: 7 sum: 70000000 time: 29ms

java rows:7 threads: 8 sum: 70000000 time: 74ms

c++  rows:7 threads: 8 sum: 70000000 time: 29ms

java rows:7 threads: 9 sum: 70000000 time: 42ms

c++  rows:7 threads: 9 sum: 70000000 time: 29ms

java rows:7 threads: 10 sum: 70000000 time: 41ms

c++  rows:7 threads: 10 sum: 70000000 time: 29ms

java rows:8 threads: 0 sum: 80000000 time: 78ms

c++  rows:8 threads: 0 sum: 80000000 time: 49ms

java rows:8 threads: 1 sum: 80000000 time: 92ms

c++  rows:8 threads: 1 sum: 80000000 time: 44ms

java rows:8 threads: 2 sum: 80000000 time: 69ms

c++  rows:8 threads: 2 sum: 80000000 time: 34ms

java rows:8 threads: 3 sum: 80000000 time: 68ms

c++  rows:8 threads: 3 sum: 80000000 time: 33ms

java rows:8 threads: 4 sum: 80000000 time: 67ms

c++  rows:8 threads: 4 sum: 80000000 time: 33ms

java rows:8 threads: 5 sum: 80000000 time: 44ms

c++  rows:8 threads: 5 sum: 80000000 time: 33ms

java rows:8 threads: 6 sum: 80000000 time: 58ms

c++  rows:8 threads: 6 sum: 80000000 time: 33ms

java rows:8 threads: 7 sum: 80000000 time: 42ms

c++  rows:8 threads: 7 sum: 80000000 time: 33ms

java rows:8 threads: 8 sum: 80000000 time: 41ms

c++  rows:8 threads: 8 sum: 80000000 time: 33ms

java rows:8 threads: 9 sum: 80000000 time: 71ms

c++  rows:8 threads: 9 sum: 80000000 time: 33ms

java rows:8 threads: 10 sum: 80000000 time: 44ms

c++  rows:8 threads: 10 sum: 80000000 time: 33ms

java rows:8 threads: 11 sum: 80000000 time: 63ms

c++  rows:8 threads: 11 sum: 80000000 time: 33ms

java rows:9 threads: 0 sum: 90000000 time: 84ms

c++  rows:9 threads: 0 sum: 90000000 time: 54ms

java rows:9 threads: 1 sum: 90000000 time: 102ms

c++  rows:9 threads: 1 sum: 90000000 time: 47ms

java rows:9 threads: 2 sum: 90000000 time: 76ms

c++  rows:9 threads: 2 sum: 90000000 time: 39ms

java rows:9 threads: 3 sum: 90000000 time: 69ms

c++  rows:9 threads: 3 sum: 90000000 time: 37ms

java rows:9 threads: 4 sum: 90000000 time: 66ms

c++  rows:9 threads: 4 sum: 90000000 time: 38ms

java rows:9 threads: 5 sum: 90000000 time: 69ms

c++  rows:9 threads: 5 sum: 90000000 time: 38ms

java rows:9 threads: 6 sum: 90000000 time: 63ms

c++  rows:9 threads: 6 sum: 90000000 time: 38ms

java rows:9 threads: 7 sum: 90000000 time: 48ms

c++  rows:9 threads: 7 sum: 90000000 time: 37ms

java rows:9 threads: 8 sum: 90000000 time: 46ms

c++  rows:9 threads: 8 sum: 90000000 time: 38ms

java rows:9 threads: 9 sum: 90000000 time: 73ms

c++  rows:9 threads: 9 sum: 90000000 time: 37ms

java rows:9 threads: 10 sum: 90000000 time: 65ms

c++  rows:9 threads: 10 sum: 90000000 time: 38ms

java rows:9 threads: 11 sum: 90000000 time: 62ms

c++  rows:9 threads: 11 sum: 90000000 time: 37ms

java rows:9 threads: 12 sum: 90000000 time: 69ms

c++  rows:9 threads: 12 sum: 90000000 time: 37ms

java rows:10 threads: 0 sum: 100000000 time: 90ms

c++  rows:10 threads: 0 sum: 100000000 time: 60ms

java rows:10 threads: 1 sum: 100000000 time: 106ms

c++  rows:10 threads: 1 sum: 100000000 time: 53ms

java rows:10 threads: 2 sum: 100000000 time: 78ms

c++  rows:10 threads: 2 sum: 100000000 time: 43ms

java rows:10 threads: 3 sum: 100000000 time: 76ms

c++  rows:10 threads: 3 sum: 100000000 time: 42ms

java rows:10 threads: 4 sum: 100000000 time: 76ms

c++  rows:10 threads: 4 sum: 100000000 time: 41ms

java rows:10 threads: 5 sum: 100000000 time: 66ms

c++  rows:10 threads: 5 sum: 100000000 time: 42ms

java rows:10 threads: 6 sum: 100000000 time: 67ms

c++  rows:10 threads: 6 sum: 100000000 time: 41ms

java rows:10 threads: 7 sum: 100000000 time: 66ms

c++  rows:10 threads: 7 sum: 100000000 time: 41ms

java rows:10 threads: 8 sum: 100000000 time: 67ms

c++  rows:10 threads: 8 sum: 100000000 time: 41ms

java rows:10 threads: 9 sum: 100000000 time: 71ms

c++  rows:10 threads: 9 sum: 100000000 time: 44ms

java rows:10 threads: 10 sum: 100000000 time: 48ms

c++  rows:10 threads: 10 sum: 100000000 time: 42ms

java rows:10 threads: 11 sum: 100000000 time: 65ms

c++  rows:10 threads: 11 sum: 100000000 time: 41ms

java rows:10 threads: 12 sum: 100000000 time: 69ms

c++  rows:10 threads: 12 sum: 100000000 time: 41ms

java rows:10 threads: 13 sum: 100000000 time: 60ms

c++  rows:10 threads: 13 sum: 100000000 time: 41ms




 array a 2 dimensioni (una matrice)



Ottimo lavoro: sei riuscito a dare l'inconfutabile dimostrazione di non 

riuscire ad imparare dai tuoi errori, neanche quando ti si copre di 

improperi per fartelo notare.


 improperi per fartelo notare.



enococks e` un coglione senza speranza. E dire che un confronto serio sul parallelismo C++ e Java gli era stato anche messo davanti agli occhi. Niente.

Notare come crea i thread in Java :) Notare che usa l'high resolution clock in C++ ma non in Java :)

Il solito patetico buffone incompetente e, a questo punto, masochista.


Il 28/04/19 10:15, Dr.UgoGagliardelli ha scritto:


sei riuscito solo  sparare un sacco di scemenze

Complimenti





Ma che glielo dici a fa!

Ormai anche lui e' cronico nella quattroandreide!





-- 

ac (x=y-1)

Aborro il Killfile

(La violenza e' l'ultimo rifugio degli incapaci -Salvor Hardin-)


 Complimenti



"La proiezione è un meccanismo di difesa arcaico e primitivo che consiste nello spostare sentimenti o caratteristiche propri, o parti del Sé, su altri oggetti o persone."



https://it.wikipedia.org/wiki/Proiezione_(psicologia)



 Ormai anche lui e' cronico nella quattroandreide!



Eccolo. Per la serie "Fate entrare i clown!".

Enococks e il suo gemello scureggia.


 array a 2 dimensioni (una matrice)



ma sono contingui?

chiedo per un amico.


 ma sono contingui?



Ovvio. Lo sanno tutti che "gli array non contigui non esistono" (enococks). 

Pero`, se ti puo` consolare, sono atomici. 



sono mesi che lo si percula in lungo e in largo e lui porello passa il 

weekend a scrivere un benchmark per postarlo qui. a me comincia a farmi 

pena. che dite, glie lo dicamo "bravo" una volta? 


 chiedo per un amico. 



Proficuo!! <3


 per cui non lo consiglio per la produzione 



ESTIKAZZI??


 che dite, glie lo dicamo "bravo" una volta? 



no.



--

"Brava, Giovanna. Brava..." cit.


 postarlo qui



è il richard benson dell'informatica


 



Hai perfettamente ragione

Ma dal dottore mi aspettavo qualcosa di piu delle 4 scemenze sparate

Tipo qualche motivazione sul perche quel codice,secondo lui, ha delle 

pecche in fatto di performance





beh....dovresti anche motivare il tuo giudizio.


'a giggè. mavattapijànderculo si


Il 28/04/19 14:35, 4ndre4 ha scritto:


Pirlotto bello, io non ho mai scritto che quelli che chiami array non 

contigui non esistono

Tanto che se voglio lo posso anche costruire

Semplicemente non sono array




 



vai avanti tu che mi vien da ridere




 io non ho mai scritto 



classico.


 no.



kattivik!


 beh....dovresti anche motivare il tuo giudizio.



orcozzio che palle. no, il tempo delle motivazioni è finito, ora si 

percula e basta.


 Semplicemente non sono array



Grandissimo COGLIONE, ancora? Ancora con queste stupidaggini? Ancora? Dopo che sei stato smerdato 100.000 volte e dopo che, per 100.000 volte ti e` stato dimostrato che gli array non contigui esistono eccome, hai ancora il coraggio di scrivere certe bestialita`?



VAI A STUDIARE, CAPRA!!!


On Monday, 29 April 2019 02:42:01 UTC+1, enoquick  wrote:


Stai dicendo che Zio Giggetto sei sempre tu? No, perche`, si era capito, sai? :D


 

Cosa fai? Elemosini una lezioncina su come si fa a programmare con 

linguaggi OO?

Prima impara, poi eventualmente chiedi consiglio.



Vedi zio, sono mesi che gli vien detto, con motivazioni che ha sempre 

ignorato, che prima di fare i suoi benchmark dovrebbe avere la 

padronanza dei linguaggi che usa.

Gli sono stati dati tutti i riferimenti possibili a documentazione e 

tutorial, ha sempre risposto che la documentazione la guarda se gli pare.

Cosa avrei dovuto fare o dire? Intavolare una lezione su tutto quello 

che non sa ma che dovrebbe sapere?

Non ho ne' indole ne' mandato, ed il mezzo non e' consono.



Perche' non hai notato la bambinesca tecnica usata per costruire la 

matrice, o la tecnica per controllare l'index out of bound?


 matrice



...è un chiaro omaggio al Cara, l'array 1D e "una moltiplicazione" per l'indexing...



Un sacco? Semmai una.

Che poi ho semplicemente detto che la tua dimostrazione mi ha convinto 

perche' inappuntabile, formalmente corretta, argomentata coerentemente 

ai dati sperimentali e aderente al metodo scientifico in quanto sempre 

verificabile: non imparerai mai.


tuscè cit.



Non ci avevo pensato. Ritiro tutto! :-)


 io non ho mai scritto



irrilevante, giggettoquick. non conta un cazzo ne' se lo scrivi o meno, ne' se lo pensi o meno.


 Non ci avevo pensato. Ritiro tutto! :-) 



con proficuo! cit.



C'e' differenza?

Se parlo di discontinuita' della serie dei numeri interi, dire che tale 

discontinuita' non esiste o e' una non discontinuita' o non e' una 

discontinuita', non e' forse la stessa cosa?

Ovviamente se utilizzo la definizione comunemente accettata di 

discontinuita'.

Se tu, nel tuo  intimo, vuoi utilizzare una definizione difforme di 

array, tientelo per te, per tutti gli altri gli array saranno sempre tali.


 Se parlo di discontinuita' della serie dei numeri interi[...]



Eh, vai troppo sul pesante con lui. Devi usare esempi piu` terra terra. 



Ti faccio vedere: 



Sappiamo tutti che le scoregge rumorose esistono, cosi` come le scoreggie silenziose. 



Lui invece afferma che solo quelle silenziose esistono.



Allora gliene fai una. Una di quelle alla "RRRRRobeeeerrrrrto". Gliela fai davanti, magari in faccia. 



Lui ti risponde: eh, mica ho mai detto che quella che tu chiami "scoreggia rumorosa" non esiste; ho detto che non e` una scoreggia.



E` enococks. Cosa vogliamo pretendere.


 matrice, o la tecnica per controllare l'index out of bound?



LOL :) Non li avevo notati perche` la montagna di letame che scrive nei suoi "benchmark" la salto a pie` pari. Ho solo notato un paio di cose a colpo d'occhio. Ovviamente ignora cosa siano i thread pool in Java, cosa siano gli executor, cosa sia un fork/join. 



```

private int index(int r,int c) { return r*m_cols + c;}

```



LOL :D ... E` veramente un coglione. Io vorrei davverlo vederlo a scrivere software in un team. Non durerebbe due secondi. Tutte le sue certezze sull'essere il Pico de Paperis dell'informatica crollerebbero all'istante.


 dei numeri interi ...



ancora più semplice: row-major e column-major order.



ma stiamo parlando di un ritardatoquick. quindi












 una definizione difforme di array,



sarebbe un troll. invece è proprio un ritardato con presunzioni strutturali e "atomiche".


 LOL :D ... E` veramente un coglione. Io vorrei davverlo vederlo a scrivere software in un team.



Io no, non sono un amante dell'horror. Saremmo nell'ambito della science 

fiction, ma anche in questo caso di un genere puerile non documentato.




 matrice, o la tecnica per controllare l'index out of bound?



Come lo si fa in modo /non bambinesco/ ?

E quale e' la tecnica migliore per controllare il fuori indice?



Insegnate, perdinci, insegnate!

Sta roba non la leggi solo tu e quei due scalzacani che ti fanno da 

/pendant/ (e vaisvirsa).



a) lui fa cosi'  (ribrezzo)

b) si dovrebbe fare cola'  (profumo di gelsomini)





Dalle mie parti c'e' un modo di dire (toh ho imparato che esiste

qualcosa che si definisce "modo di dire")



"A fa i froci cor culo dell'artri so boni tutti"





-- 

ac (x=y-1)

Aborro il Killfile

(La violenza e' l'ultimo rifugio degli incapaci -Salvor Hardin-)



Mettiti d'accordo con te stesso.

Sbaglio o da qualche parte hai scritto che /nun se poteva fa/  ?





Aho! Comincio ad arrossire.

A quando i /tuoi/ omaggi?



 Insegnate, perdinci, insegnate!



Scalzacane e` quel che sei, coglione! STUDIA CAPRA STUDIA!

Questo non e` il tuo corso di recupero, merdone!


Il 29/04/2019 13:19, 4ndre4 ha scritto:



Ti sei sentito chiamato in causa?

Cerca di non frignare.

Fai il bravo bambino!



 Insegnate, perdinci, insegnate!



Questa non e' una scuola. Scrivi su stackoverflow se ti pare. 

Eventualmente si potrebbe dare un consiglio a uno che te lo chiede col 

cappello in mano.

L'arroganza assieme all'ignoranza contornata di supponenza e di pretese 

mi fa semplicemente sghignazzare.

O vuoi sghignazzare solo tu?


Il 29/04/19 01:39, Dr.UgoGagliardelli ha scritto:


Non e' la stessa cosa

L'array,l' ho  inteso come struttura,non come definizione in un linguaggio

Ad esempio in alcuni linguaggi posso scrivere a["pippo"]=3

Questo e' un array nella sintassi del linguaggio ma la sua 

implementazione non e' detto che sia un array

Potrebbe essere un hash table (che e' un array) od un albero binario,od 

un albero rosso/nero,od altro.

In altri linguaggi invece si chiama  mappa o dizionario

Quello che il pirlotto chiama array non contiguo potrebbe essere 

implementato come un lista di array oppure altro ancora.

Come struttura,l'array e' solo uno,memoria contigua di elementi dello 

stesso tipo

L'array,assieme all'altra struttura di base che e' il record hanno la 

particolarita che sono facilmente implementabili a livello di linguaggio 

macchina e non solo,attraverso essi posso costruire qualunque struttura

Sono le strutture assiomatiche per le comuni macchine Van Neumann,che 

poi,parallelismo a parte, sono i computer di oggi.












Il 29/04/19 00:42, Dr.UgoGagliardelli ha scritto:


Qui non si tratta di imparare a come progettare sw in java che 

sinceramente me ne frega ben poco ma di benchmark

Ora, se quel benchmark ha qualche limite sulle prestazioni in java (in 

c++ e' perfetto) fammelo sapere




Il 29/04/19 00:59, Dr.UgoGagliardelli ha scritto:


E si, tu che sei bravo una matrice a due dimensioni la implementerai in 

altri modi

Anche io non userei mai quella classe matrice in c++ per codice di 

produzione

Semplicemente ne farei una piu completa a N dimensioni (con N costante a 

compile time) e con piu operazioni

Ma questo e' solo un bechmark, non un trattato su come si implementa una 

matrice

Per l' out of bound tu che sei un genio la implementerai sicuramente 

come una



if (outbound(x,y))

    throw out_of_bound_exception();



Tu, ma io no, in quanto non voglio perdita di prestazioni sul codice di 

produzione.

In fondo perche fare un check ogni volta anche quando non serve ?

E' la bella differenza tra il ragionare di un programmatore  c/c++ ed un 

programmatore java.






 



E si,secondo il pirlotto un matrice non la si poteva costruire da un 

array monodimensionale

Subito smentito,gli ho fatto vedere il codice




 



Chissa cosa ha di male quel metodo privato vorrei saperlo anche io

Avanti pirlotto,spara la tua






 O vuoi sghignazzare solo tu?



Cos'e' questa la famosa /proiezione/ del tuo collaterale?

Non ho nulla contro gli /sghignazzi/ di altri, benvengano!

E lo sghignazzo spesso coinvolge anche lo sghignazzante.

Con tutti sti  Faraoni che girano i poveri terzini della

Sampdoria (il sottoscritto) non hanno diritto di vivere.



 O vuoi sghignazzare solo tu?





https://stackoverflow.com/questions/29605708/best-way-to-check-if-object-is-out-of-bounds-in-array




Facile basta cercare




 Subito smentito,gli ho fatto vedere il codice



A RINCOJONITOOOO, ma chi smentisci tu? :D Non hai capito un cazzo come al solito. COGLIONE!




 Chissa cosa ha di male quel metodo privato vorrei saperlo anche io



Eh, ma il ng non e` mica il tuo corso di recupero scolastico, eh? Io perculo un arrogante incompetente come te; mica perdo tempo a insegnargli come si programma.


 Ti sei sentito chiamato in causa?



Non serve. Io sono *SEMPRE* nei tuoi pensieri, Sandrina. 


 La cosa piu' carina  che ottiene e' l'epiteto di cretino?



Un arrogante incompetente che difende la sua incompetenza, quando si cerca di spiegargli dov'e` che sbaglia, si merita l'epiteto eccome.



Tu, poi, sei solo un povero stronzo che trolla, quindi l'epiteto te lo becchi a prescindere ;)


 Illumina un po tutti noi



"Tutti noi" chi? Tu, Cara, e il tuo amico immaginario Proficuo? 



Questo non e` il tuo corso di recupero scolastico, arrogante, spocchioso, viscido incompetente che non sei altro.


 programmatore java.



Ma vai a fare in culo. Quale "programmatore Java", idiota? Bisogna spiegarti ancora una volta che non esiste nessun "programmatore Java"? Il tuo "ragionare" e` quello di un INCOMPETENTE che di informatica NON SA UN CAZZO.




 Qui non si tratta di imparare a come progettare sw



E` quello il tuo problema. Non te lo sei mai posto come obiettivo. E si vede.


 Quello che il pirlotto chiama array non contiguo potrebbe essere 



Grandissimo coglione incompetente. E` il mondo dell'informatica - quello che tu non conosci perche` non appartieni ad esso - a chiamarli array non contigui. CAPRA, STUDIA, CAPRA!


 





Guarda che non sei l'insegnante che insegna a progettare sw

Scendi dal piedistallo,bello

Qualunque compilatore decente c++ che il jit java espandono inline se e' 

questo che ti preoccupa

Se non e' questo che ti preoccupa avanti spiega che ti asfalto subito


Il 29/04/19 08:43, 4ndre4 ha scritto:


che sei l'avvocato ?

Se non ti piace spiega altrimenti  taci









Ehhhh si,si,si

Tesssssoro mio.

Sempre in borgata direbbero "Fossi na bella fica tanto tanto"



Per te ho la stessa bramosia (in inglese cose'? craving?) che

ho per la /scacaccia/ .



 



E vai, ha scritto l'esperto che non spiega mai un tubo


Il 29/04/19 08:46, 4ndre4 ha scritto:


hai dimenticato che avevo scritto java e che tu hai sonoramente tagliato


Il 29/04/19 08:48, 4ndre4 ha scritto:


Pirlotto bello,io ho fatto scienza dell'informazione all'universita

Mi sa che quello che deve studiare sei proprio tu,tra un piatto e 

l'altro nel bar di londra dove lavori ricordati di leggere un bel libro 

sulle strutture dati.

CAPRA, studia CAPRA






 



Veramente quel benchmark era pronto da mesi

Comunque era l'ultimo ed oramai le miei conclusioni le ho tratte




 Se non e' questo che ti preoccupa avanti spiega che ti asfalto subito



hahahhahahah... Tu? Asflatare me? :D Sogna bimbo, sogna.


 Ehhhh si,si,si



Eh, si`! E` cosi`! ;)


 hai dimenticato che avevo scritto java e che tu hai sonoramente tagliato



Non ho dimenticato niente. Il concetto che ho scritto vale.




 Pirlotto bello,io ho fatto scienza dell'informazione all'universita



LOL :D Che hai fatto tu? :D Tu ti scaccolavi in fondo all'aula, ecco che facevi. Bella soddisfazione che avranno i tuoi professori nel vederti postare sesquipedali stronzate qui dentro. Tu c'entri con l'informatica come i cavoli a merenda.


 Se non ti piace spiega altrimenti  taci



TACI, TU, DEMENTE, E STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA, STUDIA!!!! COGLIONE!




Il 29/04/19 09:36, 4ndre4 ha scritto:


Dai pirlotto bello

Fammi vedere qualcosa di progettazione sw in c++ che non so

Avanti,invece  che fare le solite illazioni spara qualcosa di 

interessante cosi ti asfalto subito (questa e' non e' una illazione ma 

una ipotesi)






Il 29/04/19 09:38, 4ndre4 ha scritto:



 



Quando vuoi






 Non sono mica io che ho pregato di insegnarmi



Certo che lo fai. In ogni tuo post. Spiegatemi, fatemi vedere, ditemi, allora spiega, allora mostra. Pena poi girare la testa dall'altra parte quando le cose, si`, ti vengono spiegate e vieni messo all'angolo. COGLIONE!


Il 29/04/19 09:38, 4ndre4 ha scritto:


Pirlotto bello, io all'universita ci andavo ben poco,semplicemente non 

ne avevo bisogno

Bastava superare gli esami




 





Pirlotto bello

Se qualcuno spara una bella cazzata su "non si fa cosi" non e' che lo 

chiedo per insegnarmi ma solo per fargli capire che eventualmente e' lui 

che ha scritto una cazzata,oppure che ha una visione di progettazione sw 

un po diversa dalla mia,ugualmente valida come la mia ma non 

necessariamente migliore

Ovviamente non parlo di java dove non  mi ritengo un esperto ma di c++




 che /nun se poteva fa/  ? 



sbagliate. come sempre. del resto manco sapete leggere.



ho scritto esattamente:

"""

ma del resto che ne sai tu, che vuoi indirizzare multiple dimensioni con una moltiplicazione?

"""



e dopo:

"""

ovvio. del resto "In fondo basta una moltiplicazione." sono parole tue.

"""



è italiano e anche molto preciso. 



aspetto ancora di vedere

 *indirizzare multiple dimensioni con una moltiplicazione*.





fate con calma, eh.


 

Vivere e rompere i coglioni non sono la stessa cosa.


 Facile basta cercare



Eventualmente lo si fa *prima* di scrivere cagate. Ed eventualmente lo 

si anche verificando anche che il linguaggio sia quello giusto.






 programmatore java.



No no, no ci sei proprio, niente di tutto questo. I tuoi assert a che 

cazzo servono allora?

Prova a pensarci, o almeno sospetta che se ti ho mosso una critica lo 

possa aver fatto per qualche ragione.

Ma tu queste sottigliezza non le cogli, continua a buttarti nel 

vittimismo mal riposto, e rimarrai sempre l'incompetente che sei.




 

Te l'ho fatto ben sapere. Se non te ne frega niente figurati a me.



Hai dimenticato che *java* l'hai appunto scritto tu, non io, che avevo 

scritto *linguaggi OO*.



Non avevo dubbi. Hai tratto solo conclusioni che fanno comodo a te senza 

dimostrare alcunche'.

Per questo sei e sarai un incompetente.


 Bastava superare gli esami



Cosa ti sia servito e' ben chiaro.

Se ti serviva solo sostenere esami, avresti potuto farlo tranquillamente 

in una qualsiasi universita' online.

Io, ad esempio, ci sono andato per imparare. Ti assicuro che oltre a 

quello che ho imparato dalle lezioni, ho imparato molto anche dal 

confronto con altri.

A te di sicuro manca.




 che ha scritto una cazzata



No, sei TU che scrivi cazzate e le difendi con la tipica arroganza che solo un colossale IDIOTA come te puo` avere. Nessuno ha l'obbligo di farti notare le cazzate che scrivi. Nessuno ha l'obbligo di correggertele. A furia di scrivere fesserie, ti stai facendo ridere dietro da mezzo ng. La tua "visione" della progettazione software l'hai gia` offerta e fa letteralmente C-A-G-A-R-E. Tu non sei in grado neanche di seguire le regole piu` basiche della progettazione software. Lo hai ampiamente dimostrato.


On Monday, 29 April 2019 15:47:40 UTC+1, enoquick  wrote:



[...]

Non perdere tempo con queste stronzate di "benchmark". STUDIA, CAPRA!


 Pirlotto bello, io all'universita ci andavo ben poco



Si vede, COGLIONE. Non basta superare gli esami. Bisogna capire cio` che si studia. E tu non ci hai capito una ceppa. 


 Fammi vedere qualcosa di progettazione sw in c++ che non so



LOL :D Mi ci vorrebbero dieci vite per listare tutto cio` che non sai, e di C++, e di C, e di Java, e di informatica. Non sei cosi` importante. Ma chi asfalti tu? :D Chi? TU? Asfaltare? LE STRADE puoi asfaltare tu. E non saresti neanche in grado.



Ma quale progettazione C++ :D ma pensi davvero di essere un esperto di C++ o di progettazione software? Un programmatorucolo che non sa manco cosa siano i "branchs" (per dirlo alla tua maniera)? :D A COJONEEEEE!!! Vuoi che cominci a citarti Alexandrescu, Sutter, Lippman, Stroustrup e smerdarti subito? :D




 E vai, ha scritto l'esperto che non spiega mai un tubo



Io spiego, tutti i giorni, a coloro con cui lavoro, non a dementi arroganti come te. 


 Vivere e rompere i coglioni non sono la stessa cosa.



Capisco quindi il sottoscritto rompe i coglioni.

Guarda non credo te lo abbia ordinato il medico di leggere

i miei post e tantomeno intervenire cosi' come non lo ha ordinato ad

altri.







-- 

ac (x=y-1)

Aborro il Killfile

(La violenza e' l'ultimo rifugio degli incapaci -Salvor Hardin-)



Non so in UK, in Italia le lezioni universitarie sono pubbliche a 

beneficio di tutti, anche nelle facolta' a numero chiuso, anche a 

beneficio di chi non deve sostenere esami per il classico pezzo di 

carta; igienica a questo punto.

E lo sbruffone si vanta di esserci 'andato poco' come se fosse un titolo 

preferenziale che fa figo esibire.

Sono sinceramente sgomento da questa notizia, e pensare che fino ad ora 

ritenevo che un diploma universitario fosse prova di cultura superiore.

Ho sbagliato, lo ammetto, mi consolo che se domani dovessi morire lo 

farei meno ignorante di oggi.


 Capisco quindi il sottoscritto rompe i coglioni.



Non mi riferivo a te, tu sei il terzino di un'oscura squadra parrocchiale.



Le tonsille! Raccattale che sporchi tutto.

E fatte na mezza litrata di Valium che poche gocce /nun te basteno/ .



 Guarda non credo te lo abbia ordinato il medico di leggere



A te il medico non ha ordinato di fare il troll. Eppure insisti.


 E fatte na mezza litrata di Valium che poche gocce /nun te basteno/ .



STUDIA,STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA,STUDIA, STUDIA, COGLIONE!


 preferenziale che fa figo esibire.



Ma lui e` enocock! Il famoso enocock!! All'universita` lo conosco tutti. Stanno ancora a ride!! Lui fa l'esame ad occhi chiusi! Tanto basta passarlo!! A che pro seguire le lezioni?? Ha capito tutto dell'universita`, lui. Tutti 18 e vai tranquillo! Peccato che si sia perso, tra le tante, la lezione del professore sulla C-contiguity vs. Fortran-contiguity. E che voi fa', lui all'universita` ci andava poco. Non usa un VCS, non fa "branchs", non scrive unit test, non lavora in un team professionale. Pero` ha studiato scienze dell'informazione, lui, mica cazzi, eh? E` uno scienziato che combina strutture atomiche in forme meravigliose.



Non gli serve solo un professore universitario, ma anche un buon psicologo che sappia trattare la sua dissonanza cognitiva e i suoi meccanismi proiettivi di difesa. Se fossi un suo familiare (Dio mi ha fortunatamente risparmiato il supplizio) sarei seriamente preoccupato per lui: un arrogante, spocchioso, incompetente, che non conosce ne` la lingua italiana ne` l'informatica, ed e` piu` disposto a incasellare gli altri in sette faziose che gli farebbero la guerra (per ragioni arcane), piuttosto che ammettere i propri errori e rimediare. 



Ha passato la cinquantina e continua a rispondere come un dodicenne: "vai avanti tu che mi viene da ridere", "ha parlato lui!", "specchio riflesso!". Il bello e` che ha la pretesa di dare lezioni: "ti asfalto!" ... LOL :D


 Sutter, Stroustrup



ci ho già provato. non gli piacciono i papers che scrivono e le linee guida che indicano. 



enobollocks non ha bisogno di niente e nessuno - è "senza mamma", lui.


 Ma lui e` enocock! Il famoso enocock!! 



in italia molti oramai seguono le sue idee... Era così??



diocane ma vuoi vedere che gli unici dissidenti siamo noi qui? Porc...


 visto che non conosco la tua lingua ermetica.



Quando ti fa piu' comodo.

Dalla "maleducazione" siamo passati all'ermetismo.

Vedi che anche il buon GinoSelmi puo' ancora insegnarti qualcosa!?

Btw potevi/puoi fare l'imprenditore e' nelle tue corde.

So cose che insegnano in parrocchia (sempre frequentata poco)

forse ne sai molto piu' di me.

